Mercurial > emacs
changeset 61209:0769f2fae9d0
* xlwmenu.c (string_width):
(MENU_FONT_HEIGHT, MENU_FONT_ASCENT): Ditto.
(display_menu_item, make_drawing_gcs, XlwMenuInitialize)
(XlwMenuSetValues): Use font if fontSet is NULL, use only
font for !HAVE_X_I18N.
(xlwMenuResources): Add fontSet resource.
author | Jan Djärv <jan.h.d@swipnet.se> |
---|---|
date | Fri, 01 Apr 2005 18:42:19 +0000 |
parents | ea3f847d73b1 |
children | 0eb69e12c16d |
files | lwlib/xlwmenu.c |
diffstat | 1 files changed, 58 insertions(+), 74 deletions(-) [+] |
line wrap: on
line diff
--- a/lwlib/xlwmenu.c Fri Apr 01 18:18:25 2005 +0000 +++ b/lwlib/xlwmenu.c Fri Apr 01 18:42:19 2005 +0000 @@ -131,20 +131,16 @@ /* FIXME: F10 should enter the menu, the first one in the menu-bar. */ -/* FIXME: HAVE_X_I18N does not work yet. */ -#undef HAVE_X_I18N - #define offset(field) XtOffset(XlwMenuWidget, field) static XtResource xlwMenuResources[] = { #ifdef HAVE_X_I18N - {XtNfont, XtCFont, XtRFontSet, sizeof(XFontSet), - offset(menu.font), XtRString, "XtDefaultFontSet"}, -#else + {XtNfontSet, XtCFontSet, XtRFontSet, sizeof(XFontSet), + offset(menu.fontSet), XtRFontSet, NULL}, +#endif {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *), offset(menu.font), XtRString, "XtDefaultFont"}, -#endif {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), offset(menu.foreground), XtRString, "XtDefaultForeground"}, {XtNdisabledForeground, XtCDisabledForeground, XtRPixel, sizeof(Pixel), @@ -361,24 +357,31 @@ XlwMenuWidget mw; char *s; { + XCharStruct xcs; + int drop; #ifdef HAVE_X_I18N XRectangle ink, logical; - XmbTextExtents (mw->menu.font, s, strlen (s), &ink, &logical); - return logical.width; -#else - XCharStruct xcs; - int drop; + if (mw->menu.fontSet) + { + XmbTextExtents (mw->menu.fontSet, s, strlen (s), &ink, &logical); + return logical.width; + } +#endif XTextExtents (mw->menu.font, s, strlen (s), &drop, &drop, &drop, &xcs); return xcs.width; -#endif + } #ifdef HAVE_X_I18N #define MENU_FONT_HEIGHT(mw) \ - ((mw)->menu.font_extents->max_logical_extent.height) + ((mw)->menu.fontSet != NULL \ + ? (mw)->menu.font_extents->max_logical_extent.height \ + : (mw)->menu.font->ascent + (mw)->menu.font->descent) #define MENU_FONT_ASCENT(mw) \ - (- (mw)->menu.font_extents->max_logical_extent.y) + ((mw)->menu.fontSet != NULL \ + ? - (mw)->menu.font_extents->max_logical_extent.y \ + : (mw)->menu.font->ascent) #else #define MENU_FONT_HEIGHT(mw) \ ((mw)->menu.font->ascent + (mw)->menu.font->descent) @@ -1053,10 +1056,14 @@ #ifdef HAVE_X_I18N - XmbDrawString (XtDisplay (mw), ws->window, mw->menu.font, -#else + if (mw->menu.fontSet) + XmbDrawString (XtDisplay (mw), ws->window, mw->menu.fontSet, + text_gc, x_offset, + y + v_spacing + shadow + font_ascent, + display_string, strlen (display_string)); + else +#endif XDrawString (XtDisplay (mw), ws->window, -#endif text_gc, x_offset, y + v_spacing + shadow + font_ascent, display_string, strlen (display_string)); @@ -1083,10 +1090,16 @@ else if (val->key) { #ifdef HAVE_X_I18N - XmbDrawString (XtDisplay (mw), ws->window, mw->menu.font, -#else + if (mw->menu.fontSet) + XmbDrawString (XtDisplay (mw), ws->window, + mw->menu.fontSet, + text_gc, + x + label_width + mw->menu.arrow_spacing, + y + v_spacing + shadow + font_ascent, + val->key, strlen (val->key)); + else +#endif XDrawString (XtDisplay (mw), ws->window, -#endif text_gc, x + label_width + mw->menu.arrow_spacing, y + v_spacing + shadow + font_ascent, @@ -1493,34 +1506,25 @@ { XGCValues xgcv; float scale; + XtGCMask mask = GCForeground | GCBackground; -#ifndef HAVE_X_I18N +#ifdef HAVE_X_I18N + if (!mw->menu.fontSet) + { + xgcv.font = mw->menu.font->fid; + mask |= GCFont; + } +#else xgcv.font = mw->menu.font->fid; + mask |= GCFont; #endif xgcv.foreground = mw->menu.foreground; xgcv.background = mw->core.background_pixel; - mw->menu.foreground_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground, - &xgcv); + mw->menu.foreground_gc = XtGetGC ((Widget)mw, mask, &xgcv); -#ifndef HAVE_X_I18N - xgcv.font = mw->menu.font->fid; -#endif xgcv.foreground = mw->menu.button_foreground; - xgcv.background = mw->core.background_pixel; - mw->menu.button_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground, - &xgcv); + mw->menu.button_gc = XtGetGC ((Widget)mw, mask, &xgcv); -#ifndef HAVE_X_I18N - xgcv.font = mw->menu.font->fid; -#endif xgcv.background = mw->core.background_pixel; #define BRIGHTNESS(color) (((color) & 0xff) + (((color) >> 8) & 0xff) + (((color) >> 16) & 0xff)) @@ -1545,49 +1549,26 @@ xgcv.foreground = mw->menu.foreground; xgcv.fill_style = FillStippled; xgcv.stipple = mw->menu.gray_pixmap; - mw->menu.disabled_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground + mw->menu.disabled_gc = XtGetGC ((Widget)mw, mask | GCFillStyle | GCStipple, &xgcv); } else { /* Many colors available, use disabled pixel. */ xgcv.foreground = mw->menu.disabled_foreground; - mw->menu.disabled_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground, &xgcv); + mw->menu.disabled_gc = XtGetGC ((Widget)mw, mask, &xgcv); } -#ifndef HAVE_X_I18N - xgcv.font = mw->menu.font->fid; -#endif xgcv.foreground = mw->menu.button_foreground; xgcv.background = mw->core.background_pixel; xgcv.fill_style = FillStippled; xgcv.stipple = mw->menu.gray_pixmap; - mw->menu.inactive_button_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground + mw->menu.inactive_button_gc = XtGetGC ((Widget)mw, mask | GCFillStyle | GCStipple, &xgcv); -#ifndef HAVE_X_I18N - xgcv.font = mw->menu.font->fid; -#endif xgcv.foreground = mw->core.background_pixel; xgcv.background = mw->menu.foreground; - mw->menu.background_gc = XtGetGC ((Widget)mw, -#ifndef HAVE_X_I18N - GCFont | -#endif - GCForeground | GCBackground, - &xgcv); + mw->menu.background_gc = XtGetGC ((Widget)mw, mask, &xgcv); } static void @@ -1793,14 +1774,14 @@ gray_bitmap_width, gray_bitmap_height, (unsigned long)1, (unsigned long)0, 1); -#ifndef HAVE_X_I18N /* I don't understand why this ends up 0 sometimes, but it does. This kludge works around it. Can anyone find a real fix? -- rms. */ if (mw->menu.font == 0) mw->menu.font = xlwmenu_default_font; -#else - mw->menu.font_extents = XExtentsOfFontSet (mw->menu.font); +#ifdef HAVE_X_I18N + if (mw->menu.fontSet) + mw->menu.font_extents = XExtentsOfFontSet (mw->menu.fontSet); #endif make_drawing_gcs (mw); @@ -1969,7 +1950,10 @@ if (newmw->core.background_pixel != oldmw->core.background_pixel || newmw->menu.foreground != oldmw->menu.foreground -#ifndef HAVE_X_I18N +#ifdef HAVE_X_I18N + || newmw->menu.fontSet != oldmw->menu.fontSet + || (newmw->menu.fontSet == NULL && newmw->menu.font != oldmw->menu.font) +#else || newmw->menu.font != oldmw->menu.font #endif ) @@ -1999,10 +1983,10 @@ } #ifdef HAVE_X_I18N - if (newmw->menu.font != oldmw->menu.font) + if (newmw->menu.fontSet != oldmw->menu.fontSet && newmw->menu.fontSet != NULL) { redisplay = True; - newmw->menu.font_extents = XExtentsOfFontSet (newmw->menu.font); + newmw->menu.font_extents = XExtentsOfFontSet (newmw->menu.fontSet); } #endif