mirror of
https://github.com/FelixKratz/SketchyBar
synced 2025-02-17 13:08:28 +00:00
bottom position clicking fixed
This commit is contained in:
parent
a6eb4a8b38
commit
7e96b93e6f
5 changed files with 16 additions and 12 deletions
15
src/bar.c
15
src/bar.c
|
@ -258,7 +258,7 @@ void bar_refresh(struct bar *bar)
|
||||||
bar_draw_line(bar, *label, label_position.x, label_position.y);
|
bar_draw_line(bar, *label, label_position.x, label_position.y);
|
||||||
bar_item->label_line.bounds.origin = label_position;
|
bar_item->label_line.bounds.origin = label_position;
|
||||||
bar_item->icon_line.bounds.origin = icon_position;
|
bar_item->icon_line.bounds.origin = icon_position;
|
||||||
bar_item_set_bounding_rect_for_space(bar_item, sid);
|
bar_item_set_bounding_rect_for_space(bar_item, sid, bar->origin);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGContextFlush(bar->context);
|
CGContextFlush(bar->context);
|
||||||
|
@ -266,7 +266,7 @@ void bar_refresh(struct bar *bar)
|
||||||
SLSReenableUpdate(g_connection);
|
SLSReenableUpdate(g_connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
static CGPoint bar_create_frame(struct bar *bar, CFTypeRef *frame_region)
|
void bar_create_frame(struct bar *bar, CFTypeRef *frame_region)
|
||||||
{
|
{
|
||||||
CGRect bounds = display_bounds(bar->did);
|
CGRect bounds = display_bounds(bar->did);
|
||||||
CGPoint origin = bounds.origin;
|
CGPoint origin = bounds.origin;
|
||||||
|
@ -282,19 +282,18 @@ static CGPoint bar_create_frame(struct bar *bar, CFTypeRef *frame_region)
|
||||||
}
|
}
|
||||||
|
|
||||||
bar->frame = (CGRect) {{0, 0},{bounds.size.width, g_bar_manager.height}};
|
bar->frame = (CGRect) {{0, 0},{bounds.size.width, g_bar_manager.height}};
|
||||||
|
bar->origin = origin;
|
||||||
CGSNewRegionWithRect(&bar->frame, frame_region);
|
CGSNewRegionWithRect(&bar->frame, frame_region);
|
||||||
|
|
||||||
return origin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void bar_resize(struct bar *bar)
|
void bar_resize(struct bar *bar)
|
||||||
{
|
{
|
||||||
CFTypeRef frame_region;
|
CFTypeRef frame_region;
|
||||||
CGPoint origin = bar_create_frame(bar, &frame_region);
|
bar_create_frame(bar, &frame_region);
|
||||||
|
|
||||||
SLSDisableUpdate(g_connection);
|
SLSDisableUpdate(g_connection);
|
||||||
SLSOrderWindow(g_connection, bar->id, -1, 0);
|
SLSOrderWindow(g_connection, bar->id, -1, 0);
|
||||||
SLSSetWindowShape(g_connection, bar->id, origin.x, origin.y, frame_region);
|
SLSSetWindowShape(g_connection, bar->id, bar->origin.x, bar->origin.y, frame_region);
|
||||||
bar_refresh(bar);
|
bar_refresh(bar);
|
||||||
SLSOrderWindow(g_connection, bar->id, 1, 0);
|
SLSOrderWindow(g_connection, bar->id, 1, 0);
|
||||||
SLSReenableUpdate(g_connection);
|
SLSReenableUpdate(g_connection);
|
||||||
|
@ -319,9 +318,9 @@ struct bar *bar_create(uint32_t did)
|
||||||
*((int8_t *)(clear_tags) + 0x5) = 0x20;
|
*((int8_t *)(clear_tags) + 0x5) = 0x20;
|
||||||
|
|
||||||
CFTypeRef frame_region;
|
CFTypeRef frame_region;
|
||||||
CGPoint origin = bar_create_frame(bar, &frame_region);
|
bar_create_frame(bar, &frame_region);
|
||||||
|
|
||||||
SLSNewWindow(g_connection, 2, origin.x, origin.y, frame_region, &bar->id);
|
SLSNewWindow(g_connection, 2, bar->origin.x, bar->origin.y, frame_region, &bar->id);
|
||||||
CFRelease(frame_region);
|
CFRelease(frame_region);
|
||||||
|
|
||||||
SLSSetWindowResolution(g_connection, bar->id, 2.0f);
|
SLSSetWindowResolution(g_connection, bar->id, 2.0f);
|
||||||
|
|
|
@ -46,6 +46,7 @@ struct bar
|
||||||
CFRunLoopTimerRef refresh_timer;
|
CFRunLoopTimerRef refresh_timer;
|
||||||
CFRunLoopTimerRef shell_refresh_timer;
|
CFRunLoopTimerRef shell_refresh_timer;
|
||||||
CGRect frame;
|
CGRect frame;
|
||||||
|
CGPoint origin;
|
||||||
};
|
};
|
||||||
|
|
||||||
void bar_refresh(struct bar *bar);
|
void bar_refresh(struct bar *bar);
|
||||||
|
|
|
@ -137,10 +137,13 @@ CGRect bar_item_construct_bounding_rect(struct bar_item* bar_item) {
|
||||||
bounding_rect.origin = bar_item->icon_line.bounds.origin;
|
bounding_rect.origin = bar_item->icon_line.bounds.origin;
|
||||||
bounding_rect.size.width = CGRectGetMaxX(bar_item->label_line.bounds) - CGRectGetMinX(bar_item->icon_line.bounds);
|
bounding_rect.size.width = CGRectGetMaxX(bar_item->label_line.bounds) - CGRectGetMinX(bar_item->icon_line.bounds);
|
||||||
bounding_rect.size.height = CGRectGetMaxY(bar_item->label_line.bounds) > CGRectGetMaxY(bar_item->icon_line.bounds) ? CGRectGetMaxY(bar_item->label_line.bounds) : CGRectGetMaxY(bar_item->icon_line.bounds);
|
bounding_rect.size.height = CGRectGetMaxY(bar_item->label_line.bounds) > CGRectGetMaxY(bar_item->icon_line.bounds) ? CGRectGetMaxY(bar_item->label_line.bounds) : CGRectGetMaxY(bar_item->icon_line.bounds);
|
||||||
|
uint32_t max_y = CGRectGetMaxY(bar_item->label_line.bounds) > CGRectGetMaxY(bar_item->icon_line.bounds) ? CGRectGetMaxY(bar_item->label_line.bounds) : CGRectGetMaxY(bar_item->icon_line.bounds);
|
||||||
|
uint32_t min_y = CGRectGetMinY(bar_item->label_line.bounds) < CGRectGetMinY(bar_item->icon_line.bounds) ? CGRectGetMinY(bar_item->label_line.bounds) : CGRectGetMinY(bar_item->icon_line.bounds);
|
||||||
|
bounding_rect.size.height = max_y - min_y;
|
||||||
return bounding_rect;
|
return bounding_rect;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bar_item_set_bounding_rect_for_space(struct bar_item* bar_item, uint32_t sid) {
|
void bar_item_set_bounding_rect_for_space(struct bar_item* bar_item, uint32_t sid, CGPoint bar_origin) {
|
||||||
if (bar_item->num_rects < sid) {
|
if (bar_item->num_rects < sid) {
|
||||||
bar_item->bounding_rects = (CGRect**) realloc(bar_item->bounding_rects, sizeof(CGRect*) * sid);
|
bar_item->bounding_rects = (CGRect**) realloc(bar_item->bounding_rects, sizeof(CGRect*) * sid);
|
||||||
memset(bar_item->bounding_rects, 0, sizeof(CGRect*) * sid);
|
memset(bar_item->bounding_rects, 0, sizeof(CGRect*) * sid);
|
||||||
|
@ -151,7 +154,7 @@ void bar_item_set_bounding_rect_for_space(struct bar_item* bar_item, uint32_t si
|
||||||
memset(bar_item->bounding_rects[sid - 1], 0, sizeof(CGRect));
|
memset(bar_item->bounding_rects[sid - 1], 0, sizeof(CGRect));
|
||||||
}
|
}
|
||||||
CGRect rect = bar_item_construct_bounding_rect(bar_item);
|
CGRect rect = bar_item_construct_bounding_rect(bar_item);
|
||||||
|
bar_item->bounding_rects[sid - 1]->origin.x = rect.origin.x + bar_origin.x;
|
||||||
bar_item->bounding_rects[sid - 1]->origin = rect.origin;
|
bar_item->bounding_rects[sid - 1]->origin.y = rect.origin.y + bar_origin.y;
|
||||||
bar_item->bounding_rects[sid - 1]->size = rect.size;
|
bar_item->bounding_rects[sid - 1]->size = rect.size;
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,6 +84,6 @@ void bar_item_set_icon_font(struct bar_item* bar_item, char *font_string);
|
||||||
void bar_item_on_click(struct bar_item* bar_item);
|
void bar_item_on_click(struct bar_item* bar_item);
|
||||||
|
|
||||||
CGRect bar_item_construct_bounding_rect(struct bar_item* bar_item);
|
CGRect bar_item_construct_bounding_rect(struct bar_item* bar_item);
|
||||||
void bar_item_set_bounding_rect_for_space(struct bar_item* bar_item, uint32_t sid);
|
void bar_item_set_bounding_rect_for_space(struct bar_item* bar_item, uint32_t sid, CGPoint bar_origin);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -159,6 +159,7 @@ struct bar_item* bar_manager_get_item_by_point(struct bar_manager* bar_manager,
|
||||||
for (int i = 0; i < bar_manager->bar_item_count; i++) {
|
for (int i = 0; i < bar_manager->bar_item_count; i++) {
|
||||||
struct bar_item* bar_item = bar_manager->bar_items[i];
|
struct bar_item* bar_item = bar_manager->bar_items[i];
|
||||||
if (bar_item->num_rects < sid || bar_item->bounding_rects[sid - 1] == NULL) continue;
|
if (bar_item->num_rects < sid || bar_item->bounding_rects[sid - 1] == NULL) continue;
|
||||||
|
printf("Bounding rect: %f %f \n", bar_item->bounding_rects[sid - 1]->origin.x, bar_item->bounding_rects[sid - 1]->origin.y);
|
||||||
if (cgrect_contains_point(bar_item->bounding_rects[sid - 1], &point)) {
|
if (cgrect_contains_point(bar_item->bounding_rects[sid - 1], &point)) {
|
||||||
return bar_item;
|
return bar_item;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue