mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-11-06 13:29:48 -05:00
Fix the resizor
This commit is contained in:
parent
5c4056e049
commit
53a7f2137b
1 changed files with 53 additions and 53 deletions
|
|
@ -47,57 +47,6 @@ struct resizor {
|
||||||
} height;
|
} height;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
|
||||||
resizor_draw(struct resizor *resizor)
|
|
||||||
{
|
|
||||||
cairo_surface_t *surface;
|
|
||||||
cairo_t *cr;
|
|
||||||
|
|
||||||
window_draw(resizor->window);
|
|
||||||
|
|
||||||
window_get_child_rectangle(resizor->window,
|
|
||||||
&resizor->child_allocation);
|
|
||||||
|
|
||||||
surface = window_get_surface(resizor->window);
|
|
||||||
|
|
||||||
cr = cairo_create(surface);
|
|
||||||
cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
|
|
||||||
cairo_rectangle(cr,
|
|
||||||
resizor->child_allocation.x,
|
|
||||||
resizor->child_allocation.y,
|
|
||||||
resizor->child_allocation.width,
|
|
||||||
resizor->child_allocation.height);
|
|
||||||
cairo_set_source_rgba(cr, 0, 0, 0, 0.8);
|
|
||||||
cairo_fill(cr);
|
|
||||||
cairo_destroy(cr);
|
|
||||||
|
|
||||||
cairo_surface_destroy(surface);
|
|
||||||
|
|
||||||
window_flush(resizor->window);
|
|
||||||
|
|
||||||
if (fabs(resizor->height.previous - resizor->height.target) < 0.1) {
|
|
||||||
wl_display_frame_callback(display_get_display(resizor->display),
|
|
||||||
frame_callback, resizor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
redraw_handler(struct window *window, void *data)
|
|
||||||
{
|
|
||||||
struct resizor *resizor = data;
|
|
||||||
|
|
||||||
resizor_draw(resizor);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
keyboard_focus_handler(struct window *window,
|
|
||||||
struct input *device, void *data)
|
|
||||||
{
|
|
||||||
struct resizor *resizor = data;
|
|
||||||
|
|
||||||
window_schedule_redraw(resizor->window);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
frame_callback(void *data, uint32_t time)
|
frame_callback(void *data, uint32_t time)
|
||||||
{
|
{
|
||||||
|
|
@ -129,6 +78,57 @@ frame_callback(void *data, uint32_t time)
|
||||||
window_schedule_redraw(resizor->window);
|
window_schedule_redraw(resizor->window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
resizor_draw(struct resizor *resizor)
|
||||||
|
{
|
||||||
|
cairo_surface_t *surface;
|
||||||
|
cairo_t *cr;
|
||||||
|
|
||||||
|
window_draw(resizor->window);
|
||||||
|
|
||||||
|
window_get_child_rectangle(resizor->window,
|
||||||
|
&resizor->child_allocation);
|
||||||
|
|
||||||
|
surface = window_get_surface(resizor->window);
|
||||||
|
|
||||||
|
cr = cairo_create(surface);
|
||||||
|
cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
|
||||||
|
cairo_rectangle(cr,
|
||||||
|
resizor->child_allocation.x,
|
||||||
|
resizor->child_allocation.y,
|
||||||
|
resizor->child_allocation.width,
|
||||||
|
resizor->child_allocation.height);
|
||||||
|
cairo_set_source_rgba(cr, 0, 0, 0, 0.8);
|
||||||
|
cairo_fill(cr);
|
||||||
|
cairo_destroy(cr);
|
||||||
|
|
||||||
|
cairo_surface_destroy(surface);
|
||||||
|
|
||||||
|
window_flush(resizor->window);
|
||||||
|
|
||||||
|
if (fabs(resizor->height.previous - resizor->height.target) > 0.1) {
|
||||||
|
wl_display_frame_callback(display_get_display(resizor->display),
|
||||||
|
frame_callback, resizor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
redraw_handler(struct window *window, void *data)
|
||||||
|
{
|
||||||
|
struct resizor *resizor = data;
|
||||||
|
|
||||||
|
resizor_draw(resizor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
keyboard_focus_handler(struct window *window,
|
||||||
|
struct input *device, void *data)
|
||||||
|
{
|
||||||
|
struct resizor *resizor = data;
|
||||||
|
|
||||||
|
window_schedule_redraw(resizor->window);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
key_handler(struct window *window, uint32_t key, uint32_t sym,
|
key_handler(struct window *window, uint32_t key, uint32_t sym,
|
||||||
uint32_t state, uint32_t modifiers, void *data)
|
uint32_t state, uint32_t modifiers, void *data)
|
||||||
|
|
@ -139,12 +139,12 @@ key_handler(struct window *window, uint32_t key, uint32_t sym,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (sym) {
|
switch (sym) {
|
||||||
case XK_F1:
|
case XK_Down:
|
||||||
resizor->height.target = 400;
|
resizor->height.target = 400;
|
||||||
resizor->height.current = resizor->child_allocation.height;
|
resizor->height.current = resizor->child_allocation.height;
|
||||||
frame_callback(resizor, 0);
|
frame_callback(resizor, 0);
|
||||||
break;
|
break;
|
||||||
case XK_F2:
|
case XK_Up:
|
||||||
resizor->height.target = 200;
|
resizor->height.target = 200;
|
||||||
resizor->height.current = resizor->child_allocation.height;
|
resizor->height.current = resizor->child_allocation.height;
|
||||||
frame_callback(resizor, 0);
|
frame_callback(resizor, 0);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue