Support adjusting window opacity like compiz
This commit is contained in:
parent
fa50e9f4e5
commit
1f58b8803f
@ -379,6 +379,7 @@ static yutani_server_window_t * server_window_create(yutani_globals_t * yg, int
|
|||||||
win->untiled_height = 0;
|
win->untiled_height = 0;
|
||||||
win->default_mouse = 1;
|
win->default_mouse = 1;
|
||||||
win->server_flags = flags;
|
win->server_flags = flags;
|
||||||
|
win->opacity = 255;
|
||||||
|
|
||||||
char key[1024];
|
char key[1024];
|
||||||
YUTANI_SHMKEY(yg->server_ident, key, 1024, win);
|
YUTANI_SHMKEY(yg->server_ident, key, 1024, win);
|
||||||
@ -937,7 +938,11 @@ static int yutani_blit_window(yutani_globals_t * yg, cairo_t * ctx, yutani_serve
|
|||||||
draw_window:
|
draw_window:
|
||||||
/* Paint window */
|
/* Paint window */
|
||||||
cairo_set_source_surface(cr, surf, 0, 0);
|
cairo_set_source_surface(cr, surf, 0, 0);
|
||||||
cairo_paint(cr);
|
if (window->opacity != 255) {
|
||||||
|
cairo_paint_with_alpha(cr, (float)(window->opacity)/255.0);
|
||||||
|
} else {
|
||||||
|
cairo_paint(cr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
draw_finish:
|
draw_finish:
|
||||||
@ -1695,6 +1700,22 @@ static void add_key_bind(yutani_globals_t * yg, struct yutani_msg_key_bind * req
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void adjust_window_opacity(yutani_globals_t * yg, int direction) {
|
||||||
|
yutani_server_window_t * window = top_at(yg, yg->mouse_x / MOUSE_SCALE, yg->mouse_y / MOUSE_SCALE);
|
||||||
|
|
||||||
|
if (window) {
|
||||||
|
window->opacity += direction;
|
||||||
|
if (window->opacity < 0) {
|
||||||
|
window->opacity = 0;
|
||||||
|
}
|
||||||
|
if (window->opacity > 255) {
|
||||||
|
window->opacity = 255;
|
||||||
|
}
|
||||||
|
mark_window(yg, window);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static void mouse_start_drag(yutani_globals_t * yg) {
|
static void mouse_start_drag(yutani_globals_t * yg) {
|
||||||
set_focused_at(yg, yg->mouse_x / MOUSE_SCALE, yg->mouse_y / MOUSE_SCALE);
|
set_focused_at(yg, yg->mouse_x / MOUSE_SCALE, yg->mouse_y / MOUSE_SCALE);
|
||||||
yg->mouse_window = get_focused(yg);
|
yg->mouse_window = get_focused(yg);
|
||||||
@ -1823,6 +1844,10 @@ static void handle_mouse_event(yutani_globals_t * yg, struct yutani_msg_mouse_ev
|
|||||||
{
|
{
|
||||||
if ((me->event.buttons & YUTANI_MOUSE_BUTTON_LEFT) && (yg->kbd_state.k_alt)) {
|
if ((me->event.buttons & YUTANI_MOUSE_BUTTON_LEFT) && (yg->kbd_state.k_alt)) {
|
||||||
mouse_start_drag(yg);
|
mouse_start_drag(yg);
|
||||||
|
} else if ((me->event.buttons & YUTANI_MOUSE_SCROLL_UP) && (yg->kbd_state.k_alt)) {
|
||||||
|
adjust_window_opacity(yg, 8);
|
||||||
|
} else if ((me->event.buttons & YUTANI_MOUSE_SCROLL_DOWN) && (yg->kbd_state.k_alt)) {
|
||||||
|
adjust_window_opacity(yg, -8);
|
||||||
} else if ((me->event.buttons & YUTANI_MOUSE_BUTTON_RIGHT) && (yg->kbd_state.k_alt)) {
|
} else if ((me->event.buttons & YUTANI_MOUSE_BUTTON_RIGHT) && (yg->kbd_state.k_alt)) {
|
||||||
mouse_start_rotate(yg);
|
mouse_start_rotate(yg);
|
||||||
} else if ((me->event.buttons & YUTANI_MOUSE_BUTTON_MIDDLE) && (yg->kbd_state.k_alt)) {
|
} else if ((me->event.buttons & YUTANI_MOUSE_BUTTON_MIDDLE) && (yg->kbd_state.k_alt)) {
|
||||||
|
@ -70,6 +70,8 @@ typedef struct {
|
|||||||
|
|
||||||
int default_mouse;
|
int default_mouse;
|
||||||
uint32_t server_flags;
|
uint32_t server_flags;
|
||||||
|
|
||||||
|
int opacity;
|
||||||
} yutani_server_window_t;
|
} yutani_server_window_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
Loading…
Reference in New Issue
Block a user