xrdp comestic patch from "Alessandro Briosi" <tsdogs@briosix.org>

ulab-original
Itamar Reis Peixoto 14 years ago
parent 83edc21992
commit 759757435e

@ -66,6 +66,19 @@
#define COLOR16(r, g, b) ((((r) >> 3) << 11) | (((g) >> 2) << 5) | ((b) >> 3))
#define COLOR24RGB(r, g, b) (((r) << 16) | ((g) << 8) | (b))
#define COLOR24BGR(r, g, b) (((b) << 16) | ((g) << 8) | (r))
#define HRED(c) ((c & 0xff0000) >> 16)
#define HGREEN(c) ((c & 0x00ff00) >> 8)
#define HBLUE(c) ((c & 0x0000ff))
#define HCOLOR(bpp,c) \
( \
(bpp==8?COLOR8(HRED(c),HGREEN(c),HBLUE(c)): \
(bpp==15?COLOR15(HRED(c),HGREEN(c),HBLUE(c)): \
(bpp==16?COLOR16(HRED(c),HGREEN(c),HBLUE(c)): \
(bpp==24?COLOR24BGR(HRED(c),HGREEN(c),HBLUE(c)):c) \
) \
) \
) \
)
#define SPLITCOLOR15(r, g, b, c) \
{ \
r = (((c) >> 7) & 0xf8) | (((c) >> 12) & 0x7); \

@ -5,6 +5,16 @@ bitmap_compression=yes
port=3389
crypt_level=low
channel_code=1
#black=000000
#grey=d6d3ce
#dark_grey=808080
#blue=08246b
#dark_blue=08246b
#white=ffffff
#red=ff0000
#green=00ff00
#background=626c72
[xrdp1]
name=sesman-Xvnc

@ -1190,10 +1190,10 @@ xrdp_bitmap_invalidate(struct xrdp_bitmap* self, struct xrdp_rect* rect)
xrdp_painter_fill_rect(painter, self, self->width - 1, 0, 1, self->height);
/* black left line */
painter->fg_color = self->wm->black;
xrdp_painter_fill_rect(painter, self, 1, 1, 1, self->height - 2);
xrdp_painter_fill_rect(painter, self, 1, 1, 1, self->height - 3);
/* black top line */
painter->fg_color = self->wm->black;
xrdp_painter_fill_rect(painter, self, 1, 1, self->width - 2, 1);
xrdp_painter_fill_rect(painter, self, 1, 1, self->width - 3, 1);
/* draw text */
painter->fg_color = self->wm->black;
if (self->password_char != 0)
@ -1267,10 +1267,10 @@ xrdp_bitmap_invalidate(struct xrdp_bitmap* self, struct xrdp_rect* rect)
xrdp_painter_fill_rect(painter, self, self->width - 1, 0, 1, self->height);
/* black left line */
painter->fg_color = self->wm->black;
xrdp_painter_fill_rect(painter, self, 1, 1, 1, self->height - 2);
xrdp_painter_fill_rect(painter, self, 1, 1, 1, self->height - 3);
/* black top line */
painter->fg_color = self->wm->black;
xrdp_painter_fill_rect(painter, self, 1, 1, self->width - 2, 1);
xrdp_painter_fill_rect(painter, self, 1, 1, self->width - 3, 1);
/* draw text */
if (self->parent->focused_control == self)
{
@ -1287,13 +1287,28 @@ xrdp_bitmap_invalidate(struct xrdp_bitmap* self, struct xrdp_rect* rect)
y = 2;
w = (self->width - x) - 2;
h = self->height - 4;
/* looks better with a background around */
painter->fg_color = self->wm->grey;
xrdp_painter_fill_rect(painter, self, x, y, w, h);
if (self->state == BUTTON_STATE_UP) /* 0 */
{
xrdp_bitmap_draw_button(self, painter, x, y, w, h, 0);
xrdp_bitmap_draw_button(self, painter, x+1, y+1, w-1, h-1, 0);
}
else
{
xrdp_bitmap_draw_button(self, painter, x, y, w, h, 1);
xrdp_bitmap_draw_button(self, painter, x+1, y+1, w-1, h-1, 1);
}
/* draw the arrow */
w = w / 2;
x = x + (w / 2) + 1;
h = (h / 2) + 2;
y = y + (h / 2) + 1;
painter->fg_color = self->wm->black;
for (i=w; i>0; i=i-2)
{
xrdp_painter_fill_rect(painter, self, x, y, i, 1);
y++;
x = x + 1;
}
}
else if (self->type == WND_TYPE_SPECIAL) /* 8 special */

@ -132,7 +132,7 @@ xrdp_wm_help_clicked(struct xrdp_bitmap* wnd)
struct xrdp_bitmap* but;
/* create help screen */
help = xrdp_bitmap_create(340, 300, wnd->wm->screen->bpp,
help = xrdp_bitmap_create(DEFAULT_WND_HELP_W, DEFAULT_WND_HELP_H, wnd->wm->screen->bpp,
WND_TYPE_WND, wnd->wm);
list_insert_item(wnd->wm->screen->child_list, 0, (long)help);
help->parent = wnd->wm->screen;
@ -144,13 +144,13 @@ xrdp_wm_help_clicked(struct xrdp_bitmap* wnd)
help->notify = xrdp_wm_login_help_notify;
set_string(&help->caption1, "Login help");
/* ok button */
but = xrdp_bitmap_create(60, 25, wnd->wm->screen->bpp,
but = xrdp_bitmap_create(DEFAULT_BUTTON_W, DEFAULT_BUTTON_H, wnd->wm->screen->bpp,
WND_TYPE_BUTTON, wnd->wm);
list_insert_item(help->child_list, 0, (long)but);
but->parent = help;
but->owner = help;
but->left = 140;
but->top = 260;
but->left = ((DEFAULT_WND_HELP_W / 2) - (DEFAULT_BUTTON_W / 2)); /* center */
but->top = DEFAULT_WND_HELP_H - DEFAULT_BUTTON_H - 15;
but->id = 1;
but->tab_stop = 1;
set_string(&but->caption1, "OK");
@ -261,28 +261,28 @@ xrdp_wm_show_edits(struct xrdp_wm* self, struct xrdp_bitmap* combo)
if (g_strncmp("ask", value, 3) == 0)
{
/* label */
b = xrdp_bitmap_create(70, 20, self->screen->bpp,
b = xrdp_bitmap_create(70, DEFAULT_EDIT_H, self->screen->bpp,
WND_TYPE_LABEL, self);
list_insert_item(self->login_window->child_list, insert_index,
(long)b);
insert_index++;
b->parent = self->login_window;
b->owner = self->login_window;
b->left = self->login_window->width >= 400 ? 155 : 5;
b->top = 60 + 25 * count;
b->left = self->login_window->width >= DEFAULT_WND_LOGIN_W ? 155 : 5;
b->top = DEFAULT_ELEMENT_TOP + DEFAULT_COMBO_H + 5 + (DEFAULT_EDIT_H+5) * count;
b->id = 100 + 2 * count;
name = (char*)list_get_item(mod->names, index);
set_string(&b->caption1, name);
/* edit */
b = xrdp_bitmap_create(140, 20, self->screen->bpp,
b = xrdp_bitmap_create(DEFAULT_EDIT_W, DEFAULT_EDIT_H, self->screen->bpp,
WND_TYPE_EDIT, self);
list_insert_item(self->login_window->child_list, insert_index,
(long)b);
insert_index++;
b->parent = self->login_window;
b->owner = self->login_window;
b->left = self->login_window->width >= 400 ? 230 : 70;
b->top = 60 + 25 * count;
b->left = self->login_window->width >= DEFAULT_WND_LOGIN_W ? DEFAULT_WND_LOGIN_W - DEFAULT_EDIT_W - 30 : 70;
b->top = DEFAULT_ELEMENT_TOP + DEFAULT_COMBO_H + 5 + (DEFAULT_EDIT_H+5) * count;
b->id = 100 + 2 * count + 1;
b->pointer = 1;
b->tab_stop = 1;
@ -455,8 +455,8 @@ xrdp_login_wnd_create(struct xrdp_wm* self)
int log_height;
int regular;
log_width = 400;
log_height = 200;
log_width = DEFAULT_WND_LOGIN_W;
log_height = DEFAULT_WND_LOGIN_H;
regular = 1;
if (self->screen->width < log_width)
{
@ -521,44 +521,44 @@ xrdp_login_wnd_create(struct xrdp_wm* self)
}
/* label */
but = xrdp_bitmap_create(60, 20, self->screen->bpp, WND_TYPE_LABEL, self);
but = xrdp_bitmap_create(60, DEFAULT_EDIT_H, self->screen->bpp, WND_TYPE_LABEL, self);
list_add_item(self->login_window->child_list, (long)but);
but->parent = self->login_window;
but->owner = self->login_window;
but->left = regular ? 155 : 5;
but->top = 35;
but->top = DEFAULT_ELEMENT_TOP;
set_string(&but->caption1, "Module");
/* combo */
combo = xrdp_bitmap_create(140, 20, self->screen->bpp, WND_TYPE_COMBO, self);
combo = xrdp_bitmap_create(DEFAULT_COMBO_W, DEFAULT_COMBO_H, self->screen->bpp, WND_TYPE_COMBO, self);
list_add_item(self->login_window->child_list, (long)combo);
combo->parent = self->login_window;
combo->owner = self->login_window;
combo->left = regular ? 230 : 70;
combo->top = 35;
combo->left = regular ? DEFAULT_WND_LOGIN_W - DEFAULT_COMBO_W - 30 : 70;
combo->top = DEFAULT_ELEMENT_TOP;
combo->id = 6;
combo->tab_stop = 1;
xrdp_wm_login_fill_in_combo(self, combo);
/* button */
but = xrdp_bitmap_create(60, 25, self->screen->bpp, WND_TYPE_BUTTON, self);
but = xrdp_bitmap_create(DEFAULT_BUTTON_W, DEFAULT_BUTTON_H, self->screen->bpp, WND_TYPE_BUTTON, self);
list_add_item(self->login_window->child_list, (long)but);
but->parent = self->login_window;
but->owner = self->login_window;
but->left = regular ? 180 : 30;
but->top = 160;
but->left = regular ? DEFAULT_WND_LOGIN_W - ((DEFAULT_BUTTON_W+10)*3) - 10 : 30;
but->top = DEFAULT_WND_LOGIN_H - DEFAULT_BUTTON_H - 15;
but->id = 3;
set_string(&but->caption1, "OK");
but->tab_stop = 1;
self->login_window->default_button = but;
/* button */
but = xrdp_bitmap_create(60, 25, self->screen->bpp, WND_TYPE_BUTTON, self);
but = xrdp_bitmap_create(DEFAULT_BUTTON_W, DEFAULT_BUTTON_H, self->screen->bpp, WND_TYPE_BUTTON, self);
list_add_item(self->login_window->child_list, (long)but);
but->parent = self->login_window;
but->owner = self->login_window;
but->left = regular ? 250 : ((log_width - 30) - 60);
but->top = 160;
but->left = regular ? DEFAULT_WND_LOGIN_W - ((DEFAULT_BUTTON_W+10)*2) - 10 : ((log_width - 30) - DEFAULT_BUTTON_W);
but->top = DEFAULT_WND_LOGIN_H - DEFAULT_BUTTON_H - 15;
but->id = 2;
set_string(&but->caption1, "Cancel");
but->tab_stop = 1;
@ -567,12 +567,12 @@ xrdp_login_wnd_create(struct xrdp_wm* self)
if (regular)
{
/* button */
but = xrdp_bitmap_create(60, 25, self->screen->bpp, WND_TYPE_BUTTON, self);
but = xrdp_bitmap_create(DEFAULT_BUTTON_W, DEFAULT_BUTTON_H, self->screen->bpp, WND_TYPE_BUTTON, self);
list_add_item(self->login_window->child_list, (long)but);
but->parent = self->login_window;
but->owner = self->login_window;
but->left = 320;
but->top = 160;
but->left = DEFAULT_WND_LOGIN_W - (DEFAULT_BUTTON_W+10) - 10;
but->top = DEFAULT_WND_LOGIN_H - DEFAULT_BUTTON_H - 15;
but->id = 1;
set_string(&but->caption1, "Help");
but->tab_stop = 1;

@ -227,6 +227,7 @@ struct xrdp_wm
int white;
int red;
int green;
int background;
/* dragging info */
int dragging;
int draggingx;
@ -370,6 +371,21 @@ struct xrdp_bitmap
#define NUM_FONTS 0x4e00
#define DEFAULT_FONT_NAME "sans-10.fv1"
#define DEFAULT_ELEMENT_TOP 35
#define DEFAULT_BUTTON_W 60
#define DEFAULT_BUTTON_H 23
#define DEFAULT_COMBO_W 140
#define DEFAULT_COMBO_H 21
#define DEFAULT_EDIT_W 140
#define DEFAULT_EDIT_H 21
#define DEFAULT_WND_LOGIN_W 400
#define DEFAULT_WND_LOGIN_H 200
#define DEFAULT_WND_HELP_W 340
#define DEFAULT_WND_HELP_H 300
#define DEFAULT_WND_LOG_W 400
#define DEFAULT_WND_LOG_H 400
#define DEFAULT_WND_SPECIAL_H 100
/* font */
struct xrdp_font
{

@ -283,6 +283,30 @@ xrdp_wm_set_pointer(struct xrdp_wm* self, int cache_idx)
return libxrdp_set_pointer(self->session, cache_idx);
}
/*****************************************************************************/
/* convert hex string to int */
unsigned int xrdp_wm_htoi (const char *ptr)
{
unsigned int value = 0;
char ch = *ptr;
while (ch == ' ' || ch == '\t')
ch = *(++ptr);
for (;;)
{
if (ch >= '0' && ch <= '9')
value = (value << 4) + (ch - '0');
else if (ch >= 'A' && ch <= 'F')
value = (value << 4) + (ch - 'A' + 10);
else if (ch >= 'a' && ch <= 'f')
value = (value << 4) + (ch - 'a' + 10);
else
return value;
ch = *(++ptr);
}
}
/*****************************************************************************/
int APP_CC
xrdp_wm_load_static_colors(struct xrdp_wm* self)
@ -291,6 +315,97 @@ xrdp_wm_load_static_colors(struct xrdp_wm* self)
int gindex;
int rindex;
int fd;
int index;
char* val;
struct list* names;
struct list* values;
char cfg_file[256];
/* initialize with defaults */
self->black = HCOLOR(self->screen->bpp,0x000000);
self->grey = HCOLOR(self->screen->bpp,0xc0c0c0);
self->dark_grey = HCOLOR(self->screen->bpp,0x808080);
self->blue = HCOLOR(self->screen->bpp,0x0000ff);
self->dark_blue = HCOLOR(self->screen->bpp,0x00007f);
self->white = HCOLOR(self->screen->bpp,0xffffff);
self->red = HCOLOR(self->screen->bpp,0xff0000);
self->green = HCOLOR(self->screen->bpp,0x00ff00);
self->background = HCOLOR(self->screen->bpp,0x000000);
/* now load them from the globals in xrdp.ini if defined */
g_snprintf(cfg_file, 255, "%s/xrdp.ini", XRDP_CFG_PATH);
fd = g_file_open(cfg_file);
if (fd > 0)
{
names = list_create();
names->auto_free = 1;
values = list_create();
values->auto_free = 1;
if (file_read_section(fd, "globals", names, values) == 0)
{
for (index = 0; index < names->count; index++)
{
val = (char*)list_get_item(names, index);
if (val != 0)
{
if (g_strcasecmp(val, "black") == 0)
{
val = (char*)list_get_item(values, index);
self->black = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
}
else if (g_strcasecmp(val, "grey") == 0)
{
val = (char*)list_get_item(values, index);
self->grey = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
}
else if (g_strcasecmp(val, "dark_grey") == 0)
{
val = (char*)list_get_item(values, index);
self->dark_grey = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
}
else if (g_strcasecmp(val, "blue") == 0)
{
val = (char*)list_get_item(values, index);
self->blue = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
}
else if (g_strcasecmp(val, "dark_blue") == 0)
{
val = (char*)list_get_item(values, index);
self->dark_blue = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
}
else if (g_strcasecmp(val, "white") == 0)
{
val = (char*)list_get_item(values, index);
self->white = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
}
else if (g_strcasecmp(val, "red") == 0)
{
val = (char*)list_get_item(values, index);
self->red = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
}
else if (g_strcasecmp(val, "green") == 0)
{
val = (char*)list_get_item(values, index);
self->green = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
}
else if (g_strcasecmp(val, "background") == 0)
{
val = (char*)list_get_item(values, index);
self->background = HCOLOR(self->screen->bpp,xrdp_wm_htoi(val));
}
}
}
}
list_delete(names);
list_delete(values);
g_file_close(fd);
}
else
{
g_writeln("xrdp_wm_load_static_colors: Could not read xrdp.ini file %s", cfg_file);
}
if (self->screen->bpp == 8)
{
/* rgb332 */
@ -307,49 +422,8 @@ xrdp_wm_load_static_colors(struct xrdp_wm* self)
}
}
}
self->black = COLOR8(0, 0, 0);
self->grey = COLOR8(0xc0, 0xc0, 0xc0);
self->dark_grey = COLOR8(0x80, 0x80, 0x80);
self->blue = COLOR8(0x00, 0x00, 0xff);
self->dark_blue = COLOR8(0x00, 0x00, 0x7f);
self->white = COLOR8(0xff, 0xff, 0xff);
self->red = COLOR8(0xff, 0x00, 0x00);
self->green = COLOR8(0x00, 0xff, 0x00);
xrdp_wm_send_palette(self);
}
else if (self->screen->bpp == 15)
{
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->dark_blue = COLOR15(0x00, 0x00, 0x7f);
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 = COLOR16(0, 0, 0);
self->grey = COLOR16(0xc0, 0xc0, 0xc0);
self->dark_grey = COLOR16(0x80, 0x80, 0x80);
self->blue = COLOR16(0x00, 0x00, 0xff);
self->dark_blue = COLOR16(0x00, 0x00, 0x7f);
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 = COLOR24BGR(0, 0, 0);
self->grey = COLOR24BGR(0xc0, 0xc0, 0xc0);
self->dark_grey = COLOR24BGR(0x80, 0x80, 0x80);
self->blue = COLOR24BGR(0x00, 0x00, 0xff);
self->dark_blue = COLOR24BGR(0x00, 0x00, 0x7f);
self->white = COLOR24BGR(0xff, 0xff, 0xff);
self->red = COLOR24BGR(0xff, 0x00, 0x00);
self->green = COLOR24BGR(0x00, 0xff, 0x00);
}
return 0;
}
@ -391,7 +465,7 @@ xrdp_wm_init(struct xrdp_wm* self)
xrdp_wm_load_static_colors(self);
xrdp_wm_load_static_pointers(self);
self->screen->bg_color = self->black;
self->screen->bg_color = self->background;
if (self->session->client_info->rdp_autologin)
{
g_snprintf(cfg_file, 255, "%s/xrdp.ini", XRDP_CFG_PATH);
@ -1200,7 +1274,7 @@ xrdp_wm_pu(struct xrdp_wm* self, struct xrdp_bitmap* control)
{
return 0;
}
self->popup_wnd = xrdp_bitmap_create(control->width, 100,
self->popup_wnd = xrdp_bitmap_create(control->width, DEFAULT_WND_SPECIAL_H,
self->screen->bpp,
WND_TYPE_SPECIAL, self);
self->popup_wnd->popped_from = control;
@ -1455,8 +1529,8 @@ xrdp_wm_log_msg(struct xrdp_wm* self, char* msg)
list_add_item(self->log, (long)g_strdup(msg));
if (self->log_wnd == 0)
{
w = 400;
h = 400;
w = DEFAULT_WND_LOG_W;
h = DEFAULT_WND_LOG_H;
xoffset = 10;
yoffset = 10;
if (self->screen->width < w)
@ -1480,12 +1554,12 @@ xrdp_wm_log_msg(struct xrdp_wm* self, char* msg)
self->log_wnd->top = yoffset;
set_string(&(self->log_wnd->caption1), "Connection Log");
/* ok button */
but = xrdp_bitmap_create(60, 25, self->screen->bpp, WND_TYPE_BUTTON, self);
but = xrdp_bitmap_create(DEFAULT_BUTTON_W, DEFAULT_BUTTON_H, self->screen->bpp, WND_TYPE_BUTTON, self);
list_insert_item(self->log_wnd->child_list, 0, (long)but);
but->parent = self->log_wnd;
but->owner = self->log_wnd;
but->left = (w - 60) - xoffset;
but->top = (h - 25) - yoffset;
but->left = (w - DEFAULT_BUTTON_W) - xoffset;
but->top = (h - DEFAULT_BUTTON_H) - yoffset;
but->id = 1;
but->tab_stop = 1;
set_string(&but->caption1, "OK");

Loading…
Cancel
Save