compositor: Avoid more transformations.
This commit is contained in:
parent
22208034e8
commit
bc6e04b958
|
@ -697,6 +697,13 @@ uint32_t yutani_color_for_wid(yutani_wid_t wid) {
|
|||
return colors[i];
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if a matrix has an identity transformation for its linear component.
|
||||
*/
|
||||
static inline int matrix_is_translation(gfx_matrix_t m) {
|
||||
return (m[0][0] == 1.0 && m[0][1] == 0.0 && m[1][0] == 0.0 && m[1][1] == 1.0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Blit a window to the framebuffer.
|
||||
*
|
||||
|
@ -717,9 +724,10 @@ static int yutani_blit_window(yutani_globals_t * yg, yutani_server_window_t * wi
|
|||
_win_sprite.blank = 0;
|
||||
_win_sprite.alpha = ALPHA_EMBEDDED;
|
||||
|
||||
double opacity = (double)(window->opacity) / 255.0;
|
||||
|
||||
if (window->rotation || window == yg->resizing_window || window->anim_mode) {
|
||||
double m[2][3];
|
||||
double opacity = (double)(window->opacity) / 255.0;
|
||||
|
||||
gfx_matrix_identity(m);
|
||||
gfx_matrix_translate(m,x,y);
|
||||
|
@ -788,9 +796,13 @@ static int yutani_blit_window(yutani_globals_t * yg, yutani_server_window_t * wi
|
|||
}
|
||||
}
|
||||
}
|
||||
draw_sprite_transform(yg->backend_ctx, &_win_sprite, m, opacity);
|
||||
if (matrix_is_translation(m)) {
|
||||
draw_sprite_alpha(yg->backend_ctx, &_win_sprite, window->x, window->y, opacity);
|
||||
} else {
|
||||
draw_sprite_transform(yg->backend_ctx, &_win_sprite, m, opacity);
|
||||
}
|
||||
} else if (window->opacity != 255) {
|
||||
draw_sprite_alpha(yg->backend_ctx, &_win_sprite, window->x, window->y, (float)window->opacity / 255.0);
|
||||
draw_sprite_alpha(yg->backend_ctx, &_win_sprite, window->x, window->y, opacity);
|
||||
} else {
|
||||
draw_sprite(yg->backend_ctx, &_win_sprite, window->x, window->y);
|
||||
}
|
||||
|
|
|
@ -1783,7 +1783,7 @@ int main(int argc, char * argv[]) {
|
|||
signal(SIGUSR1, sig_usr1);
|
||||
signal(SIGUSR2, sig_usr2);
|
||||
draw_background(yctx->display_width, yctx->display_height);
|
||||
main_window = yutani_window_create_flags(yctx, yctx->display_width, yctx->display_height, YUTANI_WINDOW_FLAG_NO_STEAL_FOCUS);
|
||||
main_window = yutani_window_create_flags(yctx, yctx->display_width, yctx->display_height, YUTANI_WINDOW_FLAG_NO_STEAL_FOCUS | YUTANI_WINDOW_FLAG_ALT_ANIMATION);
|
||||
yutani_window_move(yctx, main_window, 0, 0);
|
||||
yutani_set_stack(yctx, main_window, YUTANI_ZORDER_BOTTOM);
|
||||
arg_ind++;
|
||||
|
|
|
@ -1547,7 +1547,7 @@ int main (int argc, char ** argv) {
|
|||
height = yctx->display_height;
|
||||
|
||||
/* Create the panel window */
|
||||
panel = yutani_window_create_flags(yctx, width, PANEL_HEIGHT, YUTANI_WINDOW_FLAG_NO_STEAL_FOCUS);
|
||||
panel = yutani_window_create_flags(yctx, width, PANEL_HEIGHT, YUTANI_WINDOW_FLAG_NO_STEAL_FOCUS | YUTANI_WINDOW_FLAG_ALT_ANIMATION);
|
||||
|
||||
/* And move it to the top layer */
|
||||
yutani_set_stack(yctx, panel, YUTANI_ZORDER_TOP);
|
||||
|
|
Loading…
Reference in New Issue