summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xrdp/Makefile8
-rw-r--r--xrdp/funcs.c86
-rw-r--r--xrdp/xrdp.h37
-rw-r--r--xrdp/xrdp_bitmap.c61
-rw-r--r--xrdp/xrdp_painter.c42
-rw-r--r--xrdp/xrdp_rdp.c2
-rw-r--r--xrdp/xrdp_wm.c155
7 files changed, 220 insertions, 171 deletions
diff --git a/xrdp/Makefile b/xrdp/Makefile
index 9898415a..9bc95767 100644
--- a/xrdp/Makefile
+++ b/xrdp/Makefile
@@ -1,16 +1,18 @@
XRDPOBJ = xrdp.o os_calls.o xrdp_tcp.o xrdp_iso.o xrdp_mcs.o xrdp_sec.o xrdp_rdp.o \
xrdp_process.o xrdp_listen.o xrdp_orders.o xrdp_bitmap.o xrdp_wm.o \
- xrdp_painter.o xrdp_list.o xrdp_region.o xrdp_cache.o xrdp_font.o
+ xrdp_painter.o xrdp_list.o xrdp_region.o xrdp_cache.o xrdp_font.o \
+ funcs.o
#CFLAGS = -Wall -O2 -DXRDP_DEBUG
CFLAGS = -Wall -O2
-LDFLAGS = -L /usr/gnu/lib -lpthread -lcrypto
+LDFLAGS = -L /usr/gnu/lib
+LIBS = -lpthread -lcrypto
CC = gcc
all: xrdp
xrdp: $(XRDPOBJ)
- $(CC) $(LDFLAGS) -o xrdp $(XRDPOBJ)
+ $(CC) $(LDFLAGS) -o xrdp $(XRDPOBJ) $(LIBS)
clean:
rm -f *.o xrdp
diff --git a/xrdp/funcs.c b/xrdp/funcs.c
new file mode 100644
index 00000000..4dcc7c06
--- /dev/null
+++ b/xrdp/funcs.c
@@ -0,0 +1,86 @@
+
+/*
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ xrdp: A Remote Desktop Protocol server.
+ Copyright (C) Jay Sorg 2004
+
+ simple functions
+
+*/
+
+#include "xrdp.h"
+
+/*****************************************************************************/
+int rect_contains_pt(struct xrdp_rect* in, int x, int y)
+{
+ if (x < in->left)
+ return 0;
+ if (y < in->top)
+ return 0;
+ if (x >= in->right)
+ return 0;
+ if (y >= in->bottom)
+ return 0;
+ return 1;
+}
+
+/*****************************************************************************/
+int rect_intersect(struct xrdp_rect* in1, struct xrdp_rect* in2,
+ struct xrdp_rect* out)
+{
+ int rv;
+ struct xrdp_rect dumby;
+
+ if (out == 0)
+ out = &dumby;
+ *out = *in1;
+ if (in2->left > in1->left)
+ out->left = in2->left;
+ if (in2->top > in1->top)
+ out->top = in2->top;
+ if (in2->right < in1->right)
+ out->right = in2->right;
+ if (in2->bottom < in1->bottom)
+ out->bottom = in2->bottom;
+ rv = !ISRECTEMPTY(*out);
+ if (!rv)
+ g_memset(out, 0, sizeof(struct xrdp_rect));
+ return rv;
+}
+
+/*****************************************************************************/
+int color15(int r, int g, int b)
+{
+ r = r >> 3;
+ g = g >> 3;
+ b = b >> 3;
+ return (r << 10) | (g << 5) | b;
+}
+
+/*****************************************************************************/
+int color16(int r, int g, int b)
+{
+ r = r >> 3;
+ g = g >> 2;
+ b = b >> 3;
+ return (r << 11) | (g << 5) | b;
+}
+
+/*****************************************************************************/
+int color24(int r, int g, int b)
+{
+ return r | (g << 8) | (b << 16);
+}
diff --git a/xrdp/xrdp.h b/xrdp/xrdp.h
index 75b19282..bc4f60bf 100644
--- a/xrdp/xrdp.h
+++ b/xrdp/xrdp.h
@@ -53,6 +53,26 @@
#define LOWORD(in) ((in) & 0x0000ffff)
#undef MAKELONG
#define MAKELONG(hi, lo) ((((hi) & 0xffff) << 16) | ((lo) & 0xffff))
+#undef MAKERECT
+#define MAKERECT(r, x, y, cx, cy) \
+{ (r).left = x; (r).top = y; (r).right = (x) + (cx); (r).bottom = (y) + (cy); }
+#undef ISRECTEMPTY
+#define ISRECTEMPTY(r) (((r).right <= (r).left) || ((r).bottom <= (r).top))
+#undef RECTOFFSET
+#define RECTOFFSET(r, dx, dy) \
+{ (r).left += dx; (r).top += dy; (r).right += dx; (r).bottom += dy; }
+#undef GETPIXEL8
+#define GETPIXEL8(d, x, y, w) (*(((unsigned char*)d) + ((y) * (w) + (x))))
+#undef GETPIXEL16
+#define GETPIXEL16(d, x, y, w) (*(((unsigned short*)d) + ((y) * (w) + (x))))
+#undef GETPIXEL32
+#define GETPIXEL32(d, x, y, w) (*(((unsigned long*)d) + ((y) * (w) + (x))))
+#undef SETPIXEL8
+#define SETPIXEL8(d, x, y, w, v) (*(((unsigned char*)d) + ((y) * (w) + (x))) = (v))
+#undef SETPIXEL16
+#define SETPIXEL16(d, x, y, w, v) (*(((unsigned short*)d) + ((y) * (w) + (x))) = (v))
+#undef SETPIXEL32
+#define SETPIXEL32(d, x, y, w, v) (*(((unsigned long*)d) + ((y) * (w) + (x))) = (v))
/* font macros */
#define FONT_DATASIZE(f) ((((f)->height * (((f)->width + 7) / 8)) + 3) & ~3);
@@ -222,15 +242,6 @@ int xrdp_wm_get_vis_region(struct xrdp_wm* self, struct xrdp_bitmap* bitmap,
struct xrdp_region* region);
int xrdp_wm_mouse_move(struct xrdp_wm* self, int x, int y);
int xrdp_wm_mouse_click(struct xrdp_wm* self, int x, int y, int but, int down);
-int xrdp_wm_rect(struct xrdp_rect* r, int x, int y, int cx, int cy);
-int xrdp_wm_rect_is_empty(struct xrdp_rect* in);
-int xrdp_wm_rect_contains_pt(struct xrdp_rect* in, int x, int y);
-int xrdp_wm_rect_intersect(struct xrdp_rect* in1, struct xrdp_rect* in2,
- struct xrdp_rect* out);
-int xrdp_wm_rect_offset(struct xrdp_rect* in, int dx, int dy);
-int xrdp_wm_color15(int r, int g, int b);
-int xrdp_wm_color16(int r, int g, int b);
-int xrdp_wm_color24(int r, int g, int b);
/* xrdp_process.c */
struct xrdp_process* xrdp_process_create(struct xrdp_listen* owner);
@@ -306,3 +317,11 @@ struct xrdp_font* xrdp_font_create(struct xrdp_wm* wm);
void xrdp_font_delete(struct xrdp_font* self);
int xrdp_font_item_compare(struct xrdp_font_item* font1,
struct xrdp_font_item* font2);
+
+/* funcs.c */
+int rect_contains_pt(struct xrdp_rect* in, int x, int y);
+int rect_intersect(struct xrdp_rect* in1, struct xrdp_rect* in2,
+ struct xrdp_rect* out);
+int color15(int r, int g, int b);
+int color16(int r, int g, int b);
+int color24(int r, int g, int b);
diff --git a/xrdp/xrdp_bitmap.c b/xrdp/xrdp_bitmap.c
index 3b8cff33..597cd218 100644
--- a/xrdp/xrdp_bitmap.c
+++ b/xrdp/xrdp_bitmap.c
@@ -210,17 +210,17 @@ int xrdp_bitmap_load(struct xrdp_bitmap* self, char* filename, int* palette)
if (self->bpp == 8)
color = xrdp_bitmap_get_index(self, palette, color);
else if (self->bpp == 15)
- color = xrdp_wm_color15((color & 0xff0000) >> 16,
- (color & 0x00ff00) >> 8,
- (color & 0x0000ff) >> 0);
+ color = color15((color & 0xff0000) >> 16,
+ (color & 0x00ff00) >> 8,
+ (color & 0x0000ff) >> 0);
else if (self->bpp == 16)
- color = xrdp_wm_color16((color & 0xff0000) >> 16,
- (color & 0x00ff00) >> 8,
- (color & 0x0000ff) >> 0);
+ color = color16((color & 0xff0000) >> 16,
+ (color & 0x00ff00) >> 8,
+ (color & 0x0000ff) >> 0);
else if (self->bpp == 24)
- color = xrdp_wm_color24((color & 0xff0000) >> 16,
- (color & 0x00ff00) >> 8,
- (color & 0x0000ff) >> 0);
+ color = color24((color & 0xff0000) >> 16,
+ (color & 0x00ff00) >> 8,
+ (color & 0x0000ff) >> 0);
xrdp_bitmap_set_pixel(self, j, i, color);
}
}
@@ -241,11 +241,11 @@ int xrdp_bitmap_get_pixel(struct xrdp_bitmap* self, int x, int y)
if (x >= 0 && x < self->width && y >= 0 && y < self->height)
{
if (self->bpp == 8)
- return self->data[y * self->width + x];
+ return GETPIXEL8(self->data, x, y, self->width);
else if (self->bpp == 15 || self->bpp == 16)
- return ((short*)self->data)[y * self->width + x];
+ return GETPIXEL16(self->data, x, y, self->width);
else if (self->bpp == 24)
- return ((int*)self->data)[y * self->width + x];
+ return GETPIXEL32(self->data, x, y, self->width);
}
return 0;
}
@@ -253,14 +253,18 @@ int xrdp_bitmap_get_pixel(struct xrdp_bitmap* self, int x, int y)
/*****************************************************************************/
int xrdp_bitmap_set_pixel(struct xrdp_bitmap* self, int x, int y, int pixel)
{
+ if (self == 0)
+ return 0;
+ if (self->data == 0)
+ return 0;
if (x >= 0 && x < self->width && y >= 0 && y < self->height)
{
if (self->bpp == 8)
- self->data[y * self->width + x] = pixel;
+ SETPIXEL8(self->data, x, y, self->width, pixel);
else if (self->bpp == 15 || self->bpp == 16)
- ((short*)(self->data))[y * self->width + x] = pixel;
+ SETPIXEL16(self->data, x, y, self->width, pixel);
else if (self->bpp == 24)
- ((int*)(self->data))[y * self->width + x] = pixel;
+ SETPIXEL32(self->data, x, y, self->width, pixel);
}
return 0;
}
@@ -278,12 +282,23 @@ int xrdp_bitmap_copy_box(struct xrdp_bitmap* self, struct xrdp_bitmap* dest,
return 0;
if (self->bpp != dest->bpp)
return 0;
- for (i = 0; i < cy; i++)
+
+ if (self->bpp == 24)
{
- for (j = 0; j < cx; j++)
+ for (i = 0; i < cy; i++)
+ for (j = 0; j < cx; j++)
+ SETPIXEL32(dest->data, j, i, dest->width,
+ GETPIXEL32(self->data, j + x, i + y, self->width));
+ }
+ else
+ {
+ for (i = 0; i < cy; i++)
{
- xrdp_bitmap_set_pixel(dest, j, i,
- xrdp_bitmap_get_pixel(self, j + x, i + y));
+ for (j = 0; j < cx; j++)
+ {
+ xrdp_bitmap_set_pixel(dest, j, i,
+ xrdp_bitmap_get_pixel(self, j + x, i + y));
+ }
}
}
return 0;
@@ -330,7 +345,7 @@ int xrdp_bitmap_invalidate(struct xrdp_bitmap* self, struct xrdp_rect* rect)
painter->use_clip = 0;
else
{
- if (xrdp_wm_rect_is_empty(rect))
+ if (ISRECTEMPTY(*rect))
{
xrdp_painter_delete(painter);
return 0;
@@ -507,10 +522,10 @@ int xrdp_bitmap_invalidate(struct xrdp_bitmap* self, struct xrdp_rect* rect)
xrdp_bitmap_invalidate(b, 0);
else
{
- xrdp_wm_rect(&r1, b->left, b->top, b->width, b->height);
- if (xrdp_wm_rect_intersect(rect, &r1, &r2))
+ MAKERECT(r1, b->left, b->top, b->width, b->height);
+ if (rect_intersect(rect, &r1, &r2))
{
- xrdp_wm_rect_offset(&r2, -(b->left), -(b->top));
+ RECTOFFSET(r2, -(b->left), -(b->top));
xrdp_bitmap_invalidate(b, &r2);
}
}
diff --git a/xrdp/xrdp_painter.c b/xrdp/xrdp_painter.c
index 731a94c0..020f7771 100644
--- a/xrdp/xrdp_painter.c
+++ b/xrdp/xrdp_painter.c
@@ -280,15 +280,15 @@ int xrdp_painter_draw_bitmap(struct xrdp_painter* self,
k = 0;
while (xrdp_region_get_rect(region, k, &rect) == 0)
{
- xrdp_wm_rect(&rect1, x1, y1, w, h);
- if (xrdp_wm_rect_intersect(&rect, &rect1, &rect2))
+ MAKERECT(rect1, x1, y1, w, h);
+ if (rect_intersect(&rect, &rect1, &rect2))
{
ok = 1;
if (self->use_clip)
{
rect = self->clip;
- xrdp_wm_rect_offset(&rect, x, y);
- if (!xrdp_wm_rect_intersect(&rect2, &rect, &rect1))
+ RECTOFFSET(rect, x, y);
+ if (!rect_intersect(&rect2, &rect, &rect1))
ok = 0;
}
else
@@ -390,6 +390,8 @@ int xrdp_painter_draw_text(struct xrdp_painter* self,
char* data;
struct xrdp_region* region;
struct xrdp_rect rect;
+ struct xrdp_rect clip_rect;
+ struct xrdp_rect draw_rect;
struct xrdp_bitmap* b;
struct xrdp_font* font;
struct xrdp_font_item* font_item;
@@ -430,19 +432,31 @@ int xrdp_painter_draw_text(struct xrdp_painter* self,
y = y + b->top;
b = b->parent;
}
+ if (self->use_clip)
+ clip_rect = self->clip;
+ else
+ MAKERECT(clip_rect, 0, 0, bitmap->width, bitmap->height);
+ b = bitmap;
+ while (b != 0)
+ {
+ RECTOFFSET(clip_rect, b->left, b->top);
+ b = b->parent;
+ }
k = 0;
while (xrdp_region_get_rect(region, k, &rect) == 0)
{
- x1 = x;
- y1 = y;
- rect.right--;
- rect.bottom--;
- flags = 0x03; /* 0x73; TEXT2_IMPLICIT_X and something else */
- xrdp_orders_text(self->orders, f, flags, 0,
- font->color, 0,
- x1, y1, x1 + total_width, y1 + total_height,
- 0, 0, 0, 0,
- x1, y1 + total_height, data, len * 2, &rect);
+ if (rect_intersect(&rect, &clip_rect, &draw_rect))
+ {
+ x1 = x;
+ y1 = y + total_height;
+ draw_rect.right--;
+ draw_rect.bottom--;
+ flags = 0x03; /* 0x73; TEXT2_IMPLICIT_X and something else */
+ xrdp_orders_text(self->orders, f, flags, 0,
+ font->color, 0,
+ x, y, x + total_width, y + total_height,
+ 0, 0, 0, 0, x1, y1, data, len * 2, &draw_rect);
+ }
k++;
}
xrdp_region_delete(region);
diff --git a/xrdp/xrdp_rdp.c b/xrdp/xrdp_rdp.c
index 2da9de87..e878aaa8 100644
--- a/xrdp/xrdp_rdp.c
+++ b/xrdp/xrdp_rdp.c
@@ -546,7 +546,7 @@ int xrdp_rdp_process_screen_update(struct xrdp_rdp* self, struct stream* s)
in_uint16_le(s, top);
in_uint16_le(s, right);
in_uint16_le(s, bottom);
- xrdp_wm_rect(&rect, left, top, (right - left) + 1, (bottom - top) + 1);
+ MAKERECT(rect, left, top, (right - left) + 1, (bottom - top) + 1);
if (self->up_and_running && self->pro_layer->wm != 0)
xrdp_bitmap_invalidate(self->pro_layer->wm->screen, &rect);
return 0;
diff --git a/xrdp/xrdp_wm.c b/xrdp/xrdp_wm.c
index a5176d83..29949984 100644
--- a/xrdp/xrdp_wm.c
+++ b/xrdp/xrdp_wm.c
@@ -132,30 +132,6 @@ int xrdp_wm_send_bitmap(struct xrdp_wm* self, struct xrdp_bitmap* bitmap,
}
/*****************************************************************************/
-int xrdp_wm_color15(int r, int g, int b)
-{
- r = r >> 3;
- g = g >> 3;
- b = b >> 3;
- return (r << 10) | (g << 5) | b;
-}
-
-/*****************************************************************************/
-int xrdp_wm_color16(int r, int g, int b)
-{
- r = r >> 3;
- g = g >> 2;
- b = b >> 3;
- return (r << 11) | (g << 5) | b;
-}
-
-/*****************************************************************************/
-int xrdp_wm_color24(int r, int g, int b)
-{
- return r | (g << 8) | (b << 16);
-}
-
-/*****************************************************************************/
/* all login help screen events go here */
int xrdp_wm_login_help_notify(struct xrdp_bitmap* wnd,
struct xrdp_bitmap* sender,
@@ -284,7 +260,7 @@ int xrdp_wm_login_notify(struct xrdp_bitmap* wnd,
b = (struct xrdp_bitmap*)
xrdp_list_get_item(wnd->wm->screen->child_list, i);
xrdp_list_remove_item(sender->wm->screen->child_list, i);
- xrdp_wm_rect(&rect, b->left, b->top, b->width, b->height);
+ MAKERECT(rect, b->left, b->top, b->width, b->height);
xrdp_bitmap_invalidate(wnd->wm->screen, &rect);
xrdp_bitmap_delete(sender);
wnd->modal_dialog = 0;
@@ -451,33 +427,33 @@ int xrdp_wm_init(struct xrdp_wm* self)
}
else if (self->screen->bpp == 15)
{
- self->black = xrdp_wm_color15(0, 0, 0);
- self->grey = xrdp_wm_color15(0xc0, 0xc0, 0xc0);
- self->dark_grey = xrdp_wm_color15(0x80, 0x80, 0x80);
- self->blue = xrdp_wm_color15(0x00, 0x00, 0xff);
- self->white = xrdp_wm_color15(0xff, 0xff, 0xff);
- self->red = xrdp_wm_color15(0xff, 0x00, 0x00);
- self->green = xrdp_wm_color15(0x00, 0xff, 0x00);
+ self->black = color15(0, 0, 0);
+ self->grey = color15(0xc0, 0xc0, 0xc0);
+ self->dark_grey = color15(0x80, 0x80, 0x80);
+ self->blue = color15(0x00, 0x00, 0xff);
+ self->white = color15(0xff, 0xff, 0xff);
+ self->red = color15(0xff, 0x00, 0x00);
+ self->green = color15(0x00, 0xff, 0x00);
}
else if (self->screen->bpp == 16)
{
- self->black = xrdp_wm_color16(0, 0, 0);
- self->grey = xrdp_wm_color16(0xc0, 0xc0, 0xc0);
- self->dark_grey = xrdp_wm_color16(0x80, 0x80, 0x80);
- self->blue = xrdp_wm_color16(0x00, 0x00, 0xff);
- self->white = xrdp_wm_color16(0xff, 0xff, 0xff);
- self->red = xrdp_wm_color16(0xff, 0x00, 0x00);
- self->green = xrdp_wm_color16(0x00, 0xff, 0x00);
+ self->black = color16(0, 0, 0);
+ self->grey = color16(0xc0, 0xc0, 0xc0);
+ self->dark_grey = color16(0x80, 0x80, 0x80);
+ self->blue = color16(0x00, 0x00, 0xff);
+ self->white = color16(0xff, 0xff, 0xff);
+ self->red = color16(0xff, 0x00, 0x00);
+ self->green = color16(0x00, 0xff, 0x00);
}
else if (self->screen->bpp == 24)
{
- self->black = xrdp_wm_color24(0, 0, 0);
- self->grey = xrdp_wm_color24(0xc0, 0xc0, 0xc0);
- self->dark_grey = xrdp_wm_color24(0x80, 0x80, 0x80);
- self->blue = xrdp_wm_color24(0x00, 0x00, 0xff);
- self->white = xrdp_wm_color24(0xff, 0xff, 0xff);
- self->red = xrdp_wm_color24(0xff, 0x00, 0x00);
- self->green = xrdp_wm_color24(0x00, 0xff, 0x00);
+ self->black = color24(0, 0, 0);
+ self->grey = color24(0xc0, 0xc0, 0xc0);
+ self->dark_grey = color24(0x80, 0x80, 0x80);
+ self->blue = color24(0x00, 0x00, 0xff);
+ self->white = color24(0xff, 0xff, 0xff);
+ self->red = color24(0xff, 0x00, 0x00);
+ self->green = color24(0x00, 0xff, 0x00);
}
/* draw login window */
self->login_window = xrdp_bitmap_create(400, 200, self->screen->bpp, 1);
@@ -606,30 +582,29 @@ int xrdp_wm_get_vis_region(struct xrdp_wm* self, struct xrdp_bitmap* bitmap,
struct xrdp_rect b;
/* area we are drawing */
- xrdp_wm_rect(&a, bitmap->left + x, bitmap->top + y, cx, cy);
-
+ MAKERECT(a, bitmap->left + x, bitmap->top + y, cx, cy);
p = bitmap->parent;
while (p != 0)
{
- xrdp_wm_rect_offset(&a, p->left, p->top);
+ RECTOFFSET(a, p->left, p->top);
p = p->parent;
}
-
+ a.left = MAX(self->screen->left, a.left);
+ a.top = MAX(self->screen->top, a.top);
+ a.right = MIN(self->screen->left + self->screen->width, a.right);
+ a.bottom = MIN(self->screen->top + self->screen->height, a.bottom);
xrdp_region_add_rect(region, &a);
-
if (bitmap == self->screen)
return 0;
-
/* loop through all windows in z order */
for (i = 0; i < self->screen->child_list->count; i++)
{
p = (struct xrdp_bitmap*)xrdp_list_get_item(self->screen->child_list, i);
if (p == bitmap || p == bitmap->parent)
return 0;
- xrdp_wm_rect(&b, p->left, p->top, p->width, p->height);
+ MAKERECT(b, p->left, p->top, p->width, p->height);
xrdp_region_subtract_rect(region, &b);
}
-
return 0;
}
@@ -735,8 +710,7 @@ int xrdp_wm_bitblt(struct xrdp_wm* self,
int xrdp_wm_is_rect_vis(struct xrdp_wm* self, struct xrdp_bitmap* wnd,
struct xrdp_rect* rect)
{
- struct xrdp_rect rect1;
- struct xrdp_rect rect2;
+ struct xrdp_rect wnd_rect;
struct xrdp_bitmap* b;
int i;;
@@ -755,8 +729,8 @@ int xrdp_wm_is_rect_vis(struct xrdp_wm* self, struct xrdp_bitmap* wnd,
while (i >= 0)
{
b = (struct xrdp_bitmap*)xrdp_list_get_item(self->screen->child_list, i);
- xrdp_wm_rect(&rect1, b->left, b->top, b->width, b->height);
- if (xrdp_wm_rect_intersect(rect, &rect1, &rect2))
+ MAKERECT(wnd_rect, b->left, b->top, b->width, b->height);
+ if (rect_intersect(rect, &wnd_rect, 0))
return 0;
i--;
}
@@ -772,11 +746,11 @@ int xrdp_wm_move_window(struct xrdp_wm* self, struct xrdp_bitmap* wnd,
struct xrdp_region* r;
int i;
- xrdp_wm_rect(&rect1, wnd->left, wnd->top, wnd->width, wnd->height);
+ MAKERECT(rect1, wnd->left, wnd->top, wnd->width, wnd->height);
if (xrdp_wm_is_rect_vis(self, wnd, &rect1))
{
rect2 = rect1;
- xrdp_wm_rect_offset(&rect2, dx, dy);
+ RECTOFFSET(rect2, dx, dy);
if (xrdp_wm_is_rect_vis(self, wnd, &rect2))
{ /* if both src and dst are unobscured, we can do a bitblt move */
xrdp_wm_bitblt(self, self->screen, wnd->left + dx, wnd->top + dy,
@@ -805,67 +779,6 @@ int xrdp_wm_move_window(struct xrdp_wm* self, struct xrdp_bitmap* wnd,
}
/*****************************************************************************/
-int xrdp_wm_rect(struct xrdp_rect* r, int x, int y, int cx, int cy)
-{
- r->left = x;
- r->top = y;
- r->right = x + cx;
- r->bottom = y + cy;
- return 0;
-}
-
-/*****************************************************************************/
-int xrdp_wm_rect_is_empty(struct xrdp_rect* in)
-{
- return (in->right <= in->left) || (in->bottom <= in->top);
-}
-
-/*****************************************************************************/
-int xrdp_wm_rect_contains_pt(struct xrdp_rect* in, int x, int y)
-{
- if (x < in->left)
- return 0;
- if (y < in->top)
- return 0;
- if (x >= in->right)
- return 0;
- if (y >= in->bottom)
- return 0;
- return 1;
-}
-
-/*****************************************************************************/
-int xrdp_wm_rect_intersect(struct xrdp_rect* in1, struct xrdp_rect* in2,
- struct xrdp_rect* out)
-{
- int rv;
-
- *out = *in1;
- if (in2->left > in1->left)
- out->left = in2->left;
- if (in2->top > in1->top)
- out->top = in2->top;
- if (in2->right < in1->right)
- out->right = in2->right;
- if (in2->bottom < in1->bottom)
- out->bottom = in2->bottom;
- rv = !xrdp_wm_rect_is_empty(out);
- if (!rv)
- g_memset(out, 0, sizeof(struct xrdp_rect));
- return rv;
-}
-
-/*****************************************************************************/
-int xrdp_wm_rect_offset(struct xrdp_rect* in, int dx, int dy)
-{
- in->left += dx;
- in->right += dx;
- in->top += dy;
- in->bottom += dy;
- return 0;
-}
-
-/*****************************************************************************/
int xrdp_wm_mouse_move(struct xrdp_wm* self, int x, int y)
{
struct xrdp_bitmap* b;