[prev in list] [next in list] [prev in thread] [next in thread]
List: xine-cvslog
Subject: [xine-cvs] CVS: xine-ui/src/xitk/xine-toolkit browser.c,1.59,1.60 browser.h,1.23,1.24 combo.c,1.36,1
From: Daniel Caujolle-Bert <f1rmb () users ! sourceforge ! net>
Date: 2004-03-30 22:41:44
Message-ID: E1B8RvU-0003fW-1x () sc8-pr-cvs1 ! sourceforge ! net
[Download RAW message or body]
Update of /cvsroot/xine/xine-ui/src/xitk/xine-toolkit
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13713/xine-toolkit
Modified Files:
browser.c browser.h combo.c filebrowser.c font.c labelbutton.c
labelbutton.h menu.c mrlbrowser.c test.c xitk.h
Log Message:
get shortcuts correctly aligned (even with Xft) (without overload too) in both menus \
and keymap editor.
Index: browser.c
===================================================================
RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/browser.c,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -r1.59 -r1.60
--- browser.c 14 Dec 2003 14:10:33 -0000 1.59
+++ browser.c 30 Mar 2004 22:41:39 -0000 1.60
@@ -317,8 +317,14 @@
if(w && (((w->type & WIDGET_GROUP_MASK) & WIDGET_GROUP_BROWSER) &&
(w->type & WIDGET_GROUP_WIDGET))) {
+ char *max_shortcut = NULL;
+ int item_width;
+ char *label_font;
+ xitk_font_t *fs = NULL;
private_data = (browser_private_data_t *) w->private_data;
+ item_width = xitk_get_widget_width(private_data->item_tree[WBSTART]);
+ label_font = xitk_labelbutton_get_fontname(private_data->item_tree[WBSTART]);
xitk_browser_release_all_buttons(w);
@@ -343,30 +349,54 @@
private_data->labels_offset = 0;
- for(i = 0; i < private_data->max_length; i++) {
- xitk_labelbutton_set_label_offset(private_data->item_tree[i + WBSTART], 0);
+ if(label_font) {
+ fs = xitk_font_load_font(private_data->imlibdata->x.disp, label_font);
+ xitk_font_set_font(fs, private_data->parent_wlist->gc);
+ }
+
+ if(private_data->shortcuts_content) {
+ int maxlen = 0;
+
+ for(i = 0; i < private_data->max_length; i++) {
+ char *nshortcut;
+
+ if((private_data->shortcuts_content[private_data->current_start + i]) &&
+ (nshortcut = private_data->shortcuts_content[private_data->current_start + i])) \
{ + int nlen = strlen(nshortcut);
+
+ if(nlen > maxlen) {
+ maxlen = nlen;
+ max_shortcut = nshortcut;
+ }
+ }
+ }
}
+ for(i = 0; i < private_data->max_length; i++)
+ xitk_labelbutton_set_label_offset(private_data->item_tree[i + WBSTART], 0);
+
for(i = 0; i < private_data->max_length; i++) {
if (((private_data->current_start + i) < private_data->list_length)
&& (private_data->content[private_data->current_start + i] != NULL)) {
- int item_width = xitk_get_widget_width(private_data->item_tree[WBSTART]);
- char *label_font = xitk_labelbutton_get_fontname(private_data->item_tree[WBSTART]);
- xitk_labelbutton_change_label(private_data->item_tree[i + WBSTART],
+ xitk_labelbutton_change_label(private_data->item_tree[i + WBSTART],
private_data->content[private_data->current_start + i]);
+
+ if(private_data->shortcuts_content) {
+ if(private_data->shortcuts_content[private_data->current_start + i])
+ xitk_labelbutton_change_shortcut_label(private_data->item_tree[i + WBSTART],
+ private_data->shortcuts_content[private_data->current_start + i],
+ item_width - (xitk_font_get_string_length(fs, \
private_data->shortcuts_content[private_data->current_start + i]) + 10)); + else
+ xitk_labelbutton_change_shortcut_label(private_data->item_tree[i + WBSTART], \
"", -1); + }
- if(label_font) {
- xitk_font_t *fs = NULL;
- int label_width;
-
- fs = xitk_font_load_font(private_data->imlibdata->x.disp, label_font);
- xitk_font_set_font(fs, private_data->parent_wlist->gc);
+ if(fs) {
+ int label_width;
label_width = (private_data->content[private_data->current_start + i] &&
strlen(private_data->content[private_data->current_start + i])) ?
xitk_font_get_string_length(fs, \
private_data->content[private_data->current_start + i]) : 0;
- xitk_font_unload_font(fs);
if(label_width > (item_width - 2)) {
int diff_width = (label_width - (item_width - 2));
@@ -377,14 +407,19 @@
private_data->labels_offset = diff_width;
}
- XITK_FREE(label_font);
}
}
else {
xitk_labelbutton_change_label(private_data->item_tree[i+WBSTART], "");
+ xitk_labelbutton_change_shortcut_label(private_data->item_tree[i + WBSTART], "", \
-1); }
}
+ XITK_FREE(label_font);
+
+ if(fs)
+ xitk_font_unload_font(fs);
+
if(private_data->need_h_slider) {
int align = xitk_labelbutton_get_alignment(private_data->item_tree[WBSTART]);
@@ -436,7 +471,7 @@
/**
* Update the list, and rebuild button list
*/
-void xitk_browser_update_list(xitk_widget_t *w, const char *const *list, int len, \
int start) { +void xitk_browser_update_list(xitk_widget_t *w, const char *const \
*list, const char *const *shortcut, int len, int start) { browser_private_data_t \
*private_data;
if(w && (((w->type & WIDGET_GROUP_MASK) & WIDGET_GROUP_BROWSER) &&
@@ -444,6 +479,7 @@
private_data = (browser_private_data_t *) w->private_data;
private_data->content = (char **)list;
+ private_data->shortcuts_content = (char **)shortcut;
private_data->list_length = len;
xitk_browser_rebuild_browser(w, start);
}
@@ -493,11 +529,15 @@
xitk_labelbutton_change_label(private_data->item_tree[i + WBSTART],
private_data->content[private_data->current_start + i]);
+ if(private_data->shortcuts_content)
+ xitk_labelbutton_change_shortcut_label(private_data->item_tree[i + WBSTART],
+ private_data->shortcuts_content[private_data->current_start + i], -1);
}
- else
+ else {
xitk_labelbutton_change_label(private_data->item_tree[i+WBSTART], "");
-
+ xitk_labelbutton_change_shortcut_label(private_data->item_tree[i + WBSTART], "", \
-1); + }
}
}
else
@@ -931,6 +971,7 @@
private_data->skin_element_name = (skin_element_name == NULL) ? NULL : \
strdup(br->browser.skin_element_name); private_data->jumped = -1;
private_data->content = (char **)br->browser.entries;
+ private_data->shortcuts_content = NULL;
private_data->list_length = br->browser.num_entries;
private_data->max_length = br->browser.max_displayed_entries;
Index: browser.h
===================================================================
RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/browser.h,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- browser.h 13 Dec 2003 01:09:39 -0000 1.23
+++ browser.h 30 Mar 2004 22:41:39 -0000 1.24
@@ -45,6 +45,7 @@
int jumped;
char **content;
+ char **shortcuts_content;
int max_length;
int list_length;
int current_start;
Index: combo.c
===================================================================
RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/combo.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- combo.c 13 Dec 2003 01:09:39 -0000 1.36
+++ combo.c 30 Mar 2004 22:41:39 -0000 1.37
@@ -154,7 +154,7 @@
xitk_browser_release_all_buttons(private_data->browser_widget);
xitk_browser_update_list(private_data->browser_widget,
- (const char* const*)private_data->entries,
+ (const char* const*)private_data->entries, NULL,
private_data->num_entries, 0);
xitk_checkbox_set_state(private_data->button_widget, 0);
@@ -486,7 +486,7 @@
private_data->selected = -1;
xitk_browser_update_list(private_data->browser_widget,
- (const char* const*)private_data->entries,
+ (const char* const*)private_data->entries, NULL,
private_data->num_entries, 0);
}
}
@@ -614,7 +614,7 @@
private_data->browser_widget->type |= WIDGET_GROUP | WIDGET_GROUP_COMBO;
xitk_browser_update_list(private_data->browser_widget,
- (const char* const*)private_data->entries,
+ (const char* const*)private_data->entries, NULL,
private_data->num_entries, 0);
private_data->widget_key =
Index: filebrowser.c
===================================================================
RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/filebrowser.c,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- filebrowser.c 22 Jan 2004 23:14:11 -0000 1.47
+++ filebrowser.c 30 Mar 2004 22:41:39 -0000 1.48
@@ -740,7 +740,7 @@
private_data->dir_contents_num = 0;
xitk_browser_update_list(private_data->fb_list,
- (const char* const*)private_data->fc->dir_disp_contents,
+ (const char* const*)private_data->fc->dir_disp_contents, NULL,
private_data->dir_contents_num, 0);
update_current_dir(private_data);
@@ -1269,7 +1269,7 @@
load_files(NULL, (void *)private_data);
xitk_browser_update_list(private_data->fb_list,
- (const char* const*)private_data->fc->dir_disp_contents,
+ (const char* const*)private_data->fc->dir_disp_contents, NULL,
private_data->dir_contents_num, 0);
XLOCK(fb->imlibdata->x.disp);
@@ -1562,7 +1562,7 @@
load_files(NULL, (void *)private_data);
xitk_browser_update_list(private_data->fb_list,
- (const char* const*)private_data->fc->dir_disp_contents,
+ (const char* const*)private_data->fc->dir_disp_contents, NULL,
private_data->dir_contents_num, 0);
XLOCK(fb->imlibdata->x.disp);
Index: font.c
===================================================================
RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/font.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- font.c 27 Mar 2004 11:12:39 -0000 1.31
+++ font.c 30 Mar 2004 22:41:39 -0000 1.32
@@ -1265,7 +1265,7 @@
#endif
/*
* guess locale codeset according to shell variables
- * when nl_langinfo(CODESET) isn't available or workig
+ * when nl_langinfo(CODESET) isn't available or working
*/
if (!codeset || strstr(codeset, "ANSI") != 0) {
if(!(lang = getenv("LC_ALL")))
Index: labelbutton.c
===================================================================
RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/labelbutton.c,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -r1.56 -r1.57
--- labelbutton.c 20 Mar 2004 00:48:36 -0000 1.56
+++ labelbutton.c 30 Mar 2004 22:41:39 -0000 1.57
@@ -43,6 +43,7 @@
if(w && ((w->type & WIDGET_TYPE_MASK) == WIDGET_TYPE_LABELBUTTON)) {
private_data = (lbutton_private_data_t *) w->private_data;
XITK_FREE(private_data->label);
+ XITK_FREE(private_data->shortcut_label);
XITK_FREE(private_data->skin_element_name);
XITK_FREE(private_data->normcolor);
XITK_FREE(private_data->focuscolor);
@@ -97,9 +98,8 @@
static void create_labelofbutton(xitk_widget_t *lb,
Window win, GC gc, Pixmap pix,
int xsize, int ysize,
- char *label, int state) {
- lbutton_private_data_t *private_data =
- (lbutton_private_data_t *) lb->private_data;
+ char *label, char *shortcut_label, int shortcut_pos, int state) {
+ lbutton_private_data_t *private_data = (lbutton_private_data_t *) \
lb->private_data; xitk_font_t *fs = NULL;
int lbear, rbear, width, asc, des;
int xoff = 0, yoff = 0, DefaultColor = -1;
@@ -187,15 +187,27 @@
/* Put text in the right place */
if(private_data->align == ALIGN_CENTER) {
xitk_font_draw_string(fs, pix, gc,
- ((xsize-(width+xoff))>>1) + private_data->label_offset, origin, label, \
strlen(label)); + ((xsize-(width+xoff))>>1) + private_data->label_offset,
+ origin, label, strlen(label));
}
else if(private_data->align == ALIGN_LEFT) {
xitk_font_draw_string(fs, pix, gc,
- (((state != CLICK) ? 1 : 5)) + private_data->label_offset, origin, label, \
strlen(label)); + (((state != CLICK) ? 1 : 5)) + private_data->label_offset,
+ origin, label, strlen(label));
+
+ /* shortcut is only permited if alignement is set to left */
+ if(strlen(shortcut_label) && shortcut_pos >= 0) {
+ xitk_font_draw_string(fs, pix, gc,
+ (((state != CLICK) ? 1 : 5)) + shortcut_pos,
+ origin, shortcut_label, strlen(shortcut_label));
+
+ }
+
}
else if(private_data->align == ALIGN_RIGHT) {
xitk_font_draw_string(fs, pix, gc,
- (xsize - (width + ((state != CLICK) ? 5 : 1))) + private_data->label_offset, \
origin, label, strlen(label)); + (xsize - (width + ((state != CLICK) ? 5 : 1))) + \
private_data->label_offset, + origin, label, strlen(label));
}
xitk_font_unload_font(fs);
@@ -298,7 +310,7 @@
if(private_data->label_visible) {
create_labelofbutton(w, w->wl->win, w->wl->gc, btn->pixmap,
button_width, skin->height,
- private_data->label, state);
+ private_data->label, private_data->shortcut_label, \
private_data->shortcut_pos, state); }
XLOCK(private_data->imlibdata->x.disp);
@@ -391,6 +403,49 @@
}
/*
+ * Changing button caption
+ */
+int xitk_labelbutton_change_shortcut_label(xitk_widget_t *w, char *newlabel, int \
pos) { + lbutton_private_data_t *private_data;
+
+ if (w && (((w->type & WIDGET_TYPE_MASK) == WIDGET_TYPE_LABELBUTTON) &&
+ (((w->type & WIDGET_GROUP_MASK) == WIDGET_GROUP_MENU) || ((w->type & \
WIDGET_GROUP_MASK) == WIDGET_GROUP_BROWSER)))) { + private_data = \
(lbutton_private_data_t *) w->private_data; +
+ if((private_data->shortcut_label = (char *) \
realloc(private_data->shortcut_label, strlen(newlabel) + 1)) != NULL) + \
strcpy(private_data->shortcut_label, newlabel); +
+ if(strlen(private_data->shortcut_label)) {
+ if(pos >= 0)
+ private_data->shortcut_pos = pos;
+ else
+ private_data->shortcut_pos = -1;
+ }
+
+ paint_labelbutton(w);
+
+ return 1;
+ }
+
+ return 0;
+}
+
+/*
+ * Return the current button label
+ */
+char *xitk_labelbutton_get_shortcut_label(xitk_widget_t *w) {
+ lbutton_private_data_t *private_data;
+
+ if (w && (((w->type & WIDGET_TYPE_MASK) == WIDGET_TYPE_LABELBUTTON) &&
+ (((w->type & WIDGET_GROUP_MASK) == WIDGET_GROUP_MENU) || ((w->type & \
WIDGET_GROUP_MASK) == WIDGET_GROUP_BROWSER)))) { + private_data = \
(lbutton_private_data_t *) w->private_data; + return private_data->shortcut_label;
+ }
+
+ return NULL;
+}
+
+/*
* Handle motion on button
*/
static int notify_focus_labelbutton (xitk_widget_t *w, int focus) {
@@ -667,6 +722,8 @@
private_data->state_callback = b->state_callback;
private_data->userdata = b->userdata;
private_data->label = strdup((b->label)?b->label:"");
+ private_data->shortcut_label = strdup("");
+ private_data->shortcut_pos = -1;
private_data->label_visible = label_visible;
private_data->label_static = label_static;
Index: labelbutton.h
===================================================================
RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/labelbutton.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- labelbutton.h 14 Jul 2003 22:44:10 -0000 1.19
+++ labelbutton.h 30 Mar 2004 22:41:39 -0000 1.20
@@ -59,6 +59,10 @@
char *focuscolor;
char *clickcolor;
char *fontname;
+
+ /* Only used if (w->type & WIDGET_GROUP_MASK) == WIDGET_GROUP_BROWSER || \
WIDGET_GROUP_MENU */ + char *shortcut_label;
+ int shortcut_pos;
} lbutton_private_data_t;
Index: menu.c
===================================================================
RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/menu.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- menu.c 26 Mar 2004 22:16:26 -0000 1.19
+++ menu.c 30 Mar 2004 22:41:39 -0000 1.20
@@ -670,7 +670,7 @@
menu_private_data_t *private_data;
int bentries, bsep, btitle, rentries;
menu_node_t *maxnode, *me;
- int maxlen, wwidth, wheight, swidth, sheight;
+ int maxlen, wwidth, wheight, swidth, sheight, shortcutlen \
= 0, shortcutpos = 0; xitk_font_t *fs;
static xitk_window_t *xwin;
menu_window_t *menu_window;
@@ -699,8 +699,10 @@
xitk_font_set_font(fs, private_data->widget->wl->gc);
maxlen = xitk_font_get_string_length(fs, maxnode->menu_entry->menu);
- if(xitk_get_menu_shortcuts_enability() && _menu_branch_have_shortcut(branch))
- maxlen += xitk_font_get_string_length(fs, \
(_menu_get_wider_shortcut_node(branch))->menu_entry->shortcut) + 15; + \
if(xitk_get_menu_shortcuts_enability() && _menu_branch_have_shortcut(branch)) { + \
shortcutlen = xitk_font_get_string_length(fs, \
(_menu_get_wider_shortcut_node(branch))->menu_entry->shortcut); + maxlen += \
shortcutlen + 15; + }
xitk_font_unload_font(fs);
@@ -709,6 +711,8 @@
if(_menu_branch_have_check(branch) || _menu_branch_have_branch(branch))
wwidth += 20;
wheight = (rentries * 20) + (bsep * 2) + (btitle * 2);
+
+ shortcutpos = (wwidth - shortcutlen) - 15;
XLOCK(private_data->imlibdata->x.disp);
swidth = DisplayWidth(private_data->imlibdata->x.disp,
@@ -818,27 +822,8 @@
btn->type |= WIDGET_GROUP | WIDGET_GROUP_MENU;
me->button = btn;
- if(xitk_get_menu_shortcuts_enability() && me->menu_entry->shortcut) {
- int swidth, max;
- char buf[2048];
-
- fs = xitk_font_load_font(private_data->imlibdata->x.disp, DEFAULT_BOLD_FONT_12);
- xitk_font_set_font(fs, private_data->widget->wl->gc);
-
- max = xitk_font_get_string_length(fs, maxnode->menu_entry->menu) + 15;
-
- sprintf(buf, "%s ", me->menu_entry->menu);
- swidth = xitk_font_get_string_length(fs, buf);
-
- while(swidth <= max) {
- sprintf(buf, "%s%c", buf, ' ');
- swidth = xitk_font_get_string_length(fs, buf);
- }
-
- sprintf(buf, "%s%s", buf, me->menu_entry->shortcut);
- xitk_labelbutton_change_label(btn, buf);
- xitk_font_unload_font(fs);
- }
+ if(xitk_get_menu_shortcuts_enability() && me->menu_entry->shortcut)
+ xitk_labelbutton_change_shortcut_label(btn, me->menu_entry->shortcut, shortcutpos);
wimage = xitk_get_widget_foreground_skin(btn);
if(wimage) {
Index: mrlbrowser.c
===================================================================
RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/mrlbrowser.c,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -r1.77 -r1.78
--- mrlbrowser.c 22 Mar 2004 00:28:27 -0000 1.77
+++ mrlbrowser.c 30 Mar 2004 22:41:39 -0000 1.78
@@ -374,7 +374,7 @@
update_current_origin(private_data);
mrlbrowser_create_enlighted_entries(private_data);
xitk_browser_update_list(private_data->mrlb_list,
- (const char* const*)private_data->mc->mrls_disp,
+ (const char* const*)private_data->mc->mrls_disp, NULL,
private_data->mc->mrls_to_disp, 0);
}
}
@@ -837,7 +837,7 @@
update_current_origin(private_data);
mrlbrowser_create_enlighted_entries(private_data);
xitk_browser_update_list(private_data->mrlb_list,
- (const char* const*)private_data->mc->mrls_disp,
+ (const char* const*)private_data->mc->mrls_disp, NULL,
private_data->mc->mrls_to_disp, 0);
}
@@ -911,7 +911,7 @@
private_data->filter_selected = select;
mrlbrowser_create_enlighted_entries(private_data);
xitk_browser_update_list(private_data->mrlb_list,
- (const char* const*) private_data->mc->mrls_disp,
+ (const char* const*) private_data->mc->mrls_disp, NULL,
private_data->mc->mrls_to_disp, 0);
}
@@ -1317,7 +1317,7 @@
mywidget->tips_string = NULL;
xitk_browser_update_list(private_data->mrlb_list,
- (const char* const*)private_data->mc->mrls_disp,
+ (const char* const*)private_data->mc->mrls_disp, NULL,
private_data->mrls_num, 0);
XLOCK (mb->imlibdata->x.disp);
Index: test.c
===================================================================
RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/test.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -r1.49 -r1.50
--- test.c 26 Mar 2004 22:16:26 -0000 1.49
+++ test.c 30 Mar 2004 22:41:39 -0000 1.50
@@ -845,7 +845,7 @@
xitk_enable_and_show_widget(test->browser);
xitk_browser_update_list(test->browser,
- (const char *const *)test->entries, test->num_entries, 0);
+ (const char *const *)test->entries, NULL, test->num_entries, 0);
}
Index: xitk.h
===================================================================
RCS file: /cvsroot/xine/xine-ui/src/xitk/xine-toolkit/xitk.h,v
retrieving revision 1.117
retrieving revision 1.118
diff -u -r1.117 -r1.118
--- xitk.h 26 Mar 2004 22:16:26 -0000 1.117
+++ xitk.h 30 Mar 2004 22:41:39 -0000 1.118
@@ -1189,11 +1189,13 @@
* Change label of button 'widget'.
*/
int xitk_labelbutton_change_label(xitk_widget_t *, char *);
+int xitk_labelbutton_change_shortcut_label(xitk_widget_t *, char *, int);
/**
* Return label of button 'widget'.
*/
char *xitk_labelbutton_get_label(xitk_widget_t *);
+char *xitk_labelbutton_get_shortcut_label(xitk_widget_t *);
/**
* Get state of button 'widget'.
@@ -1362,7 +1364,7 @@
/**
* Update the list, and rebuild button list
*/
-void xitk_browser_update_list(xitk_widget_t *w, const char *const *list, int len, \
int start); +void xitk_browser_update_list(xitk_widget_t *w, const char *const *list, \
const char *const *shortcut, int len, int start);
/**
* slide up.
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click
_______________________________________________
Xine-cvslog mailing list
Xine-cvslog@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xine-cvslog
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic