X11: Allow bold attribute for menucolors
This commit is contained in:
@@ -220,7 +220,7 @@ Qt: add Qt5 specific hints file for linux and Mac OS X (Ray Chason)
|
|||||||
Qt: enable compiling Qt5 on Windows (Ray Chason)
|
Qt: enable compiling Qt5 on Windows (Ray Chason)
|
||||||
Qt: entering extended commands, hide non-matching ones
|
Qt: entering extended commands, hide non-matching ones
|
||||||
Qt: remember tile and font size
|
Qt: remember tile and font size
|
||||||
X11: implement menucolors and allow menus to obey inverse attribute
|
X11: implement menucolors and allow menus to obey some attributes
|
||||||
X11: make key translations work with menus on Linux
|
X11: make key translations work with menus on Linux
|
||||||
X11: allow mouse wheel scrolling to work in menus by default
|
X11: allow mouse wheel scrolling to work in menus by default
|
||||||
X11: handle paged menu control keys
|
X11: handle paged menu control keys
|
||||||
|
|||||||
@@ -157,6 +157,8 @@ struct menu_info_t {
|
|||||||
XColor nh_colors[CLR_MAX];
|
XColor nh_colors[CLR_MAX];
|
||||||
|
|
||||||
XFontStruct *fs; /* Font for the window. */
|
XFontStruct *fs; /* Font for the window. */
|
||||||
|
XFontStruct *boldfs; /* Bold font */
|
||||||
|
Display *boldfs_dpy;
|
||||||
long menu_count; /* number entered by user */
|
long menu_count; /* number entered by user */
|
||||||
Dimension line_height; /* Total height of a line of text. */
|
Dimension line_height; /* Total height of a line of text. */
|
||||||
Dimension internal_height; /* Internal height between widget & border */
|
Dimension internal_height; /* Internal height between widget & border */
|
||||||
@@ -297,6 +299,7 @@ E void FDECL(positionpopup, (Widget, BOOLEAN_P));
|
|||||||
E struct xwindow *FDECL(find_widget, (Widget));
|
E struct xwindow *FDECL(find_widget, (Widget));
|
||||||
E Boolean FDECL(nhApproxColor, (Screen *, Colormap, char *, XColor *));
|
E Boolean FDECL(nhApproxColor, (Screen *, Colormap, char *, XColor *));
|
||||||
E void FDECL(get_widget_window_geometry, (Widget, int *, int *, int *, int *));
|
E void FDECL(get_widget_window_geometry, (Widget, int *, int *, int *, int *));
|
||||||
|
E char *FDECL(fontname_boldify, (const char *));
|
||||||
E Dimension FDECL(nhFontHeight, (Widget));
|
E Dimension FDECL(nhFontHeight, (Widget));
|
||||||
E char FDECL(key_event_to_char, (XKeyEvent *));
|
E char FDECL(key_event_to_char, (XKeyEvent *));
|
||||||
E void FDECL(msgkey, (Widget, XtPointer, XEvent *));
|
E void FDECL(msgkey, (Widget, XtPointer, XEvent *));
|
||||||
|
|||||||
@@ -484,6 +484,34 @@ int *x, *y, *width, *height;
|
|||||||
*y -= top;
|
*y -= top;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Change the full font name string so the weight is "bold" */
|
||||||
|
char *
|
||||||
|
fontname_boldify(fontname)
|
||||||
|
const char *fontname;
|
||||||
|
{
|
||||||
|
static char buf[BUFSZ];
|
||||||
|
char *bufp = buf;
|
||||||
|
int idx = 0;
|
||||||
|
|
||||||
|
while (*fontname) {
|
||||||
|
if (*fontname == '-')
|
||||||
|
idx++;
|
||||||
|
*bufp = *fontname;
|
||||||
|
if (idx == 3) {
|
||||||
|
strcat(buf, "bold");
|
||||||
|
bufp += 5;
|
||||||
|
do {
|
||||||
|
fontname++;
|
||||||
|
} while (*fontname && *fontname != '-');
|
||||||
|
} else {
|
||||||
|
bufp++;
|
||||||
|
fontname++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*bufp = '\0';
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef TEXTCOLOR
|
#ifdef TEXTCOLOR
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -778,6 +778,31 @@ Widget form,under;
|
|||||||
return all;
|
return all;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
load_boldfont(wp, w)
|
||||||
|
struct xwindow *wp;
|
||||||
|
Widget w;
|
||||||
|
{
|
||||||
|
Arg args[1];
|
||||||
|
XFontStruct *fs;
|
||||||
|
unsigned long ret;
|
||||||
|
char *fontname;
|
||||||
|
Display *dpy;
|
||||||
|
|
||||||
|
if (wp->menu_information->boldfs)
|
||||||
|
return;
|
||||||
|
|
||||||
|
XtSetArg(args[0], nhStr(XtNfont), &fs);
|
||||||
|
XtGetValues(w, args, 1);
|
||||||
|
|
||||||
|
if (!XGetFontProperty(fs, XA_FONT, &ret))
|
||||||
|
return;
|
||||||
|
|
||||||
|
wp->menu_information->boldfs_dpy = dpy = XtDisplay(w);
|
||||||
|
fontname = fontname_boldify(XGetAtomName(dpy, (Atom)ret));
|
||||||
|
wp->menu_information->boldfs = XLoadQueryFont(dpy, fontname);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
menu_create_entries(wp, curr_menu)
|
menu_create_entries(wp, curr_menu)
|
||||||
struct xwindow *wp;
|
struct xwindow *wp;
|
||||||
@@ -843,6 +868,13 @@ struct menu *curr_menu;
|
|||||||
: labelWidgetClass,
|
: labelWidgetClass,
|
||||||
wp->w, args, num_args);
|
wp->w, args, num_args);
|
||||||
|
|
||||||
|
if (attr == ATR_BOLD) {
|
||||||
|
load_boldfont(wp, curr->w);
|
||||||
|
num_args = 0;
|
||||||
|
XtSetArg(args[num_args], nhStr(XtNfont), wp->menu_information->boldfs); num_args++;
|
||||||
|
XtSetValues(curr->w, args, num_args);
|
||||||
|
}
|
||||||
|
|
||||||
if (canpick)
|
if (canpick)
|
||||||
XtAddCallback(linewidget, XtNcallback, menu_select,
|
XtAddCallback(linewidget, XtNcallback, menu_select,
|
||||||
(XtPointer) curr);
|
(XtPointer) curr);
|
||||||
@@ -1285,6 +1317,8 @@ destroy_menu_window(wp)
|
|||||||
struct xwindow *wp;
|
struct xwindow *wp;
|
||||||
{
|
{
|
||||||
clear_old_menu(wp); /* this will also destroy the widgets */
|
clear_old_menu(wp); /* this will also destroy the widgets */
|
||||||
|
if (wp->menu_information->boldfs)
|
||||||
|
XFreeFont(wp->menu_information->boldfs_dpy, wp->menu_information->boldfs);
|
||||||
free((genericptr_t) wp->menu_information);
|
free((genericptr_t) wp->menu_information);
|
||||||
wp->menu_information = (struct menu_info_t *) 0;
|
wp->menu_information = (struct menu_info_t *) 0;
|
||||||
wp->type = NHW_NONE; /* allow re-use */
|
wp->type = NHW_NONE; /* allow re-use */
|
||||||
|
|||||||
Reference in New Issue
Block a user