Cache pixmaps for mouse effects to improve performance

This commit is contained in:
o9000
2016-01-01 04:57:08 +01:00
parent a38b90dbab
commit a6da0186e0
11 changed files with 80 additions and 47 deletions

View File

@@ -67,8 +67,8 @@ Task *add_task(Window win)
Task task_template;
memset(&task_template, 0, sizeof(task_template));
task_template.area.has_mouse_over_effect = TRUE;
task_template.area.has_mouse_press_effect = TRUE;
task_template.area.has_mouse_over_effect = panel_config.mouse_effects;
task_template.area.has_mouse_press_effect = panel_config.mouse_effects;
task_template.win = win;
task_template.desktop = get_window_desktop(win);
task_template.area.panel = &panels[monitor];
@@ -96,8 +96,8 @@ Task *add_task(Window win)
Taskbar *taskbar = &panels[monitor].taskbar[j];
Task *task_instance = calloc(1, sizeof(Task));
memcpy(&task_instance->area, &panels[monitor].g_task.area, sizeof(Area));
task_instance->area.has_mouse_over_effect = TRUE;
task_instance->area.has_mouse_press_effect = TRUE;
task_instance->area.has_mouse_over_effect = panel_config.mouse_effects;
task_instance->area.has_mouse_press_effect = panel_config.mouse_effects;
task_instance->win = task_template.win;
task_instance->desktop = task_template.desktop;
task_instance->win_x = task_template.win_x;
@@ -576,9 +576,10 @@ void set_task_state(Task *task, TaskState state)
if (!panel_config.mouse_effects) {
task1->area.pix = task1->state_pix[state];
if (!task1->area.pix)
task1->area.redraw_needed = TRUE;
schedule_redraw(&task1->area);
panel_refresh = TRUE;
} else {
task1->area.redraw_needed = TRUE;
schedule_redraw(&task1->area);
}
if (state == TASK_ACTIVE && g_slist_find(urgent_list, task1))
del_urgent(task1);
@@ -620,7 +621,7 @@ void set_task_redraw(Task *task)
task->state_pix[k] = 0;
}
task->area.pix = 0;
task->area.redraw_needed = TRUE;
schedule_redraw(&task->area);
}
void blink_urgent(void *arg)

View File

@@ -323,7 +323,7 @@ void taskbar_default_font_changed()
for (GList *c = taskbar->area.children; c; c = c->next) {
Task *t = c->data;
t->area.resize_needed = TRUE;
t->area.redraw_needed = TRUE;
schedule_redraw(&t->area);
}
}
}
@@ -429,7 +429,7 @@ void on_change_taskbar(void *obj)
taskbar->state_pix[k] = 0;
}
taskbar->area.pix = 0;
taskbar->area.redraw_needed = TRUE;
schedule_redraw(&taskbar->area);
}
void set_taskbar_state(Taskbar *taskbar, TaskbarState state)
@@ -450,13 +450,13 @@ void set_taskbar_state(Taskbar *taskbar, TaskbarState state)
}
if (taskbar->area.on_screen) {
if (!taskbar->state_pix[state])
taskbar->area.redraw_needed = TRUE;
schedule_redraw(&taskbar->area);
if (taskbarname_enabled) {
if (!panel_config.mouse_effects) {
if (!taskbar->bar_name.state_pix[state])
taskbar->bar_name.area.redraw_needed = TRUE;
schedule_redraw(&taskbar->bar_name.area);
} else {
taskbar->bar_name.area.redraw_needed = TRUE;
schedule_redraw(&taskbar->bar_name.area);
}
}
if (taskbar_mode == MULTI_DESKTOP &&

View File

@@ -59,8 +59,8 @@ void init_taskbarname_panel(void *p)
taskbar = &panel->taskbar[j];
memcpy(&taskbar->bar_name.area, &panel->g_taskbar.area_name, sizeof(Area));
taskbar->bar_name.area.parent = taskbar;
taskbar->bar_name.area.has_mouse_over_effect = 1;
taskbar->bar_name.area.has_mouse_press_effect = 1;
taskbar->bar_name.area.has_mouse_over_effect = panel_config.mouse_effects;
taskbar->bar_name.area.has_mouse_press_effect = panel_config.mouse_effects;
if (j == server.desktop)
taskbar->bar_name.area.bg = panel->g_taskbar.background_name[TASKBAR_ACTIVE];
else
@@ -106,7 +106,7 @@ void taskbarname_default_font_changed()
for (int j = 0; j < panels[i].num_desktops; j++) {
Taskbar *taskbar = &panels[i].taskbar[j];
taskbar->bar_name.area.resize_needed = TRUE;
taskbar->bar_name.area.redraw_needed = TRUE;
schedule_redraw(&taskbar->bar_name.area);
}
}
panel_refresh = TRUE;
@@ -142,7 +142,7 @@ gboolean resize_taskbarname(void *obj)
int name_height, name_width, name_height_ink;
int ret = 0;
taskbar_name->area.redraw_needed = TRUE;
schedule_redraw(&taskbar_name->area);
get_text_size2(panel_config.taskbarname_font_desc,
&name_height_ink,
&name_height,