mirror of
https://github.com/FreeRDP/FreeRDP.git
synced 2025-06-03 00:00:20 +00:00
xfreerdp-client: refactored window resize
This commit is contained in:
parent
cea1534771
commit
e37e678021
@ -101,6 +101,37 @@ static int initialized_xi = 0;
|
||||
static long xv_port = 0;
|
||||
static const size_t password_size = 512;
|
||||
|
||||
void xf_transform_window(xfInfo* xfi)
|
||||
{
|
||||
int ret;
|
||||
int w;
|
||||
int h;
|
||||
long supplied;
|
||||
Atom hints_atom;
|
||||
XSizeHints* size_hints = NULL;
|
||||
|
||||
hints_atom = XInternAtom(xfi->display, "WM_SIZE_HINTS", 1);
|
||||
|
||||
ret = XGetWMSizeHints(xfi->display, xfi->window->handle, size_hints, &supplied, hints_atom);
|
||||
|
||||
if(ret == 0)
|
||||
size_hints = XAllocSizeHints();
|
||||
|
||||
w = (xfi->originalWidth * xfi->scale) + xfi->offset_x;
|
||||
h = (xfi->originalHeight * xfi->scale) + xfi->offset_y;
|
||||
|
||||
if (size_hints)
|
||||
{
|
||||
size_hints->flags |= PMinSize | PMaxSize;
|
||||
size_hints->min_width = size_hints->max_width = w;
|
||||
size_hints->min_height = size_hints->max_height = h;
|
||||
XSetWMNormalHints(xfi->display, xfi->window->handle, size_hints);
|
||||
XResizeWindow(xfi->display, xfi->window->handle, w, h);
|
||||
|
||||
XFree(size_hints);
|
||||
}
|
||||
}
|
||||
|
||||
void xf_draw_screen_scaled(xfInfo* xfi)
|
||||
{
|
||||
XTransform transform;
|
||||
|
@ -223,8 +223,6 @@ BOOL xf_kbd_handle_special_keys(xfInfo* xfi, KeySym keysym)
|
||||
&& (xf_kbd_key_pressed(xfi, XK_Control_L) || xf_kbd_key_pressed(xfi, XK_Control_R)))
|
||||
{
|
||||
//Zoom in (scale larger)
|
||||
int ret;
|
||||
long supplied;
|
||||
int zoom_width;
|
||||
int zoom_height;
|
||||
double s = xfi->scale;
|
||||
@ -237,30 +235,7 @@ BOOL xf_kbd_handle_special_keys(xfInfo* xfi, KeySym keysym)
|
||||
zoom_width = xfi->originalWidth * s;
|
||||
zoom_height = xfi->originalHeight * s;
|
||||
|
||||
{
|
||||
Atom hints_atom;
|
||||
XSizeHints* size_hints = NULL;
|
||||
|
||||
hints_atom = XInternAtom(xfi->display, "WM_SIZE_HINTS", 1);
|
||||
|
||||
ret = XGetWMSizeHints(xfi->display, xfi->window->handle, size_hints, &supplied, hints_atom);
|
||||
|
||||
if(ret == 0)
|
||||
size_hints = XAllocSizeHints();
|
||||
|
||||
if (size_hints)
|
||||
{
|
||||
size_hints->flags |= PMinSize | PMaxSize;
|
||||
size_hints->min_width = size_hints->max_width = zoom_width;
|
||||
size_hints->min_height = size_hints->max_height = zoom_height;
|
||||
XSetWMNormalHints(xfi->display, xfi->window->handle, size_hints);
|
||||
XResizeWindow(xfi->display, xfi->window->handle, zoom_width, zoom_height);
|
||||
xfi->currentWidth = zoom_width;
|
||||
xfi->currentHeight = zoom_height;
|
||||
|
||||
XFree(size_hints);
|
||||
}
|
||||
}
|
||||
xf_transform_window(xfi);
|
||||
|
||||
IFCALL(xfi->client->OnResizeWindow, xfi->instance, zoom_width, zoom_height);
|
||||
//xf_draw_screen_scaled(xfi);
|
||||
@ -274,8 +249,6 @@ BOOL xf_kbd_handle_special_keys(xfInfo* xfi, KeySym keysym)
|
||||
&& (xf_kbd_key_pressed(xfi, XK_Control_L) || xf_kbd_key_pressed(xfi, XK_Control_R)))
|
||||
{
|
||||
//Zoom out (scale smaller)
|
||||
int ret;
|
||||
long supplied;
|
||||
int zoom_width;
|
||||
int zoom_height;
|
||||
double s = xfi->scale;
|
||||
@ -288,30 +261,7 @@ BOOL xf_kbd_handle_special_keys(xfInfo* xfi, KeySym keysym)
|
||||
zoom_width = xfi->originalWidth * s;
|
||||
zoom_height = xfi->originalHeight * s;
|
||||
|
||||
{
|
||||
Atom hints_atom;
|
||||
XSizeHints* size_hints = NULL;
|
||||
|
||||
hints_atom = XInternAtom(xfi->display, "WM_SIZE_HINTS", 1);
|
||||
|
||||
ret = XGetWMSizeHints(xfi->display, xfi->window->handle, size_hints, &supplied, hints_atom);
|
||||
|
||||
if(ret == 0)
|
||||
size_hints = XAllocSizeHints();
|
||||
|
||||
if (size_hints)
|
||||
{
|
||||
size_hints->flags |= PMinSize | PMaxSize;
|
||||
size_hints->min_width = size_hints->max_width = zoom_width;
|
||||
size_hints->min_height = size_hints->max_height = zoom_height;
|
||||
XSetWMNormalHints(xfi->display, xfi->window->handle, size_hints);
|
||||
XResizeWindow(xfi->display, xfi->window->handle, zoom_width, zoom_height);
|
||||
xfi->currentWidth = zoom_width;
|
||||
xfi->currentHeight = zoom_height;
|
||||
|
||||
XFree(size_hints);
|
||||
}
|
||||
}
|
||||
xf_transform_window(xfi);
|
||||
|
||||
IFCALL(xfi->client->OnResizeWindow, xfi->instance, zoom_width, zoom_height);
|
||||
//xf_draw_screen_scaled(xfi);
|
||||
@ -321,65 +271,70 @@ BOOL xf_kbd_handle_special_keys(xfInfo* xfi, KeySym keysym)
|
||||
|
||||
|
||||
if (keysym == XK_KP_4)
|
||||
{
|
||||
if ((xf_kbd_key_pressed(xfi, XK_Alt_L) || xf_kbd_key_pressed(xfi, XK_Alt_R))
|
||||
&& (xf_kbd_key_pressed(xfi, XK_Control_L) || xf_kbd_key_pressed(xfi, XK_Control_R)))
|
||||
{
|
||||
xfi->offset_x -= 5;
|
||||
{
|
||||
if ((xf_kbd_key_pressed(xfi, XK_Alt_L) || xf_kbd_key_pressed(xfi, XK_Alt_R))
|
||||
&& (xf_kbd_key_pressed(xfi, XK_Control_L) || xf_kbd_key_pressed(xfi, XK_Control_R)))
|
||||
{
|
||||
xfi->offset_x -= 5;
|
||||
|
||||
xf_transform_window(xfi);
|
||||
|
||||
|
||||
xf_draw_screen_scaled(xfi);
|
||||
printf("pan left : %d\n", xfi->offset_x);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
xf_draw_screen_scaled(xfi);
|
||||
printf("pan left : %d\n", xfi->offset_x);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (keysym == XK_KP_6)
|
||||
{
|
||||
if ((xf_kbd_key_pressed(xfi, XK_Alt_L) || xf_kbd_key_pressed(xfi, XK_Alt_R))
|
||||
&& (xf_kbd_key_pressed(xfi, XK_Control_L) || xf_kbd_key_pressed(xfi, XK_Control_R)))
|
||||
{
|
||||
xfi->offset_x += 5;
|
||||
{
|
||||
if ((xf_kbd_key_pressed(xfi, XK_Alt_L) || xf_kbd_key_pressed(xfi, XK_Alt_R))
|
||||
&& (xf_kbd_key_pressed(xfi, XK_Control_L) || xf_kbd_key_pressed(xfi, XK_Control_R)))
|
||||
{
|
||||
xfi->offset_x += 5;
|
||||
|
||||
if(xfi->offset_x > 0)
|
||||
xfi->offset_x = 0;
|
||||
if(xfi->offset_x > 0)
|
||||
xfi->offset_x = 0;
|
||||
|
||||
xf_draw_screen_scaled(xfi);
|
||||
printf("pan right : %d\n", xfi->offset_x);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
xf_transform_window(xfi);
|
||||
|
||||
xf_draw_screen_scaled(xfi);
|
||||
printf("pan right : %d\n", xfi->offset_x);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (keysym == XK_KP_8)
|
||||
{
|
||||
if ((xf_kbd_key_pressed(xfi, XK_Alt_L) || xf_kbd_key_pressed(xfi, XK_Alt_R))
|
||||
&& (xf_kbd_key_pressed(xfi, XK_Control_L) || xf_kbd_key_pressed(xfi, XK_Control_R)))
|
||||
{
|
||||
xfi->offset_y -= 5;
|
||||
{
|
||||
if ((xf_kbd_key_pressed(xfi, XK_Alt_L) || xf_kbd_key_pressed(xfi, XK_Alt_R))
|
||||
&& (xf_kbd_key_pressed(xfi, XK_Control_L) || xf_kbd_key_pressed(xfi, XK_Control_R)))
|
||||
{
|
||||
xfi->offset_y -= 5;
|
||||
|
||||
xf_transform_window(xfi);
|
||||
|
||||
xf_draw_screen_scaled(xfi);
|
||||
printf("pan up : %d\n", xfi->offset_y);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
xf_draw_screen_scaled(xfi);
|
||||
printf("pan up : %d\n", xfi->offset_y);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (keysym == XK_KP_2)
|
||||
{
|
||||
if ((xf_kbd_key_pressed(xfi, XK_Alt_L) || xf_kbd_key_pressed(xfi, XK_Alt_R))
|
||||
&& (xf_kbd_key_pressed(xfi, XK_Control_L) || xf_kbd_key_pressed(xfi, XK_Control_R)))
|
||||
{
|
||||
xfi->offset_y += 5;
|
||||
{
|
||||
if ((xf_kbd_key_pressed(xfi, XK_Alt_L) || xf_kbd_key_pressed(xfi, XK_Alt_R))
|
||||
&& (xf_kbd_key_pressed(xfi, XK_Control_L) || xf_kbd_key_pressed(xfi, XK_Control_R)))
|
||||
{
|
||||
xfi->offset_y += 5;
|
||||
|
||||
if(xfi->offset_y > 0)
|
||||
xfi->offset_y = 0;
|
||||
if(xfi->offset_y > 0)
|
||||
xfi->offset_y = 0;
|
||||
|
||||
xf_draw_screen_scaled(xfi);
|
||||
printf("pan down : %d\n", xfi->offset_y);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
xf_transform_window(xfi);
|
||||
|
||||
xf_draw_screen_scaled(xfi);
|
||||
printf("pan down : %d\n", xfi->offset_y);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return FALSE;
|
||||
|
@ -216,6 +216,7 @@ void xf_lock_x11(xfInfo* xfi, BOOL display);
|
||||
void xf_unlock_x11(xfInfo* xfi, BOOL display);
|
||||
|
||||
void xf_draw_screen_scaled(xfInfo* xfi);
|
||||
void xf_transform_window(xfInfo* xfi);
|
||||
|
||||
DWORD xf_exit_code_from_disconnect_reason(DWORD reason);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user