diff --git a/ChangeLog b/ChangeLog index 89ab61b7..8ed04745 100644 --- a/ChangeLog +++ b/ChangeLog @@ -123,9 +123,6 @@ Changes since version 0.80.2: appicon when a KDE3 application opens a config panel. - Updated slovak translation (Jan Tomka ) - Added xdnd v3 support in WINGs (Sylvain Reynal ) -- Check whether libXft is at least version 2.1.2 else refuse to compile. -- Fixed bug in icon chooser dialog that could cause a segmentation fault - in some cases (Pascal Hofstee ) Changes since version 0.80.1: diff --git a/WINGs/Extras/Makefile.am b/WINGs/Extras/Makefile.am index 63119aec..c3a693f8 100644 --- a/WINGs/Extras/Makefile.am +++ b/WINGs/Extras/Makefile.am @@ -22,7 +22,6 @@ libExtraWINGs_a_SOURCES = \ wtableview.h \ wtabledelegates.h -AM_CFLAGS = -fno-strict-aliasing INCLUDES = -I$(top_srcdir)/wrlib -I$(top_srcdir)/WINGs \ -DRESOURCE_PATH=\"$(datadir)/WINGs\" @HEADER_SEARCH_PATH@ -DDEBUG diff --git a/WINGs/Makefile.am b/WINGs/Makefile.am index 3ff80d6e..9df6a54d 100644 --- a/WINGs/Makefile.am +++ b/WINGs/Makefile.am @@ -108,9 +108,7 @@ libWUtil_a_SOURCES = \ wutil.c -AM_CPPFLAGS = -DLOCALEDIR=\"$(NLSDIR)\" - -AM_CFLAGS = -fno-strict-aliasing +AM_CPPFLAGS = @CPPFLAGS@ -DLOCALEDIR=\"$(NLSDIR)\" INCLUDES = -I$(top_srcdir)/WINGs/WINGs -I$(top_srcdir)/wrlib -I$(top_srcdir)/src \ -DRESOURCE_PATH=\"$(datadir)/WINGs\" @XFTFLAGS@ @HEADER_SEARCH_PATH@ -DDEBUG diff --git a/WINGs/Tests/wtest.c b/WINGs/Tests/wtest.c index 88aa52a9..d180a6a9 100644 --- a/WINGs/Tests/wtest.c +++ b/WINGs/Tests/wtest.c @@ -116,14 +116,14 @@ testFrame(WMScreen *scr) } -/*static void +static void resizedWindow(void *self, WMNotification *notif) { WMView *view = (WMView*)WMGetNotificationObject(notif); WMSize size = WMGetViewSize(view); WMResizeWidget((WMWidget*)self, size.width, size.height); -}*/ +} void testBox(WMScreen *scr) @@ -609,8 +609,7 @@ testText(WMScreen *scr) WMFont *font, *ifont; font = WMDefaultSystemFont(scr); - //ifont = WMCopyFontWithStyle(scr, font, WFSEmphasized); - ifont = WMCreateFont(scr, "verdana,sans:pixelsize=12:italic"); + ifont = WMCopyFontWithStyle(scr, font, WFSEmphasized); if (ifont) { WMSetTextDefaultFont(text, ifont); WMReleaseFont(ifont); @@ -620,7 +619,7 @@ testText(WMScreen *scr) WMReleaseFont(font); } - if (file) { + if(file) { char buf[1024]; WMFreezeText(text); diff --git a/WINGs/WINGs/WINGs.h b/WINGs/WINGs/WINGs.h index d08936b9..f3805b04 100644 --- a/WINGs/WINGs/WINGs.h +++ b/WINGs/WINGs/WINGs.h @@ -1834,11 +1834,12 @@ void WMShowFontPanel(WMFontPanel *panel); void WMHideFontPanel(WMFontPanel *panel); -void WMFreeFontPanel(WMFontPanel *panel); - void WMSetFontPanelAction(WMFontPanel *panel, WMAction2 *action, void *data); -void WMSetFontPanelFont(WMFontPanel *panel, char *fontName); +void WMSetFontPanelFont(WMFontPanel *panel, WMFont *font); + +/* you can free the returned string */ +char* WMGetFontPanelFontName(WMFontPanel *panel); WMFont* WMGetFontPanelFont(WMFontPanel *panel); diff --git a/WINGs/WINGs/WINGsP.h b/WINGs/WINGs/WINGsP.h index 673e9c54..7f42ed60 100644 --- a/WINGs/WINGs/WINGsP.h +++ b/WINGs/WINGs/WINGsP.h @@ -22,14 +22,19 @@ extern "C" { #endif /* __cplusplus */ +#define DOUBLE_BUFFER + -#define DOUBLE_BUFFER 1 #define WC_UserWidget 128 -#define SCROLLER_WIDTH 20 -#define XDND_VERSION 4 + +#define SCROLLER_WIDTH 20 + + + +#define XDND_VERSION 4 typedef struct W_Application { diff --git a/WINGs/configuration.c b/WINGs/configuration.c index 7d8d0c15..0baf60bf 100644 --- a/WINGs/configuration.c +++ b/WINGs/configuration.c @@ -14,6 +14,10 @@ _WINGsConfiguration WINGsConfiguration; #define BOLD_SYSTEM_FONT "-*-helvetica-bold-r-normal-*-%d-*-*-*-*-*-*-*,-*-*-bold-r-*-*-%d-*-*-*-*-*-*-*" +#define XFTSYSTEM_FONT "-*-arial-medium-r-normal-*-%d-*-*-*-*-*-*-*" + +#define XFTBOLD_SYSTEM_FONT "-*-arial-bold-r-normal-*-%d-*-*-*-*-*-*-*" + #define FLOPPY_PATH "/floppy" @@ -41,7 +45,6 @@ getButtonWithName(const char *name, unsigned defaultButton) } -// fix this static Bool missingOrInvalidXLFD(char *xlfd) { diff --git a/WINGs/dragcommon.c b/WINGs/dragcommon.c index c877d2a4..77053783 100644 --- a/WINGs/dragcommon.c +++ b/WINGs/dragcommon.c @@ -193,15 +193,14 @@ W_HandleDNDClientMessage(WMView *toplevel, XClientMessageEvent *event) WMDraggingInfo *info = &scr->dragInfo; Atom messageType = event->message_type; -#ifdef XDND_DEBUG - { - char* msgTypeName = XGetAtomName(scr->display, messageType); + char* msgTypeName = XGetAtomName(scr->display, messageType); - if (msgTypeName != NULL) - printf("event type = %s\n", msgTypeName); - else - printf("pb with event type !\n"); - } +#ifdef XDND_DEBUG + + if (msgTypeName != NULL) + printf("event type = %s\n", msgTypeName); + else + printf("pb with event type !\n"); #endif diff --git a/WINGs/dragdestination.c b/WINGs/dragdestination.c index 03dcd9bd..e982dacf 100644 --- a/WINGs/dragdestination.c +++ b/WINGs/dragdestination.c @@ -79,7 +79,7 @@ createDropDataArray(WMArray *requiredTypes) static WMArray* getTypesFromTypeList(WMScreen *scr, Window sourceWin) { - /* // WMDraggingInfo *info = &scr->dragInfo;*/ + WMDraggingInfo *info = &scr->dragInfo; Atom dataType; Atom* typeAtomList; WMArray* typeList; @@ -365,6 +365,7 @@ W_DragDestinationStoreEnterMsgInfo(WMDraggingInfo *info, WMView *toplevel, XClientMessageEvent *event) { WMScreen *scr = W_VIEW_SCREEN(toplevel); + int i,j, typesCount; if (XDND_DEST_INFO(info) == NULL) initDestinationDragInfo(info); @@ -608,7 +609,7 @@ static void sendAllowedAction(WMView *destView, Atom action) { WMScreen *scr = W_VIEW_SCREEN(destView); - /* // WMPoint destPos = WMGetViewScreenPosition(destView); */ + WMPoint destPos = WMGetViewScreenPosition(destView); WMSize destSize = WMGetViewSize(destView); int destX, destY; Window foo; diff --git a/WINGs/dragsource.c b/WINGs/dragsource.c index 3b26499c..b08ee783 100644 --- a/WINGs/dragsource.c +++ b/WINGs/dragsource.c @@ -425,8 +425,6 @@ sendEnterMessage(WMDraggingInfo *info) } -// this functon doesn't return something in all cases. -// control reaches end of non-void function. fix this -Dan static Bool sendPositionMessage(WMDraggingInfo *info, WMPoint *mousePos) { @@ -742,6 +740,7 @@ isXdndAware(WMScreen *scr, Window win) int format; unsigned long count, remain; unsigned char *winXdndVersion; + unsigned char *proxy; if (win == None) return False; @@ -877,7 +876,7 @@ initMotionProcess(WMView *view, WMDraggingInfo *info, static void processMotion(WMDraggingInfo *info, Window windowUnderDrag, WMPoint *mousePos) { - /* // WMScreen *scr = sourceScreen(info); */ + WMScreen *scr = sourceScreen(info); Window newDestination = findDestination(info, mousePos); W_DragSourceStopTimer(); @@ -1059,7 +1058,6 @@ traceStatusMsg(Display *dpy, XClientMessageEvent *statusEvent) #endif -static void storeDropAction(WMDraggingInfo *info, Atom destAction) { WMView* sourceView = XDND_SOURCE_VIEW(info); diff --git a/WINGs/python/WINGs.py b/WINGs/python/WINGs.py index dbdccde2..3d008316 100644 --- a/WINGs/python/WINGs.py +++ b/WINGs/python/WINGs.py @@ -26,11 +26,10 @@ class WMTimer: self._o = wings.pyWMAddPersistentTimerHandler(milliseconds, (callback, cdata)) else: self._o = wings.pyWMAddTimerHandler(milliseconds, (callback, cdata)) - self.__WMDeleteTimerHandler = wings.pyWMDeleteTimerHandler def __del__(self): - self.__WMDeleteTimerHandler(self._o) - + wings.pyWMDeleteTimerHandler(self._o) + #delete = __del__ class WMPersistentTimer(WMTimer): def __init__(self, milliseconds, callback, cdata=None): @@ -88,15 +87,14 @@ class WMView: class WMWidget(WMView): def __init__(self): + self._o = None if self.__class__ == WMWidget: raise Error, "a WMWidget can't be instantiated directly" - self._o = None - self.__WMDestroyWidget = wings.WMDestroyWidget def __del__(self): - if self._o is not None: - self.__WMDestroyWidget(self._o) - + if (self._o != None): + wings.WMDestroyWidget(self._o) + def resize(self, width, height): wings.WMResizeWidget(self._o, width, height) diff --git a/WINGs/wevent.c b/WINGs/wevent.c index f1a62a38..28cd4e0e 100644 --- a/WINGs/wevent.c +++ b/WINGs/wevent.c @@ -66,8 +66,8 @@ static WMEventHook *extraEventHandler=NULL; * */ void -WMCreateEventHandler(WMView *view, unsigned long mask, WMEventProc *eventProc, - void *clientData) + WMCreateEventHandler(WMView *view, unsigned long mask, WMEventProc *eventProc, + void *clientData) { W_EventHandler *hPtr; WMArrayIterator iter; diff --git a/WINGs/wfont.c b/WINGs/wfont.c index 3e866901..6acc278d 100644 --- a/WINGs/wfont.c +++ b/WINGs/wfont.c @@ -2,20 +2,13 @@ #include "wconfig.h" #ifdef XFT - -#include -#include - -#if defined(HAVE_MBSNRTOWCS) -# define __USE_GNU +# include +# ifdef HAVE_WCHAR_H +# include +# endif +# include #endif -#ifdef HAVE_WCHAR_H -# include -#endif - -#include - #include "WINGsP.h" #include @@ -23,6 +16,7 @@ #include +#ifdef XFT #if defined(HAVE_MBSNRTOWCS) @@ -144,52 +138,19 @@ wmbsnrtowcs(wchar_t *dest, const char **src, size_t nbytes, size_t len) #endif -#define DEFAULT_SIZE 12 - -static char* -fixXLFD(char *xlfd, int size) -{ - char *fname, *ptr; - - fname = wmalloc(strlen(xlfd) + 20); - if (strstr(xlfd, "%d")!=NULL) - sprintf(fname, xlfd, size ? size : DEFAULT_SIZE); - else - strcpy(fname, xlfd); - - if ((ptr = strchr(fname, ','))) { - *ptr = 0; - } - - return fname; -} - - static Bool -hasProperty(FcPattern *pattern, const char *property) +alreadyHasStringValue(XftPattern *pattern, const char *object, char *value) { - FcValue val; - - if (FcPatternGet(pattern, property, 0, &val)==FcResultMatch) { - return True; - } - - return False; -} - - -static Bool -hasPropertyWithStringValue(FcPattern *pattern, const char *object, char *value) -{ - FcChar8 *str; + XftResult r; + char *s; int id; if (!value || value[0]==0) return True; id = 0; - while (FcPatternGetString(pattern, object, id, &str)==FcResultMatch) { - if (strcasecmp(value, (char*)str) == 0) { + while ((r=XftPatternGetString(pattern, object, id, &s))==XftResultMatch) { + if (strcasecmp(value, s) == 0) { return True; } id++; @@ -199,6 +160,7 @@ hasPropertyWithStringValue(FcPattern *pattern, const char *object, char *value) } +// check if to add a fallback size too. -Dan // also handle an xlfd with %d for size? static char* makeFontOfSize(char *font, int size, char *fallback) @@ -206,27 +168,14 @@ makeFontOfSize(char *font, int size, char *fallback) FcPattern *pattern; char *result; - if (font[0]=='-') { - char *fname; + pattern = XftNameParse(font); + XftPatternDel(pattern, "pixelsize"); + XftPatternAddDouble(pattern, "pixelsize", (double)size); - fname = fixXLFD(font, size); - pattern = XftXlfdParse(fname, False, False); - wfree(fname); - } else { - pattern = FcNameParse(font); - } - - //FcPatternPrint(pattern); - if (size > 0) { - FcPatternDel(pattern, "pixelsize"); - FcPatternAddDouble(pattern, "pixelsize", (double)size); - } else if (size==0 && !hasProperty(pattern, "size") && - !hasProperty(pattern, "pixelsize")) { - FcPatternAddDouble(pattern, "pixelsize", (double)DEFAULT_SIZE); - } - - if (fallback && !hasPropertyWithStringValue(pattern, "family", fallback)) { - FcPatternAddString(pattern, "family", fallback); + if (fallback) { + if (!alreadyHasStringValue(pattern, "family", fallback)) { + XftPatternAddString(pattern, "family", fallback); + } } result = FcNameUnparse(pattern); @@ -428,9 +377,6 @@ WMWidthOfString(WMFont *font, char *text, int length) extents.xOff = 0; } wfree(wtext); - } else if (font->screen->useMultiByte) { - XftTextExtentsUtf8(font->screen->display, font->font, - (XftChar8 *)text, length, &extents); } else { XftTextExtents8(font->screen->display, font->font, (XftChar8 *)text, length, &extents); @@ -478,9 +424,6 @@ WMDrawString(WMScreen *scr, Drawable d, WMColor *color, WMFont *font, x, y + font->y, (XftChar8*)text, length);*/ } wfree(wtext); - } else if (font->screen->useMultiByte) { - XftDrawStringUtf8(scr->xftdraw, &xftcolor, font->font, - x, y + font->y, (XftChar8*)text, length); } else { XftDrawString8(scr->xftdraw, &xftcolor, font->font, x, y + font->y, (XftChar8*)text, length); @@ -536,9 +479,6 @@ WMDrawImageString(WMScreen *scr, Drawable d, WMColor *color, WMColor *background x, y + font->y, (XftChar8*)text, length);*/ } wfree(wtext); - } else if (font->screen->useMultiByte) { - XftDrawStringUtf8(scr->xftdraw, &textColor, font->font, - x, y + font->y, (XftChar8*)text, length); } else { XftDrawString8(scr->xftdraw, &textColor, font->font, x, y + font->y, (XftChar8*)text, length); @@ -556,30 +496,29 @@ WMCopyFontWithStyle(WMScreen *scrPtr, WMFont *font, WMFontStyle style) if (!font) return NULL; - pattern = FcNameParse(WMGetFontName(font)); + pattern = XftNameParse(WMGetFontName(font)); switch (style) { case WFSNormal: - FcPatternDel(pattern, "weight"); - FcPatternDel(pattern, "slant"); - FcPatternAddString(pattern, "weight", "regular"); - FcPatternAddString(pattern, "weight", "medium"); - FcPatternAddString(pattern, "slant", "roman"); + XftPatternDel(pattern, "weight"); + XftPatternDel(pattern, "slant"); + XftPatternAddString(pattern, "weight", "medium"); + XftPatternAddString(pattern, "slant", "roman"); break; case WFSBold: - FcPatternDel(pattern, "weight"); - FcPatternAddString(pattern, "weight", "bold"); + XftPatternDel(pattern, "weight"); + XftPatternAddString(pattern, "weight", "bold"); break; case WFSEmphasized: - FcPatternDel(pattern, "slant"); - FcPatternAddString(pattern, "slant", "italic"); - FcPatternAddString(pattern, "slant", "oblique"); + XftPatternDel(pattern, "slant"); + XftPatternAddString(pattern, "slant", "italic"); + XftPatternAddString(pattern, "slant", "oblique"); break; case WFSBoldEmphasized: - FcPatternDel(pattern, "weight"); - FcPatternDel(pattern, "slant"); - FcPatternAddString(pattern, "weight", "bold"); - FcPatternAddString(pattern, "slant", "italic"); - FcPatternAddString(pattern, "slant", "oblique"); + XftPatternDel(pattern, "weight"); + XftPatternDel(pattern, "slant"); + XftPatternAddString(pattern, "weight", "bold"); + XftPatternAddString(pattern, "slant", "italic"); + XftPatternAddString(pattern, "slant", "oblique"); break; } @@ -592,6 +531,1131 @@ WMCopyFontWithStyle(WMScreen *scrPtr, WMFont *font, WMFontStyle style) } -#endif /* XFT */ +#else /* No XFT support */ + + +static char *makeFontSetOfSize(char *fontset, int size); + + + +/* XLFD pattern matching */ +static char* +getElementFromXLFD(const char *xlfd, int index) +{ + const char *p = xlfd; + while (*p != 0) { + if (*p == '-' && --index == 0) { + const char *end = strchr(p + 1, '-'); + char *buf; + size_t len; + if (end == 0) end = p + strlen(p); + len = end - (p + 1); + buf = wmalloc(len); + memcpy(buf, p + 1, len); + buf[len] = 0; + return buf; + } + p++; + } + return strdup("*"); +} + + +/* XLFD pattern matching */ +static char* +generalizeXLFD(const char *xlfd) +{ + char *buf; + int len; + char *weight = getElementFromXLFD(xlfd, 3); + char *slant = getElementFromXLFD(xlfd, 4); + char *pxlsz = getElementFromXLFD(xlfd, 7); + +#define Xstrlen(A) ((A)?strlen(A):0) + len = Xstrlen(xlfd)+Xstrlen(weight)+Xstrlen(slant)+Xstrlen(pxlsz)*2+60; +#undef Xstrlen + + buf = wmalloc(len + 1); + snprintf(buf, len + 1, "%s,-*-*-%s-%s-*-*-%s-*-*-*-*-*-*-*," + "-*-*-*-*-*-*-%s-*-*-*-*-*-*-*,*", + xlfd, weight, slant, pxlsz, pxlsz); + + wfree(pxlsz); + wfree(slant); + wfree(weight); + + return buf; +} + +/* XLFD pattern matching */ +static XFontSet +W_CreateFontSetWithGuess(Display *dpy, char *xlfd, char ***missing, + int *nmissing, char **def_string) +{ + XFontSet fs = XCreateFontSet(dpy, xlfd, missing, nmissing, def_string); + + if (fs != NULL && *nmissing == 0) return fs; + + /* for non-iso8859-1 language and iso8859-1 specification + (this fontset is only for pattern analysis) */ + if (fs == NULL) { + if (*nmissing != 0) XFreeStringList(*missing); + setlocale(LC_CTYPE, "C"); + fs = XCreateFontSet(dpy, xlfd, missing, nmissing, def_string); + setlocale(LC_CTYPE, ""); + } + + /* make XLFD font name for pattern analysis */ + if (fs != NULL) { + XFontStruct **fontstructs; + char **fontnames; + if (XFontsOfFontSet(fs, &fontstructs, &fontnames) > 0) + xlfd = fontnames[0]; + } + + xlfd = generalizeXLFD(xlfd); + + if (*nmissing != 0) XFreeStringList(*missing); + if (fs != NULL) XFreeFontSet(dpy, fs); + + fs = XCreateFontSet(dpy, xlfd, missing, nmissing, def_string); + + wfree(xlfd); + return fs; +} + + +static char* +xlfdFromFontName(char *fontName, Bool antialiased) +{ + char *systemFont, *boldSystemFont; + char *font; + int size; + + if (antialiased) { + systemFont = WINGsConfiguration.antialiasedSystemFont; + boldSystemFont = WINGsConfiguration.antialiasedBoldSystemFont; + } else { + systemFont = WINGsConfiguration.systemFont; + boldSystemFont = WINGsConfiguration.boldSystemFont; + } + + size = WINGsConfiguration.defaultFontSize; + + if (strcmp(fontName, "SystemFont")==0) { + font = systemFont; + size = WINGsConfiguration.defaultFontSize; + } else if (strncmp(fontName, "SystemFont-", 11)==0) { + font = systemFont; + if (sscanf(&fontName[11], "%i", &size)!=1) { + size = WINGsConfiguration.defaultFontSize; + wwarning(_("Invalid size specification '%s' in %s. " + "Using default %d\n"), &fontName[11], fontName, size); + } + } else if (strcmp(fontName, "BoldSystemFont")==0) { + font = boldSystemFont; + size = WINGsConfiguration.defaultFontSize; + } else if (strncmp(fontName, "BoldSystemFont-", 15)==0) { + font = boldSystemFont; + if (sscanf(&fontName[15], "%i", &size)!=1) { + size = WINGsConfiguration.defaultFontSize; + wwarning(_("Invalid size specification '%s' in %s. " + "Using default %d\n"), &fontName[15], fontName, size); + } + } else { + font = NULL; + } + + return (font!=NULL ? makeFontSetOfSize(font, size) : wstrdup(fontName)); +} + + +WMFont* +WMCreateFontSet(WMScreen *scrPtr, char *fontName) +{ + WMFont *font; + Display *display = scrPtr->display; + char **missing; + int nmissing = 0; + char *defaultString; + char *fname; + XFontSetExtents *extents; + + fname = xlfdFromFontName(fontName, False); + + font = WMHashGet(scrPtr->fontSetCache, fname); + if (font) { + WMRetainFont(font); + wfree(fname); + return font; + } + + font = wmalloc(sizeof(WMFont)); + memset(font, 0, sizeof(WMFont)); + + font->notFontSet = 0; + font->antialiased = 0; + + font->screen = scrPtr; + + font->font.set = W_CreateFontSetWithGuess(display, fname, &missing, + &nmissing, &defaultString); + if (nmissing > 0 && font->font.set) { + int i; + + wwarning(_("the following character sets are missing in %s:"), fname); + for (i = 0; i < nmissing; i++) { + wwarning(missing[i]); + } + XFreeStringList(missing); + if (defaultString) + wwarning(_("the string \"%s\" will be used in place of any characters from those sets."), + defaultString); + } + if (!font->font.set) { + wfree(font); + wfree(fname); + return NULL; + } + + extents = XExtentsOfFontSet(font->font.set); + + font->height = extents->max_logical_extent.height; + font->y = font->height - (font->height + extents->max_logical_extent.y); + + font->refCount = 1; + + font->name = fname; + + assert(WMHashInsert(scrPtr->fontSetCache, font->name, font)==NULL); + + return font; +} + + + +WMFont* +WMCreateNormalFont(WMScreen *scrPtr, char *fontName) +{ + WMFont *font; + Display *display = scrPtr->display; + char *fname, *ptr; + + fontName = xlfdFromFontName(fontName, False); + + if ((ptr = strchr(fontName, ','))) { + fname = wmalloc(ptr - fontName + 1); + strncpy(fname, fontName, ptr - fontName); + fname[ptr - fontName] = 0; + } else { + fname = wstrdup(fontName); + } + + wfree(fontName); + + font = WMHashGet(scrPtr->fontCache, fname); + if (font) { + WMRetainFont(font); + wfree(fname); + return font; + } + + font = wmalloc(sizeof(WMFont)); + memset(font, 0, sizeof(WMFont)); + + font->notFontSet = 1; + font->antialiased = 0; + + font->screen = scrPtr; + + font->font.normal = XLoadQueryFont(display, fname); + if (!font->font.normal) { + wfree(font); + wfree(fname); + return NULL; + } + font->height = font->font.normal->ascent+font->font.normal->descent; + font->y = font->font.normal->ascent; + + font->refCount = 1; + + font->name = fname; + + assert(WMHashInsert(scrPtr->fontCache, font->name, font)==NULL); + + return font; +} + + +WMFont* +WMCreateAntialiasedFont(WMScreen *scrPtr, char *fontName) +{ +#ifdef XFT + WMFont *font; + Display *display = scrPtr->display; + char *fname, *ptr; + + fontName = xlfdFromFontName(fontName, True); + + if ((ptr = strchr(fontName, ','))) { + fname = wmalloc(ptr - fontName + 1); + strncpy(fname, fontName, ptr - fontName); + fname[ptr - fontName] = 0; + } else { + fname = wstrdup(fontName); + } + + wfree(fontName); + + font = WMHashGet(scrPtr->xftFontCache, fname); + if (font) { + WMRetainFont(font); + wfree(fname); + return font; + } + + font = wmalloc(sizeof(WMFont)); + memset(font, 0, sizeof(WMFont)); + + font->notFontSet = 1; + font->antialiased = 1; + + font->screen = scrPtr; + + /* Xft sux. Loading a font with an invalid XLFD will give strange results + * sometimes without returning any warning or error. + * However Xft's idea of what font is invalid is quite strange: + * 1. If the XLFD doesn't have all its fields present will fail and + * return NULL. + * 2. If all fields are present, but hold invalid values then it will: + * a. If family is invalid, will load a default font without warning. + * b. If the font size is invalid (non-numerical) it will fail and + * return NULL. + * c. If other fields are invalid, will load the font specified by + * the valid family name, ignoring any invalid fields. It will + * use a default medium weight and a default roman slant if they + * are invalid. + */ + printf("%s\n", fname); + if (fname[0] == '-') { + font->font.xft = XftFontOpenXlfd(display, scrPtr->screen, fname); + } else { + font->font.xft = XftFontOpenName(display, scrPtr->screen, fname); + } + if (!font->font.xft) { + wfree(font); + wfree(fname); + return NULL; + } + font->height = font->font.xft->ascent+font->font.xft->descent; + font->y = font->font.xft->ascent; + + font->refCount = 1; + + font->name = fname; + + assert(WMHashInsert(scrPtr->xftFontCache, font->name, font)==NULL); + + return font; +#else + return NULL; +#endif +} + + +WMFont* +WMCreateAntialiasedFontSet(WMScreen *scrPtr, char *fontName) +{ +#ifdef XFT + WMFont *font; + Display *display = scrPtr->display; + char *fname, *ptr; + + fontName = xlfdFromFontName(fontName, True); + + if ((ptr = strchr(fontName, ','))) { + fname = wmalloc(ptr - fontName + 1); + strncpy(fname, fontName, ptr - fontName); + fname[ptr - fontName] = 0; + } else { + fname = wstrdup(fontName); + } + + wfree(fontName); + + font = WMHashGet(scrPtr->xftFontSetCache, fname); + if (font) { + WMRetainFont(font); + wfree(fname); + return font; + } + + font = wmalloc(sizeof(WMFont)); + memset(font, 0, sizeof(WMFont)); + + font->notFontSet = 0; + font->antialiased = 1; + + font->screen = scrPtr; + + /* Xft sux. Loading a font with an invalid XLFD will give strange results + * sometimes without returning any warning or error. + * However Xft's idea of what font is invalid is quite strange: + * 1. If the XLFD doesn't have all its fields present will fail and + * return NULL. + * 2. If all fields are present, but hold invalid values then it will: + * a. If family is invalid, will load a default font without warning. + * b. If the font size is invalid (non-numerical) it will fail and + * return NULL. + * c. If other fields are invalid, will load the font specified by + * the valid family name, ignoring any invalid fields. It will + * use a default medium weight and a default roman slant if they + * are invalid. + */ + if (fname[0] == '-') { + font->font.xft = XftFontOpenXlfd(display, scrPtr->screen, fname); + } else { + font->font.xft = XftFontOpenName(display, scrPtr->screen, fname); + } + if (!font->font.xft) { + wfree(font); + wfree(fname); + return NULL; + } + font->height = font->font.xft->ascent+font->font.xft->descent; + font->y = font->font.xft->ascent; + + font->refCount = 1; + + font->name = fname; + + assert(WMHashInsert(scrPtr->xftFontSetCache, font->name, font)==NULL); + + return font; +#else + return NULL; +#endif +} + + +WMFont* +WMCreateFont(WMScreen *scrPtr, char *fontName) +{ + return WMCreateFontWithFlags(scrPtr, fontName, WFDefaultFont); +} + + +WMFont* +WMCreateFontWithFlags(WMScreen *scrPtr, char *fontName, WMFontFlags flags) +{ + Bool multiByte = scrPtr->useMultiByte; + Bool antialiased = scrPtr->antialiasedText; + WMFont *font; + + if (flags & WFFontSet) { + multiByte = True; + } else if (flags & WFNormalFont) { + multiByte = False; + } + if (flags & WFAntialiased) { + antialiased = True; + } else if (flags & WFNotAntialiased) { + antialiased = False; + } + + if (antialiased && multiByte) { + font = WMCreateAntialiasedFontSet(scrPtr, fontName); + /* If we cannot create an antialiased font set and antialiasing is + * not explicitly requested in flags, fallback to standard font sets */ + if (!font && (flags & WFAntialiased)==0) { + font = WMCreateFontSet(scrPtr, fontName); + } + } else if (antialiased) { + font = WMCreateAntialiasedFont(scrPtr, fontName); + /* If we cannot create an antialiased font and antialiasing is + * not explicitly requested in flags, fallback to normal font */ + if (!font && (flags & WFAntialiased)==0) { + font = WMCreateNormalFont(scrPtr, fontName); + } + } else if (multiByte) { + font = WMCreateFontSet(scrPtr, fontName); + } else { + font = WMCreateNormalFont(scrPtr, fontName); + } + + return font; +} + + +WMFont* +WMRetainFont(WMFont *font) +{ + wassertrv(font!=NULL, NULL); + + font->refCount++; + + return font; +} + + +void +WMReleaseFont(WMFont *font) +{ + wassertr(font!=NULL); + + font->refCount--; + if (font->refCount < 1) { + if (font->antialiased) { +#ifdef XFT + XftFontClose(font->screen->display, font->font.xft); +#else + assert(False); +#endif + } else if (font->notFontSet) { + XFreeFont(font->screen->display, font->font.normal); + } else { + XFreeFontSet(font->screen->display, font->font.set); + } + + if (font->name) { + if (font->antialiased && !font->notFontSet) { + WMHashRemove(font->screen->xftFontSetCache, font->name); + } else if (font->antialiased) { + WMHashRemove(font->screen->xftFontCache, font->name); + } else if (font->notFontSet) { + WMHashRemove(font->screen->fontCache, font->name); + } else { + WMHashRemove(font->screen->fontSetCache, font->name); + } + wfree(font->name); + } + wfree(font); + } +} + + +Bool +WMIsAntialiasingEnabled(WMScreen *scrPtr) +{ + return scrPtr->antialiasedText; +} + + +Bool +WMIsAntialiasedFont(WMFont *font) +{ + wassertrv(font!=NULL, False); + + return font->antialiased; +} + + +unsigned int +WMFontHeight(WMFont *font) +{ + wassertrv(font!=NULL, 0); + + return font->height; +} + + +char* +WMGetFontName(WMFont *font) +{ + wassertrv(font!=NULL, NULL); + + return font->name; +} + + +WMFont* +WMDefaultSystemFont(WMScreen *scrPtr) +{ + return WMRetainFont(scrPtr->normalFont); +} + + +WMFont* +WMDefaultBoldSystemFont(WMScreen *scrPtr) +{ + return WMRetainFont(scrPtr->boldFont); +} + + +static WMFont* +makeSystemFontOfSize(WMScreen *scrPtr, int size, Bool bold) +{ + WMFont *font; + char *fontSpec, *xftFontSpec; + +#define WConf WINGsConfiguration + if (bold) { + fontSpec = makeFontSetOfSize(WConf.boldSystemFont, size); + xftFontSpec = makeFontSetOfSize(WConf.antialiasedBoldSystemFont, size); + } else { + fontSpec = makeFontSetOfSize(WConf.systemFont, size); + xftFontSpec = makeFontSetOfSize(WConf.antialiasedSystemFont, size); + } +#undef WConf + + if (scrPtr->antialiasedText && scrPtr->useMultiByte) { + font = WMCreateAntialiasedFontSet(scrPtr, xftFontSpec); + } else if (scrPtr->antialiasedText) { + font = WMCreateAntialiasedFont(scrPtr, xftFontSpec); + } else if (scrPtr->useMultiByte) { + font = WMCreateFontSet(scrPtr, fontSpec); + } else { + font = WMCreateNormalFont(scrPtr, fontSpec); + } + + if (!font) { + if (scrPtr->antialiasedText && scrPtr->useMultiByte) { + // is arial a good fallback for multibyte? + wwarning(_("could not load font %s. Trying arial."), xftFontSpec); + if (bold) { + font = WMCreateAntialiasedFontSet(scrPtr, "-*-arial-bold-r-normal-*-12-*-*-*-*-*-*-*"); + } else { + font = WMCreateAntialiasedFontSet(scrPtr, "-*-arial-medium-r-normal-*-12-*-*-*-*-*-*-*"); + } + if (!font) { + wwarning(_("could not load antialiased font set. Reverting to standard font sets.")); + font = WMCreateFontSet(scrPtr, fontSpec); + if (!font) { + wwarning(_("could not load FontSet %s. Trying fixed."), fontSpec); + font = WMCreateFontSet(scrPtr, "fixed"); + } + } + } else if (scrPtr->antialiasedText) { + wwarning(_("could not load font %s. Trying arial."), xftFontSpec); + if (bold) { + font = WMCreateAntialiasedFont(scrPtr, "-*-arial-bold-r-normal-*-12-*-*-*-*-*-*-*"); + } else { + font = WMCreateAntialiasedFont(scrPtr, "-*-arial-medium-r-normal-*-12-*-*-*-*-*-*-*"); + } + if (!font) { + wwarning(_("could not load antialiased fonts. Reverting to normal fonts.")); + font = WMCreateNormalFont(scrPtr, fontSpec); + if (!font) { + wwarning(_("could not load font %s. Trying fixed."), fontSpec); + font = WMCreateNormalFont(scrPtr, "fixed"); + } + } + } else if (scrPtr->useMultiByte) { + wwarning(_("could not load font set %s. Trying fixed."), fontSpec); + font = WMCreateFontSet(scrPtr, "fixed"); + if (!font) { + font = WMCreateFontSet(scrPtr, "-*-fixed-medium-r-normal-*-14-*-*-*-*-*-*-*"); + } + } else { + wwarning(_("could not load font %s. Trying fixed."), fontSpec); + font = WMCreateNormalFont(scrPtr, "fixed"); + } + if (!font) { + wwarning(_("could not load fixed font!")); + wfree(fontSpec); + wfree(xftFontSpec); + return NULL; + } + } + wfree(fontSpec); + wfree(xftFontSpec); + + return font; +} + + +WMFont* +WMSystemFontOfSize(WMScreen *scrPtr, int size) +{ + return makeSystemFontOfSize(scrPtr, size, False); +} + + +WMFont* +WMBoldSystemFontOfSize(WMScreen *scrPtr, int size) +{ + return makeSystemFontOfSize(scrPtr, size, True); +} + + +XFontSet +WMGetFontFontSet(WMFont *font) +{ + wassertrv(font!=NULL, NULL); + + if (!font->notFontSet && !font->antialiased) + return font->font.set; + + return NULL; +} + + +int +WMWidthOfString(WMFont *font, char *text, int length) +{ + wassertrv(font!=NULL, 0); + wassertrv(text!=NULL, 0); + + if (font->antialiased) { +#ifdef XFT + XGlyphInfo extents; + + if (!font->notFontSet) { + wchar_t *wtext; + char *mtext; + int len; + + /* Use mtext instead of text, because mbstrtowcs() alters it */ + mtext = text; + wtext = (wchar_t *)wmalloc(4*length+4); + /* pass a real ps instead of NULL below? for multithread safety + * as from manual page */ + len = mbsrtowcs(wtext, (const char **) &mtext, length, NULL); + if (len>0) { + XftTextExtents32(font->screen->display, font->font.xft, + (XftChar32 *)wtext, len, &extents); + } else { + if (len==-1) { + wwarning(_("Conversion to widechar failed (possible " + "invalid multibyte sequence): '%s':(pos %d)\n"), + text, mtext-text+1); + } + extents.xOff = 0; + } + wfree(wtext); + } else { + XftTextExtents8(font->screen->display, font->font.xft, + (XftChar8 *)text, length, &extents); + } + + return extents.xOff; /* don't ask :P */ +#else + wassertrv(False, 0); +#endif + } else if (font->notFontSet) { + return XTextWidth(font->font.normal, text, length); + } else { + XRectangle rect; + XRectangle AIXsucks; + + XmbTextExtents(font->font.set, text, length, &AIXsucks, &rect); + + return rect.width; + } +} + + + +void +WMDrawString(WMScreen *scr, Drawable d, WMColor *color, WMFont *font, + int x, int y, char *text, int length) +{ + wassertr(font!=NULL); + + if (font->antialiased) { +#ifdef XFT + XftColor xftcolor; + + xftcolor.color.red = color->color.red; + xftcolor.color.green = color->color.green; + xftcolor.color.blue = color->color.blue; + xftcolor.color.alpha = color->alpha;; + xftcolor.pixel = W_PIXEL(color); + + XftDrawChange(scr->xftdraw, d); + + if (!font->notFontSet) { + wchar_t *wtext; + char *mtext; + int len; + + /* Use mtext instead of text, because mbstrtowcs() alters it */ + mtext = text; + wtext = (wchar_t *)wmalloc(4*length+4); + len = mbsrtowcs(wtext, (const char **) &mtext, length, NULL); + if (len>0) { + XftDrawString32(scr->xftdraw, &xftcolor, font->font.xft, + x, y + font->y, (XftChar32*)wtext, len); + } else if (len==-1) { + wwarning(_("Conversion to widechar failed (possible invalid " + "multibyte sequence): '%s':(pos %d)\n"), + text, mtext-text+1); + /* we can draw normal text, or we can draw as much widechar + * text as was already converted until the error. go figure */ + /*XftDrawString8(scr->xftdraw, &xftcolor, font->font.xft, + x, y + font->y, (XftChar8*)text, length);*/ + } + wfree(wtext); + } else { + XftDrawString8(scr->xftdraw, &xftcolor, font->font.xft, + x, y + font->y, (XftChar8*)text, length); + } +#else + wassertr(False); +#endif + } else if (font->notFontSet) { + XSetFont(scr->display, scr->drawStringGC, font->font.normal->fid); + XSetForeground(scr->display, scr->drawStringGC, W_PIXEL(color)); + XDrawString(scr->display, d, scr->drawStringGC, x, y + font->y, + text, length); + } else { + XSetForeground(scr->display, scr->drawStringGC, W_PIXEL(color)); + XmbDrawString(scr->display, d, font->font.set, scr->drawStringGC, + x, y + font->y, text, length); + } +} + + +void +WMDrawImageString(WMScreen *scr, Drawable d, WMColor *color, WMColor *background, + WMFont *font, int x, int y, char *text, int length) +{ + wassertr(font!=NULL); + + if (font->antialiased) { +#ifdef XFT + XftColor textColor; + XftColor bgColor; + + textColor.color.red = color->color.red; + textColor.color.green = color->color.green; + textColor.color.blue = color->color.blue; + textColor.color.alpha = color->alpha;; + textColor.pixel = W_PIXEL(color); + + bgColor.color.red = background->color.red; + bgColor.color.green = background->color.green; + bgColor.color.blue = background->color.blue; + bgColor.color.alpha = background->alpha;; + bgColor.pixel = W_PIXEL(background); + + + XftDrawChange(scr->xftdraw, d); + + XftDrawRect(scr->xftdraw, &bgColor, x, y, + WMWidthOfString(font, text, length), font->height); + + if (!font->notFontSet) { + wchar_t *wtext; + char *mtext; + int len; + + /* Use mtext instead of text, because mbstrtowcs() alters it */ + mtext = text; + wtext = (wchar_t *)wmalloc(4*length+4); + len = mbsrtowcs(wtext, (const char **) &mtext, length, NULL); + if (len>0) { + XftDrawString32(scr->xftdraw, &textColor, font->font.xft, + x, y + font->y, (XftChar32*)wtext, len); + } else if (len==-1) { + wwarning(_("Conversion to widechar failed (possible invalid " + "multibyte sequence): '%s':(pos %d)\n"), + text, mtext-text+1); + /* we can draw normal text, or we can draw as much widechar + * text as was already converted until the error. go figure */ + /*XftDrawString8(scr->xftdraw, &textColor, font->font.xft, + x, y + font->y, (XftChar8*)text, length);*/ + } + wfree(wtext); + } else { + XftDrawString8(scr->xftdraw, &textColor, font->font.xft, + x, y + font->y, (XftChar8*)text, length); + } +#else + wassertr(False); +#endif + } else if (font->notFontSet) { + XSetForeground(scr->display, scr->drawImStringGC, W_PIXEL(color)); + XSetBackground(scr->display, scr->drawImStringGC, W_PIXEL(background)); + XSetFont(scr->display, scr->drawImStringGC, font->font.normal->fid); + XDrawImageString(scr->display, d, scr->drawImStringGC, + x, y + font->y, text, length); + } else { + XSetForeground(scr->display, scr->drawImStringGC, W_PIXEL(color)); + XSetBackground(scr->display, scr->drawImStringGC, W_PIXEL(background)); + XmbDrawImageString(scr->display, d, font->font.set, scr->drawImStringGC, + x, y + font->y, text, length); + } +} + + + + +static char* +makeFontSetOfSize(char *fontset, int size) +{ + char font[300], *f; + char *newfs = NULL; + char *ptr; + + do { + char *tmp; + int end; + + + f = fontset; + ptr = strchr(fontset, ','); + if (ptr) { + int count = ptr-fontset; + + if (count > 255) { + wwarning(_("font description %s is too large."), fontset); + } else { + memcpy(font, fontset, count); + font[count] = 0; + f = (char*)font; + } + } + + if (newfs) + end = strlen(newfs); + else + end = 0; + + tmp = wmalloc(end + strlen(f) + 8); + if (end != 0) { + sprintf(tmp, "%s,", newfs); + sprintf(tmp + end + 1, f, size); + } else { + sprintf(tmp + end, f, size); + } + + if (newfs) + wfree(newfs); + newfs = tmp; + + fontset = ptr+1; + } while (ptr!=NULL); + + return newfs; +} + + +#define FONT_PROPS 14 + +typedef struct { + char *props[FONT_PROPS]; +} W_FontAttributes; + + +static void +changeFontProp(char *buf, char *newprop, int position) +{ + char buf2[512]; + char *ptr, *pptr, *rptr; + int count; + + if (buf[0]!='-') { + /* // remove warning later. or maybe not */ + wwarning(_("Invalid font specification: '%s'\n"), buf); + return; + } + + ptr = pptr = rptr = buf; + count = 0; + while (*ptr && *ptr!=',') { + if (*ptr == '-') { + count++; + if (count-1==position+1) { + rptr = ptr; + break; + } + if (count-1==position) { + pptr = ptr+1; + } + } + ptr++; + } + if (position==FONT_PROPS-1) { + rptr = ptr; + } + + *pptr = 0; + snprintf(buf2, 512, "%s%s%s", buf, newprop, rptr); + strcpy(buf, buf2); +} + + +static WMArray* +getOptions(char *options) +{ + char *ptr, *ptr2, *str; + WMArray *result; + int count; + + result = WMCreateArrayWithDestructor(2, (WMFreeDataProc*)wfree); + + ptr = options; + while (1) { + ptr2 = strchr(ptr, ','); + if (!ptr2) { + WMAddToArray(result, wstrdup(ptr)); + break; + } else { + count = ptr2 - ptr; + str = wmalloc(count+1); + memcpy(str, ptr, count); + str[count] = 0; + WMAddToArray(result, str); + ptr = ptr2 + 1; + } + } + + return result; +} + + +#define WFAUnchanged (NULL) +/* Struct for font change operations */ +typedef struct WMFontAttributes { + char *foundry; + char *family; + char *weight; + char *slant; + char *setWidth; + char *addStyle; + char *pixelSize; + char *pointSize; + char *resolutionX; + char *resolutionY; + char *spacing; + char *averageWidth; + char *registry; + char *encoding; +} WMFontAttributes; + +WMFont* +WMCopyFontWithChanges(WMScreen *scrPtr, WMFont *font, + const WMFontAttributes *changes) +{ + int index[FONT_PROPS], count[FONT_PROPS]; + int totalProps, i, j, carry; + char fname[512]; + WMFontFlags fFlags; + WMBag *props; + WMArray *options; + WMFont *result; + char *prop; + + snprintf(fname, 512, "%s", font->name); + + fFlags = (font->antialiased ? WFAntialiased : WFNotAntialiased); + fFlags |= (font->notFontSet ? WFNormalFont : WFFontSet); + + props = WMCreateBagWithDestructor(1, (WMFreeDataProc*)WMFreeArray); + + totalProps = 0; + for (i=0; iprops[i]; + count[i] = index[i] = 0; + if (!prop) { + /* No change for this property */ + continue; + } else if (strchr(prop, ',')==NULL) { + /* Simple option */ + changeFontProp(fname, prop, i); + } else { + /* Option with fallback alternatives */ + if ((changes==WFAEmphasized || changes==WFABoldEmphasized) && + font->antialiased && strcmp(prop, "o,i")==0) { + options = getOptions("i,o"); + } else { + options = getOptions(prop); + } + WMInsertInBag(props, i, options); + count[i] = WMGetArrayItemCount(options); + if (totalProps==0) + totalProps = 1; + totalProps = totalProps * count[i]; + } + } + + if (totalProps == 0) { + /* No options with fallback alternatives at all */ + WMFreeBag(props); + return WMCreateFontWithFlags(scrPtr, fname, fFlags); + } + + for (i=0; i=0; j--) { + if (count[j]!=0) { + index[j] += carry; + carry = (index[j]==count[j]); + index[j] %= count[j]; + } + } + } + + WMFreeBag(props); + + return NULL; +} + +// should WFANormal also set "normal" or leave it alone? +static const WMFontAttributes W_FANormal = { + WFAUnchanged, WFAUnchanged, "medium,normal,regular", "r", "normal", + WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, + WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged +}; + + +static const WMFontAttributes W_FABold = { + WFAUnchanged, WFAUnchanged, "bold", WFAUnchanged, + WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, + WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged +}; + + +static const WMFontAttributes W_FANotBold = { + WFAUnchanged, WFAUnchanged, "medium,normal,regular", WFAUnchanged, + WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, + WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged +}; + + +static const WMFontAttributes W_FAEmphasized = { + WFAUnchanged, WFAUnchanged, WFAUnchanged, "o,i", + WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, + WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged +}; + + +static const WMFontAttributes W_FANotEmphasized = { + WFAUnchanged, WFAUnchanged, WFAUnchanged, "r", + WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, + WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged +}; + + +static const WMFontAttributes W_FABoldEmphasized = { + WFAUnchanged, WFAUnchanged, "bold", "o,i", + WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, + WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged +}; + + +const WMFontAttributes *WFANormal = &W_FANormal; +const WMFontAttributes *WFABold = &W_FABold; +const WMFontAttributes *WFANotBold = &W_FANotBold; +const WMFontAttributes *WFAEmphasized = &W_FAEmphasized; +const WMFontAttributes *WFANotEmphasized = &W_FANotEmphasized; +const WMFontAttributes *WFABoldEmphasized = &W_FABoldEmphasized; + + +#endif diff --git a/WINGs/wfont_noxft.c b/WINGs/wfont_noxft.c deleted file mode 100644 index ffd817c7..00000000 --- a/WINGs/wfont_noxft.c +++ /dev/null @@ -1,769 +0,0 @@ - - -#include "wconfig.h" - -#ifndef XFT - -#include "WINGsP.h" - -#include -#include -#include - - -static char *makeFontSetOfSize(char *fontset, int size); - - -/* XLFD pattern matching */ -static char* -getElementFromXLFD(const char *xlfd, int index) -{ - const char *p = xlfd; - while (*p != 0) { - if (*p == '-' && --index == 0) { - const char *end = strchr(p + 1, '-'); - char *buf; - size_t len; - if (end == 0) end = p + strlen(p); - len = end - (p + 1); - buf = wmalloc(len); - memcpy(buf, p + 1, len); - buf[len] = 0; - return buf; - } - p++; - } - return strdup("*"); -} - - -/* XLFD pattern matching */ -static char* -generalizeXLFD(const char *xlfd) -{ - char *buf; - int len; - char *weight = getElementFromXLFD(xlfd, 3); - char *slant = getElementFromXLFD(xlfd, 4); - char *pxlsz = getElementFromXLFD(xlfd, 7); - -#define Xstrlen(A) ((A)?strlen(A):0) - len = Xstrlen(xlfd)+Xstrlen(weight)+Xstrlen(slant)+Xstrlen(pxlsz)*2+60; -#undef Xstrlen - - buf = wmalloc(len + 1); - snprintf(buf, len + 1, "%s,-*-*-%s-%s-*-*-%s-*-*-*-*-*-*-*," - "-*-*-*-*-*-*-%s-*-*-*-*-*-*-*,*", - xlfd, weight, slant, pxlsz, pxlsz); - - wfree(pxlsz); - wfree(slant); - wfree(weight); - - return buf; -} - -/* XLFD pattern matching */ -static XFontSet -W_CreateFontSetWithGuess(Display *dpy, char *xlfd, char ***missing, - int *nmissing, char **def_string) -{ - XFontSet fs = XCreateFontSet(dpy, xlfd, missing, nmissing, def_string); - - if (fs != NULL && *nmissing == 0) return fs; - - /* for non-iso8859-1 language and iso8859-1 specification - (this fontset is only for pattern analysis) */ - if (fs == NULL) { - if (*nmissing != 0) XFreeStringList(*missing); - setlocale(LC_CTYPE, "C"); - fs = XCreateFontSet(dpy, xlfd, missing, nmissing, def_string); - setlocale(LC_CTYPE, ""); - } - - /* make XLFD font name for pattern analysis */ - if (fs != NULL) { - XFontStruct **fontstructs; - char **fontnames; - if (XFontsOfFontSet(fs, &fontstructs, &fontnames) > 0) - xlfd = fontnames[0]; - } - - xlfd = generalizeXLFD(xlfd); - - if (*nmissing != 0) XFreeStringList(*missing); - if (fs != NULL) XFreeFontSet(dpy, fs); - - fs = XCreateFontSet(dpy, xlfd, missing, nmissing, def_string); - - wfree(xlfd); - return fs; -} - - -static char* -xlfdFromFontName(char *fontName) -{ - char *systemFont, *boldSystemFont; - char *font; - int size; - - systemFont = WINGsConfiguration.systemFont; - boldSystemFont = WINGsConfiguration.boldSystemFont; - - size = WINGsConfiguration.defaultFontSize; - - if (strcmp(fontName, "SystemFont")==0) { - font = systemFont; - } else if (strncmp(fontName, "SystemFont-", 11)==0) { - font = systemFont; - if (sscanf(&fontName[11], "%i", &size)!=1) { - size = WINGsConfiguration.defaultFontSize; - wwarning(_("Invalid size specification '%s' in %s. " - "Using default %d\n"), &fontName[11], fontName, size); - } - } else if (strcmp(fontName, "BoldSystemFont")==0) { - font = boldSystemFont; - } else if (strncmp(fontName, "BoldSystemFont-", 15)==0) { - font = boldSystemFont; - if (sscanf(&fontName[15], "%i", &size)!=1) { - size = WINGsConfiguration.defaultFontSize; - wwarning(_("Invalid size specification '%s' in %s. " - "Using default %d\n"), &fontName[15], fontName, size); - } - } else { - font = NULL; - } - - return (font!=NULL ? makeFontSetOfSize(font, size) : wstrdup(fontName)); -} - - -WMFont* -WMCreateFontSet(WMScreen *scrPtr, char *fontName) -{ - WMFont *font; - Display *display = scrPtr->display; - char **missing; - int nmissing = 0; - char *defaultString; - char *fname; - XFontSetExtents *extents; - - fname = xlfdFromFontName(fontName); - - font = WMHashGet(scrPtr->fontSetCache, fname); - if (font) { - WMRetainFont(font); - wfree(fname); - return font; - } - - font = wmalloc(sizeof(WMFont)); - memset(font, 0, sizeof(WMFont)); - - font->notFontSet = 0; - - font->screen = scrPtr; - - font->font.set = W_CreateFontSetWithGuess(display, fname, &missing, - &nmissing, &defaultString); - if (nmissing > 0 && font->font.set) { - int i; - - wwarning(_("the following character sets are missing in %s:"), fname); - for (i = 0; i < nmissing; i++) { - wwarning(missing[i]); - } - XFreeStringList(missing); - if (defaultString) - wwarning(_("the string \"%s\" will be used in place of any characters from those sets."), - defaultString); - } - if (!font->font.set) { - wfree(font); - wfree(fname); - return NULL; - } - - extents = XExtentsOfFontSet(font->font.set); - - font->height = extents->max_logical_extent.height; - font->y = font->height - (font->height + extents->max_logical_extent.y); - - font->refCount = 1; - - font->name = fname; - - assert(WMHashInsert(scrPtr->fontSetCache, font->name, font)==NULL); - - return font; -} - - - -WMFont* -WMCreateNormalFont(WMScreen *scrPtr, char *fontName) -{ - WMFont *font; - Display *display = scrPtr->display; - char *fname, *ptr; - - fontName = xlfdFromFontName(fontName); - - if ((ptr = strchr(fontName, ','))) { - fname = wmalloc(ptr - fontName + 1); - strncpy(fname, fontName, ptr - fontName); - fname[ptr - fontName] = 0; - } else { - fname = wstrdup(fontName); - } - - wfree(fontName); - - font = WMHashGet(scrPtr->fontCache, fname); - if (font) { - WMRetainFont(font); - wfree(fname); - return font; - } - - font = wmalloc(sizeof(WMFont)); - memset(font, 0, sizeof(WMFont)); - - font->notFontSet = 1; - - font->screen = scrPtr; - - font->font.normal = XLoadQueryFont(display, fname); - if (!font->font.normal) { - wfree(font); - wfree(fname); - return NULL; - } - font->height = font->font.normal->ascent+font->font.normal->descent; - font->y = font->font.normal->ascent; - - font->refCount = 1; - - font->name = fname; - - assert(WMHashInsert(scrPtr->fontCache, font->name, font)==NULL); - - return font; -} - - -WMFont* -WMCreateFont(WMScreen *scrPtr, char *fontName) -{ - return WMCreateFontWithFlags(scrPtr, fontName, WFDefaultFont); -} - - -WMFont* -WMCreateFontWithFlags(WMScreen *scrPtr, char *fontName, WMFontFlags flags) -{ - Bool multiByte = scrPtr->useMultiByte; - WMFont *font; - - if (flags & WFFontSet) { - multiByte = True; - } else if (flags & WFNormalFont) { - multiByte = False; - } - - } else if (multiByte) { - font = WMCreateFontSet(scrPtr, fontName); - } else { - font = WMCreateNormalFont(scrPtr, fontName); - } - - return font; -} - - -WMFont* -WMRetainFont(WMFont *font) -{ - wassertrv(font!=NULL, NULL); - - font->refCount++; - - return font; -} - - -void -WMReleaseFont(WMFont *font) -{ - wassertr(font!=NULL); - - font->refCount--; - if (font->refCount < 1) { - if (font->notFontSet) { - XFreeFont(font->screen->display, font->font.normal); - } else { - XFreeFontSet(font->screen->display, font->font.set); - } - - if (font->name) { - if (font->notFontSet) { - WMHashRemove(font->screen->fontCache, font->name); - } else { - WMHashRemove(font->screen->fontSetCache, font->name); - } - wfree(font->name); - } - wfree(font); - } -} - - -Bool -WMIsAntialiasingEnabled(WMScreen *scrPtr) -{ - return False; -} - - -unsigned int -WMFontHeight(WMFont *font) -{ - wassertrv(font!=NULL, 0); - - return font->height; -} - - -char* -WMGetFontName(WMFont *font) -{ - wassertrv(font!=NULL, NULL); - - return font->name; -} - - -WMFont* -WMDefaultSystemFont(WMScreen *scrPtr) -{ - return WMRetainFont(scrPtr->normalFont); -} - - -WMFont* -WMDefaultBoldSystemFont(WMScreen *scrPtr) -{ - return WMRetainFont(scrPtr->boldFont); -} - - -static WMFont* -makeSystemFontOfSize(WMScreen *scrPtr, int size, Bool bold) -{ - WMFont *font; - char *fontSpec; - -#define WConf WINGsConfiguration - if (bold) { - fontSpec = makeFontSetOfSize(WConf.boldSystemFont, size); - } else { - fontSpec = makeFontSetOfSize(WConf.systemFont, size); - } -#undef WConf - - if (scrPtr->useMultiByte) { - font = WMCreateFontSet(scrPtr, fontSpec); - } else { - font = WMCreateNormalFont(scrPtr, fontSpec); - } - - if (!font) { - if (scrPtr->useMultiByte) { - wwarning(_("could not load font set %s. Trying fixed."), fontSpec); - font = WMCreateFontSet(scrPtr, "fixed"); - if (!font) { - font = WMCreateFontSet(scrPtr, "-*-fixed-medium-r-normal-*-14-*-*-*-*-*-*-*"); - } - } else { - wwarning(_("could not load font %s. Trying fixed."), fontSpec); - font = WMCreateNormalFont(scrPtr, "fixed"); - } - if (!font) { - wwarning(_("could not load fixed font!")); - wfree(fontSpec); - return NULL; - } - } - wfree(fontSpec); - - return font; -} - - -WMFont* -WMSystemFontOfSize(WMScreen *scrPtr, int size) -{ - return makeSystemFontOfSize(scrPtr, size, False); -} - - -WMFont* -WMBoldSystemFontOfSize(WMScreen *scrPtr, int size) -{ - return makeSystemFontOfSize(scrPtr, size, True); -} - - -XFontSet -WMGetFontFontSet(WMFont *font) -{ - wassertrv(font!=NULL, NULL); - - if (!font->notFontSet && !font->antialiased) - return font->font.set; - - return NULL; -} - - -int -WMWidthOfString(WMFont *font, char *text, int length) -{ - wassertrv(font!=NULL, 0); - wassertrv(text!=NULL, 0); - - if (font->notFontSet) { - return XTextWidth(font->font.normal, text, length); - } else { - XRectangle rect; - XRectangle AIXsucks; - - XmbTextExtents(font->font.set, text, length, &AIXsucks, &rect); - - return rect.width; - } -} - - - -void -WMDrawString(WMScreen *scr, Drawable d, WMColor *color, WMFont *font, - int x, int y, char *text, int length) -{ - wassertr(font!=NULL); - - if (font->notFontSet) { - XSetFont(scr->display, scr->drawStringGC, font->font.normal->fid); - XSetForeground(scr->display, scr->drawStringGC, W_PIXEL(color)); - XDrawString(scr->display, d, scr->drawStringGC, x, y + font->y, - text, length); - } else { - XSetForeground(scr->display, scr->drawStringGC, W_PIXEL(color)); - XmbDrawString(scr->display, d, font->font.set, scr->drawStringGC, - x, y + font->y, text, length); - } -} - - -void -WMDrawImageString(WMScreen *scr, Drawable d, WMColor *color, WMColor *background, - WMFont *font, int x, int y, char *text, int length) -{ - wassertr(font!=NULL); - - if (font->notFontSet) { - XSetForeground(scr->display, scr->drawImStringGC, W_PIXEL(color)); - XSetBackground(scr->display, scr->drawImStringGC, W_PIXEL(background)); - XSetFont(scr->display, scr->drawImStringGC, font->font.normal->fid); - XDrawImageString(scr->display, d, scr->drawImStringGC, - x, y + font->y, text, length); - } else { - XSetForeground(scr->display, scr->drawImStringGC, W_PIXEL(color)); - XSetBackground(scr->display, scr->drawImStringGC, W_PIXEL(background)); - XmbDrawImageString(scr->display, d, font->font.set, scr->drawImStringGC, - x, y + font->y, text, length); - } -} - - - - -static char* -makeFontSetOfSize(char *fontset, int size) -{ - char font[300], *f; - char *newfs = NULL; - char *ptr; - - do { - char *tmp; - int end; - - - f = fontset; - ptr = strchr(fontset, ','); - if (ptr) { - int count = ptr-fontset; - - if (count > 255) { - wwarning(_("font description %s is too large."), fontset); - } else { - memcpy(font, fontset, count); - font[count] = 0; - f = (char*)font; - } - } - - if (newfs) - end = strlen(newfs); - else - end = 0; - - tmp = wmalloc(end + strlen(f) + 8); - if (end != 0) { - sprintf(tmp, "%s,", newfs); - sprintf(tmp + end + 1, f, size); - } else { - sprintf(tmp + end, f, size); - } - - if (newfs) - wfree(newfs); - newfs = tmp; - - fontset = ptr+1; - } while (ptr!=NULL); - - return newfs; -} - - -#define FONT_PROPS 14 - -typedef struct { - char *props[FONT_PROPS]; -} W_FontAttributes; - - -static void -changeFontProp(char *buf, char *newprop, int position) -{ - char buf2[512]; - char *ptr, *pptr, *rptr; - int count; - - if (buf[0]!='-') { - /* // remove warning later. or maybe not */ - wwarning(_("Invalid font specification: '%s'\n"), buf); - return; - } - - ptr = pptr = rptr = buf; - count = 0; - while (*ptr && *ptr!=',') { - if (*ptr == '-') { - count++; - if (count-1==position+1) { - rptr = ptr; - break; - } - if (count-1==position) { - pptr = ptr+1; - } - } - ptr++; - } - if (position==FONT_PROPS-1) { - rptr = ptr; - } - - *pptr = 0; - snprintf(buf2, 512, "%s%s%s", buf, newprop, rptr); - strcpy(buf, buf2); -} - - -static WMArray* -getOptions(char *options) -{ - char *ptr, *ptr2, *str; - WMArray *result; - int count; - - result = WMCreateArrayWithDestructor(2, (WMFreeDataProc*)wfree); - - ptr = options; - while (1) { - ptr2 = strchr(ptr, ','); - if (!ptr2) { - WMAddToArray(result, wstrdup(ptr)); - break; - } else { - count = ptr2 - ptr; - str = wmalloc(count+1); - memcpy(str, ptr, count); - str[count] = 0; - WMAddToArray(result, str); - ptr = ptr2 + 1; - } - } - - return result; -} - - -#define WFAUnchanged (NULL) -/* Struct for font change operations */ -typedef struct WMFontAttributes { - char *foundry; - char *family; - char *weight; - char *slant; - char *setWidth; - char *addStyle; - char *pixelSize; - char *pointSize; - char *resolutionX; - char *resolutionY; - char *spacing; - char *averageWidth; - char *registry; - char *encoding; -} WMFontAttributes; - -WMFont* -WMCopyFontWithChanges(WMScreen *scrPtr, WMFont *font, - const WMFontAttributes *changes) -{ - int index[FONT_PROPS], count[FONT_PROPS]; - int totalProps, i, j, carry; - char fname[512]; - WMFontFlags fFlags; - WMBag *props; - WMArray *options; - WMFont *result; - char *prop; - - snprintf(fname, 512, "%s", font->name); - - fFlags = (font->antialiased ? WFAntialiased : WFNotAntialiased); - fFlags |= (font->notFontSet ? WFNormalFont : WFFontSet); - - props = WMCreateBagWithDestructor(1, (WMFreeDataProc*)WMFreeArray); - - totalProps = 0; - for (i=0; iprops[i]; - count[i] = index[i] = 0; - if (!prop) { - /* No change for this property */ - continue; - } else if (strchr(prop, ',')==NULL) { - /* Simple option */ - changeFontProp(fname, prop, i); - } else { - /* Option with fallback alternatives */ - if ((changes==WFAEmphasized || changes==WFABoldEmphasized) && - font->antialiased && strcmp(prop, "o,i")==0) { - options = getOptions("i,o"); - } else { - options = getOptions(prop); - } - WMInsertInBag(props, i, options); - count[i] = WMGetArrayItemCount(options); - if (totalProps==0) - totalProps = 1; - totalProps = totalProps * count[i]; - } - } - - if (totalProps == 0) { - /* No options with fallback alternatives at all */ - WMFreeBag(props); - return WMCreateFontWithFlags(scrPtr, fname, fFlags); - } - - for (i=0; i=0; j--) { - if (count[j]!=0) { - index[j] += carry; - carry = (index[j]==count[j]); - index[j] %= count[j]; - } - } - } - - WMFreeBag(props); - - return NULL; -} - -// should WFANormal also set "normal" or leave it alone? -static const WMFontAttributes W_FANormal = { - WFAUnchanged, WFAUnchanged, "medium,normal,regular", "r", "normal", - WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, - WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged -}; - - -static const WMFontAttributes W_FABold = { - WFAUnchanged, WFAUnchanged, "bold", WFAUnchanged, - WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, - WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged -}; - - -static const WMFontAttributes W_FANotBold = { - WFAUnchanged, WFAUnchanged, "medium,normal,regular", WFAUnchanged, - WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, - WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged -}; - - -static const WMFontAttributes W_FAEmphasized = { - WFAUnchanged, WFAUnchanged, WFAUnchanged, "o,i", - WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, - WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged -}; - - -static const WMFontAttributes W_FANotEmphasized = { - WFAUnchanged, WFAUnchanged, WFAUnchanged, "r", - WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, - WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged -}; - - -static const WMFontAttributes W_FABoldEmphasized = { - WFAUnchanged, WFAUnchanged, "bold", "o,i", - WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, - WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged, WFAUnchanged -}; - - -const WMFontAttributes *WFANormal = &W_FANormal; -const WMFontAttributes *WFABold = &W_FABold; -const WMFontAttributes *WFANotBold = &W_FANotBold; -const WMFontAttributes *WFAEmphasized = &W_FAEmphasized; -const WMFontAttributes *WFANotEmphasized = &W_FANotEmphasized; -const WMFontAttributes *WFABoldEmphasized = &W_FABoldEmphasized; - - -#endif - diff --git a/WINGs/wfontpanel.c b/WINGs/wfontpanel.c index 48fe933f..5ee6bde8 100644 --- a/WINGs/wfontpanel.c +++ b/WINGs/wfontpanel.c @@ -9,10 +9,6 @@ #include #include -#ifdef XFT -#include -#include -#endif /* XXX TODO */ @@ -26,7 +22,7 @@ typedef struct W_FontPanel { WMFrame *upperF; WMTextField *sampleT; - + WMSplitView *split; WMFrame *lowerF; @@ -43,7 +39,7 @@ typedef struct W_FontPanel { WMButton *revertB; WMButton *setB; - + WMPropList *fdb; } FontPanel; @@ -69,27 +65,24 @@ typedef struct W_FontPanel { static int scalableFontSizes[] = { - 8, - 10, - 11, - 12, - 14, - 16, - 18, - 20, - 24, - 36, - 48, - 64 + 8, + 10, + 11, + 12, + 14, + 16, + 18, + 20, + 24, + 36, + 48, + 64 }; + +static void getSelectedFont(FontPanel *panel, char buffer[], int bufsize); -#ifdef XFT -static void setFontPanelFontName(FontPanel *panel, FcChar8 *family, FcChar8 *style, double size); -#endif - -static int isXLFD(char *font, int *length_ret); static void arrangeLowerFrame(FontPanel *panel); @@ -104,10 +97,10 @@ static void listFamilies(WMScreen *scr, WMFontPanel *panel); static void splitViewConstrainCallback(WMSplitView *sPtr, int indView, int *min, int *max) { - if (indView == 0) - *min = MIN_UPPER_HEIGHT; + if (indView == 0) + *min = MIN_UPPER_HEIGHT; else - *min = MIN_LOWER_HEIGHT; + *min = MIN_LOWER_HEIGHT; } static void @@ -117,42 +110,42 @@ notificationObserver(void *self, WMNotification *notif) void *object = WMGetNotificationObject(notif); if (WMGetNotificationName(notif) == WMViewSizeDidChangeNotification) { - if (object == WMWidgetView(panel->win)) { - int h = WMWidgetHeight(panel->win); - int w = WMWidgetWidth(panel->win); + if (object == WMWidgetView(panel->win)) { + int h = WMWidgetHeight(panel->win); + int w = WMWidgetWidth(panel->win); - WMResizeWidget(panel->split, w, h-BUTTON_SPACE_HEIGHT); + WMResizeWidget(panel->split, w, h-BUTTON_SPACE_HEIGHT); - WMMoveWidget(panel->setB, w-80, h-(BUTTON_SPACE_HEIGHT-5)); + WMMoveWidget(panel->setB, w-80, h-(BUTTON_SPACE_HEIGHT-5)); - WMMoveWidget(panel->revertB, w-240, h-(BUTTON_SPACE_HEIGHT-5)); + WMMoveWidget(panel->revertB, w-240, h-(BUTTON_SPACE_HEIGHT-5)); - } else if (object == WMWidgetView(panel->upperF)) { + } else if (object == WMWidgetView(panel->upperF)) { - if (WMWidgetHeight(panel->upperF) < MIN_UPPER_HEIGHT) { - WMResizeWidget(panel->upperF, WMWidgetWidth(panel->upperF), - MIN_UPPER_HEIGHT); - } else { - WMResizeWidget(panel->sampleT, WMWidgetWidth(panel->upperF)-20, - WMWidgetHeight(panel->upperF)-10); - } + if (WMWidgetHeight(panel->upperF) < MIN_UPPER_HEIGHT) { + WMResizeWidget(panel->upperF, WMWidgetWidth(panel->upperF), + MIN_UPPER_HEIGHT); + } else { + WMResizeWidget(panel->sampleT, WMWidgetWidth(panel->upperF)-20, + WMWidgetHeight(panel->upperF)-10); + } - } else if (object == WMWidgetView(panel->lowerF)) { + } else if (object == WMWidgetView(panel->lowerF)) { + + if (WMWidgetHeight(panel->lowerF) < MIN_LOWER_HEIGHT) { + WMResizeWidget(panel->upperF, WMWidgetWidth(panel->upperF), + MIN_UPPER_HEIGHT); - if (WMWidgetHeight(panel->lowerF) < MIN_LOWER_HEIGHT) { - WMResizeWidget(panel->upperF, WMWidgetWidth(panel->upperF), - MIN_UPPER_HEIGHT); + WMMoveWidget(panel->lowerF, 0, WMWidgetHeight(panel->upperF) + + WMGetSplitViewDividerThickness(panel->split)); - WMMoveWidget(panel->lowerF, 0, WMWidgetHeight(panel->upperF) - + WMGetSplitViewDividerThickness(panel->split)); - - WMResizeWidget(panel->lowerF, WMWidgetWidth(panel->lowerF), - WMWidgetWidth(panel->split) - MIN_UPPER_HEIGHT - - WMGetSplitViewDividerThickness(panel->split)); - } else { - arrangeLowerFrame(panel); - } - } + WMResizeWidget(panel->lowerF, WMWidgetWidth(panel->lowerF), + WMWidgetWidth(panel->split) - MIN_UPPER_HEIGHT + - WMGetSplitViewDividerThickness(panel->split)); + } else { + arrangeLowerFrame(panel); + } + } } } @@ -161,7 +154,7 @@ static void closeWindow(WMWidget *w, void *data) { FontPanel *panel = (FontPanel*)data; - + WMHideFontPanel(panel); } @@ -172,16 +165,16 @@ static void setClickedAction(WMWidget *w, void *data) { FontPanel *panel = (FontPanel*)data; - + if (panel->action) - (*panel->action)(panel, panel->data); + (*panel->action)(panel, panel->data); } static void revertClickedAction(WMWidget *w, void *data) { - /*FontPanel *panel = (FontPanel*)data;*/ + FontPanel *panel = (FontPanel*)data; /* XXX TODO */ } @@ -196,19 +189,18 @@ WMGetFontPanel(WMScreen *scr) int divThickness; if (scr->sharedFontPanel) - return scr->sharedFontPanel; + return scr->sharedFontPanel; panel = wmalloc(sizeof(FontPanel)); memset(panel, 0, sizeof(FontPanel)); - + panel->win = WMCreateWindow(scr, "fontPanel"); - /* WMSetWidgetBackgroundColor(panel->win, WMWhiteColor(scr));*/ - WMSetWindowTitle(panel->win, _("Font Panel")); +/* WMSetWidgetBackgroundColor(panel->win, WMWhiteColor(scr));*/ WMResizeWidget(panel->win, DEF_WIDTH, DEF_HEIGHT); WMSetWindowMinSize(panel->win, MIN_WIDTH, MIN_HEIGHT); WMSetViewNotifySizeChanges(WMWidgetView(panel->win), True); - + WMSetWindowCloseAction(panel->win, closeWindow, panel); panel->split = WMCreateSplitView(panel->win); @@ -221,7 +213,7 @@ WMGetFontPanel(WMScreen *scr) WMSetFrameRelief(panel->upperF, WRFlat); WMSetViewNotifySizeChanges(WMWidgetView(panel->upperF), True); panel->lowerF = WMCreateFrame(panel->win); - /* WMSetWidgetBackgroundColor(panel->lowerF, WMBlackColor(scr));*/ +/* WMSetWidgetBackgroundColor(panel->lowerF, WMBlackColor(scr));*/ WMSetFrameRelief(panel->lowerF, WRFlat); WMSetViewNotifySizeChanges(WMWidgetView(panel->lowerF), True); @@ -229,7 +221,7 @@ WMGetFontPanel(WMScreen *scr) WMAddSplitViewSubview(panel->split, W_VIEW(panel->lowerF)); WMResizeWidget(panel->upperF, DEF_WIDTH, DEF_UPPER_HEIGHT); - + WMResizeWidget(panel->lowerF, DEF_WIDTH, DEF_LOWER_HEIGHT); WMMoveWidget(panel->lowerF, 0, 60+divThickness); @@ -240,7 +232,7 @@ WMGetFontPanel(WMScreen *scr) panel->sampleT = WMCreateTextField(panel->upperF); WMResizeWidget(panel->sampleT, DEF_WIDTH - 20, 50); WMMoveWidget(panel->sampleT, 10, 10); - WMSetTextFieldText(panel->sampleT, _("The quick brown fox jumps over the lazy dog")); + WMSetTextFieldText(panel->sampleT, _("Test!!!")); font = WMBoldSystemFontOfSize(scr, 12); @@ -251,7 +243,7 @@ WMGetFontPanel(WMScreen *scr) WMSetLabelTextColor(panel->famL, white); WMSetLabelRelief(panel->famL, WRSunken); WMSetLabelTextAlignment(panel->famL, WACenter); - + panel->famLs = WMCreateList(panel->lowerF); WMSetListAction(panel->famLs, familyClick, panel); @@ -261,7 +253,7 @@ WMGetFontPanel(WMScreen *scr) WMSetLabelFont(panel->typL, font); WMSetLabelTextColor(panel->typL, white); WMSetLabelRelief(panel->typL, WRSunken); - WMSetLabelTextAlignment(panel->typL, WACenter); + WMSetLabelTextAlignment(panel->typL, WACenter); panel->typLs = WMCreateList(panel->lowerF); WMSetListAction(panel->typLs, typefaceClick, panel); @@ -275,7 +267,7 @@ WMGetFontPanel(WMScreen *scr) WMSetLabelTextAlignment(panel->sizL, WACenter); panel->sizT = WMCreateTextField(panel->lowerF); - /* WMSetTextFieldAlignment(panel->sizT, WARight);*/ +/* WMSetTextFieldAlignment(panel->sizT, WARight);*/ panel->sizLs = WMCreateList(panel->lowerF); WMSetListAction(panel->sizLs, sizeClick, panel); @@ -283,7 +275,7 @@ WMGetFontPanel(WMScreen *scr) WMReleaseFont(font); WMReleaseColor(white); WMReleaseColor(dark); - + panel->setB = WMCreateCommandButton(panel->win); WMResizeWidget(panel->setB, 70, 24); WMMoveWidget(panel->setB, 240, DEF_HEIGHT - (BUTTON_SPACE_HEIGHT-5)); @@ -312,20 +304,20 @@ WMGetFontPanel(WMScreen *scr) /* register notification observers */ - WMAddNotificationObserver(notificationObserver, panel, - WMViewSizeDidChangeNotification, - WMWidgetView(panel->win)); - WMAddNotificationObserver(notificationObserver, panel, - WMViewSizeDidChangeNotification, - WMWidgetView(panel->upperF)); - WMAddNotificationObserver(notificationObserver, panel, - WMViewSizeDidChangeNotification, - WMWidgetView(panel->lowerF)); + WMAddNotificationObserver(notificationObserver, panel, + WMViewSizeDidChangeNotification, + WMWidgetView(panel->win)); + WMAddNotificationObserver(notificationObserver, panel, + WMViewSizeDidChangeNotification, + WMWidgetView(panel->upperF)); + WMAddNotificationObserver(notificationObserver, panel, + WMViewSizeDidChangeNotification, + WMWidgetView(panel->lowerF)); listFamilies(scr, panel); - - + + return panel; } @@ -334,7 +326,7 @@ void WMFreeFontPanel(WMFontPanel *panel) { if (panel == WMWidgetScreen(panel->win)->sharedFontPanel) { - WMWidgetScreen(panel->win)->sharedFontPanel = NULL; + WMWidgetScreen(panel->win)->sharedFontPanel = NULL; } WMRemoveNotificationObserver(panel); WMUnmapWidget(panel->win); @@ -357,6 +349,21 @@ WMHideFontPanel(WMFontPanel *panel) } +void +WMSetFontPanelFont(WMFontPanel *panel, WMFont *font) +{ + +} + + +Bool +WMSetFontPanelFontName(WMFontPanel *panel, char *fontName) +{ + + return True; +} + + WMFont* WMGetFontPanelFont(WMFontPanel *panel) { @@ -364,38 +371,19 @@ WMGetFontPanelFont(WMFontPanel *panel) } -void -WMSetFontPanelFont(WMFontPanel *panel, char *fontName) +char* +WMGetFontPanelFontName(WMFontPanel *panel) { -#ifdef XFT - int fname_len; - FcPattern *pattern; - FcChar8 *family, *style; - double size; + char name[512]; - if (!isXLFD(fontName, &fname_len)) { - /* maybe its proper fontconfig and we can parse it */ - pattern = FcNameParse(fontName); - } else { - /* maybe its proper xlfd and we can convert it to an FcPattern */ - pattern = XftXlfdParse(fontName, False, False); - //FcPatternPrint(pattern); - } + getSelectedFont(panel, name, sizeof(name)); - if (!pattern) - return; - - if (FcPatternGetString(pattern, FC_FAMILY, 0, &family)==FcResultMatch) - if (FcPatternGetString(pattern, FC_STYLE, 0, &style)==FcResultMatch) - if (FcPatternGetDouble(pattern, "pixelsize", 0, &size)==FcResultMatch) - setFontPanelFontName(panel, family, style, size); - - FcPatternDestroy(pattern); -#endif + return wstrdup(name); } -void + +void WMSetFontPanelAction(WMFontPanel *panel, WMAction2 *action, void *data) { panel->action = action; @@ -416,7 +404,7 @@ arrangeLowerFrame(FontPanel *panel) #define LABEL_HEIGHT 20 height -= WMGetSplitViewDividerThickness(panel->split); - + height -= LABEL_HEIGHT + 8; @@ -470,22 +458,6 @@ arrangeLowerFrame(FontPanel *panel) -static int -isXLFD(char *font, int *length_ret) -{ - int c = 0; - - *length_ret = 0; - while (*font) { - (*length_ret)++; - if (*font++ == '-') - c++; - } - - return c==NUM_FIELDS; -} - -#ifndef XFT static Bool parseFont(char *font, char values[NUM_FIELDS][256]) { @@ -498,24 +470,40 @@ parseFont(char *font, char values[NUM_FIELDS][256]) ptr++; /* skip first - */ bptr = buffer; while (*ptr) { - if (*ptr == '-') { - *bptr = 0; - strcpy(values[part], buffer); - bptr = buffer; - part++; - } else { - *bptr++ = *ptr; - } - ptr++; + if (*ptr == '-') { + *bptr = 0; + strcpy(values[part], buffer); + bptr = buffer; + part++; + } else { + *bptr++ = *ptr; + } + ptr++; } *bptr = 0; strcpy(values[part], buffer); - + return True; } +static int +isXLFD(char *font, int *length_ret) +{ + int c = 0; + + *length_ret = 0; + while (*font) { + (*length_ret)++; + if (*font++ == '-') + c++; + } + + return c==NUM_FIELDS; +} + + typedef struct { @@ -524,10 +512,10 @@ typedef struct { char *setWidth; char *addStyle; - + char showSetWidth; /* when duplicated */ char showAddStyle; /* when duplicated */ - + WMArray *sizes; } Typeface; @@ -543,18 +531,6 @@ typedef struct { WMArray *typefaces; } Family; -#endif -#ifdef XFT -typedef struct { - char *typeface; - WMArray *sizes; -} Xft_Typeface; - -typedef struct { - char *name; /* gotta love simplicity */ - WMArray *typefaces; -} Xft_Family; -#endif @@ -566,69 +542,38 @@ compare_int(const void *a, const void *b) int i2 = *(int*)b; if (i1 < i2) - return -1; + return -1; else if (i1 > i2) - return 1; + return 1; else - return 0; + return 0; } + static void -#ifdef XFT -addSizeToTypeface(Xft_Typeface *face, int size) -#else addSizeToTypeface(Typeface *face, int size) -#endif { if (size == 0) { - int j; + int j; + + for (j = 0; j < sizeof(scalableFontSizes)/sizeof(int); j++) { + size = scalableFontSizes[j]; - for (j = 0; j < sizeof(scalableFontSizes)/sizeof(int); j++) { - size = scalableFontSizes[j]; - - if (!WMCountInArray(face->sizes, (void*)size)) { - WMAddToArray(face->sizes, (void*)size); - } - } - WMSortArray(face->sizes, compare_int); + if (!WMCountInArray(face->sizes, (void*)size)) { + WMAddToArray(face->sizes, (void*)size); + } + } + WMSortArray(face->sizes, compare_int); } else { - if (!WMCountInArray(face->sizes, (void*)size)) { - WMAddToArray(face->sizes, (void*)size); - WMSortArray(face->sizes, compare_int); - } + if (!WMCountInArray(face->sizes, (void*)size)) { + WMAddToArray(face->sizes, (void*)size); + WMSortArray(face->sizes, compare_int); + } } } -#ifdef XFT -static void -addTypefaceToXftFamily(Xft_Family *fam, char *style) -{ - Xft_Typeface *face; - WMArrayIterator i; - if(fam->typefaces) { - WM_ITERATE_ARRAY(fam->typefaces, face, i) { - if(strcmp(face->typeface, style) != 0) - continue; /* go to next interation */ - addSizeToTypeface(face, 0); - return; - } - } else { - fam->typefaces = WMCreateArray(4); - } - - face = wmalloc(sizeof(Xft_Typeface)); - memset(face, 0 , sizeof(Xft_Typeface)); - - face->typeface = wstrdup(style); - face->sizes = WMCreateArray(4); - addSizeToTypeface(face, 0); - - WMAddToArray(fam->typefaces, face); -} - -#else /* XFT */ static void addTypefaceToFamily(Family *family, char fontFields[NUM_FIELDS][256]) @@ -638,23 +583,23 @@ addTypefaceToFamily(Family *family, char fontFields[NUM_FIELDS][256]) if (family->typefaces) { WM_ITERATE_ARRAY(family->typefaces, face, i) { - int size; + int size; - if (strcmp(face->weight, fontFields[WEIGHT]) != 0) { - continue; - } - if (strcmp(face->slant, fontFields[SLANT]) != 0) { - continue; - } + if (strcmp(face->weight, fontFields[WEIGHT]) != 0) { + continue; + } + if (strcmp(face->slant, fontFields[SLANT]) != 0) { + continue; + } - size = atoi(fontFields[PIXEL_SIZE]); + size = atoi(fontFields[PIXEL_SIZE]); - addSizeToTypeface(face, size); + addSizeToTypeface(face, size); - return; - } + return; + } } else { - family->typefaces = WMCreateArray(4); + family->typefaces = WMCreateArray(4); } face = wmalloc(sizeof(Typeface)); @@ -670,47 +615,14 @@ addTypefaceToFamily(Family *family, char fontFields[NUM_FIELDS][256]) WMAddToArray(family->typefaces, face); } -#endif + /* * families (same family name) (Hashtable of family -> array) * registries (same family but different registries) - * + * */ -#ifdef XFT -static void -addFontToXftFamily(WMHashTable *families, char *name, char *style) -{ - WMArrayIterator i; - WMArray *array; - Xft_Family *fam; - - array = WMHashGet(families, name); - if(array) { - WM_ITERATE_ARRAY(array, fam, i) { - if(strcmp(fam->name, name) == 0 ) - addTypefaceToXftFamily(fam, style); - return; - } - } - - array = WMCreateArray(8); - - fam = wmalloc(sizeof(Xft_Family)); - memset(fam, 0, sizeof(Xft_Family)); - - fam->name = wstrdup(name); - - addTypefaceToXftFamily(fam, style); - - WMAddToArray(array, fam); - - WMHashInsert(families, fam->name, array); -} - -#else /* XFT */ - static void addFontToFamily(WMHashTable *families, char fontFields[NUM_FIELDS][256]) { @@ -720,87 +632,87 @@ addFontToFamily(WMHashTable *families, char fontFields[NUM_FIELDS][256]) family = WMHashGet(families, fontFields[FAMILY]); - + if (family) { - /* look for same encoding/registry and foundry */ + /* look for same encoding/registry and foundry */ WM_ITERATE_ARRAY(family, fam, i) { - int enc, reg, found; + int enc, reg, found; - enc = (strcmp(fam->encoding, fontFields[ENCODING]) == 0); - reg = (strcmp(fam->registry, fontFields[REGISTRY]) == 0); - found = (strcmp(fam->foundry, fontFields[FOUNDRY]) == 0); + enc = (strcmp(fam->encoding, fontFields[ENCODING]) == 0); + reg = (strcmp(fam->registry, fontFields[REGISTRY]) == 0); + found = (strcmp(fam->foundry, fontFields[FOUNDRY]) == 0); - if (enc && reg && found) { - addTypefaceToFamily(fam, fontFields); - return; - } - } - /* look for same encoding/registry */ + if (enc && reg && found) { + addTypefaceToFamily(fam, fontFields); + return; + } + } + /* look for same encoding/registry */ WM_ITERATE_ARRAY(family, fam, i) { - int enc, reg; + int enc, reg; + + enc = (strcmp(fam->encoding, fontFields[ENCODING]) == 0); + reg = (strcmp(fam->registry, fontFields[REGISTRY]) == 0); - enc = (strcmp(fam->encoding, fontFields[ENCODING]) == 0); - reg = (strcmp(fam->registry, fontFields[REGISTRY]) == 0); + if (enc && reg) { + /* has the same encoding, but the foundry is different */ + fam->showFoundry = 1; - if (enc && reg) { - /* has the same encoding, but the foundry is different */ - fam->showFoundry = 1; + fam = wmalloc(sizeof(Family)); + memset(fam, 0, sizeof(Family)); - fam = wmalloc(sizeof(Family)); - memset(fam, 0, sizeof(Family)); + fam->name = wstrdup(fontFields[FAMILY]); + fam->foundry = wstrdup(fontFields[FOUNDRY]); + fam->registry = wstrdup(fontFields[REGISTRY]); + fam->encoding = wstrdup(fontFields[ENCODING]); + fam->showFoundry = 1; - fam->name = wstrdup(fontFields[FAMILY]); - fam->foundry = wstrdup(fontFields[FOUNDRY]); - fam->registry = wstrdup(fontFields[REGISTRY]); - fam->encoding = wstrdup(fontFields[ENCODING]); - fam->showFoundry = 1; + addTypefaceToFamily(fam, fontFields); - addTypefaceToFamily(fam, fontFields); - - WMAddToArray(family, fam); - return; - } - } - /* look for same foundry */ + WMAddToArray(family, fam); + return; + } + } + /* look for same foundry */ WM_ITERATE_ARRAY(family, fam, i) { - int found; + int found; + + found = (strcmp(fam->foundry, fontFields[FOUNDRY]) == 0); - found = (strcmp(fam->foundry, fontFields[FOUNDRY]) == 0); + if (found) { + /* has the same foundry, but encoding is different */ + fam->showRegistry = 1; - if (found) { - /* has the same foundry, but encoding is different */ - fam->showRegistry = 1; + fam = wmalloc(sizeof(Family)); + memset(fam, 0, sizeof(Family)); - fam = wmalloc(sizeof(Family)); - memset(fam, 0, sizeof(Family)); + fam->name = wstrdup(fontFields[FAMILY]); + fam->foundry = wstrdup(fontFields[FOUNDRY]); + fam->registry = wstrdup(fontFields[REGISTRY]); + fam->encoding = wstrdup(fontFields[ENCODING]); + fam->showRegistry = 1; - fam->name = wstrdup(fontFields[FAMILY]); - fam->foundry = wstrdup(fontFields[FOUNDRY]); - fam->registry = wstrdup(fontFields[REGISTRY]); - fam->encoding = wstrdup(fontFields[ENCODING]); - fam->showRegistry = 1; + addTypefaceToFamily(fam, fontFields); - addTypefaceToFamily(fam, fontFields); + WMAddToArray(family, fam); + return; + } + } + /* foundry and encoding do not match anything known */ + fam = wmalloc(sizeof(Family)); + memset(fam, 0, sizeof(Family)); - WMAddToArray(family, fam); - return; - } - } - /* foundry and encoding do not match anything known */ - fam = wmalloc(sizeof(Family)); - memset(fam, 0, sizeof(Family)); + fam->name = wstrdup(fontFields[FAMILY]); + fam->foundry = wstrdup(fontFields[FOUNDRY]); + fam->registry = wstrdup(fontFields[REGISTRY]); + fam->encoding = wstrdup(fontFields[ENCODING]); + fam->showFoundry = 1; + fam->showRegistry = 1; - fam->name = wstrdup(fontFields[FAMILY]); - fam->foundry = wstrdup(fontFields[FOUNDRY]); - fam->registry = wstrdup(fontFields[REGISTRY]); - fam->encoding = wstrdup(fontFields[ENCODING]); - fam->showFoundry = 1; - fam->showRegistry = 1; + addTypefaceToFamily(fam, fontFields); - addTypefaceToFamily(fam, fontFields); - - WMAddToArray(family, fam); - return; + WMAddToArray(family, fam); + return; } family = WMCreateArray(8); @@ -812,140 +724,87 @@ addFontToFamily(WMHashTable *families, char fontFields[NUM_FIELDS][256]) fam->foundry = wstrdup(fontFields[FOUNDRY]); fam->registry = wstrdup(fontFields[REGISTRY]); fam->encoding = wstrdup(fontFields[ENCODING]); - + addTypefaceToFamily(fam, fontFields); - + WMAddToArray(family, fam); WMHashInsert(families, fam->name, family); } -#endif /* XFT */ static void listFamilies(WMScreen *scr, WMFontPanel *panel) { -#ifdef XFT - FcObjectSet *os = 0; - FcFontSet *fs; - FcPattern *pat; -#else /* XFT */ char **fontList; - char fields[NUM_FIELDS][256]; - int count; -#endif /* XFT */ WMHashTable *families; + char fields[NUM_FIELDS][256]; WMHashEnumerator enumer; WMArray *array; - int i; + int i, count; -#ifdef XFT - pat = FcPatternCreate(); - os = FcObjectSetBuild(FC_FAMILY, FC_STYLE, 0); - fs = FcFontList(0, pat, os); - if (!fs) { - WMRunAlertPanel(scr, panel->win, _("Error"), - _("Could not init font config library\n"), _("OK"), NULL, NULL); - return; - } - if (pat) - FcPatternDestroy (pat); -#else /* XFT */ - fontList = XListFonts(scr->display, ALL_FONTS_MASK, MAX_FONTS_TO_RETRIEVE, + fontList = XListFonts(scr->display, ALL_FONTS_MASK, MAX_FONTS_TO_RETRIEVE, &count); if (!fontList) { - WMRunAlertPanel(scr, panel->win, _("Error"), - _("Could not retrieve font list"), _("OK"), NULL, NULL); - return; + WMRunAlertPanel(scr, panel->win, _("Error"), + _("Could not retrieve font list"), _("OK"), NULL, NULL); + return; } -#endif /* XFT */ families = WMCreateHashTable(WMStringPointerHashCallbacks); -#ifdef XFT - if(fs) { - for (i = 0; i < fs->nfont; i++) { - FcChar8 *family; - FcChar8 *style; - - if (FcPatternGetString(fs->fonts[i],FC_FAMILY,0,&family)==FcResultMatch) - if (FcPatternGetString(fs->fonts[i],FC_STYLE,0,&style)==FcResultMatch) - addFontToXftFamily(families, family, style); - } - FcFontSetDestroy(fs); - } -#else /* XFT */ for (i = 0; i < count; i++) { - int fname_len; + int fname_len; - if (!isXLFD(fontList[i], &fname_len)) { - *fontList[i] = '\0'; - continue; - } - if (fname_len > 255) { - wwarning(_("font name %s is longer than 256, which is invalid."), - fontList[i]); - *fontList[i] = '\0'; - continue; - } - if (!parseFont(fontList[i], fields)) { - *fontList[i] = '\0'; - continue; - } - addFontToFamily(families, fields); + if (!isXLFD(fontList[i], &fname_len)) { + *fontList[i] = '\0'; + continue; + } + if (fname_len > 255) { + wwarning(_("font name %s is longer than 256, which is invalid."), + fontList[i]); + *fontList[i] = '\0'; + continue; + } + if (!parseFont(fontList[i], fields)) { + *fontList[i] = '\0'; + continue; + } + addFontToFamily(families, fields); } -#endif /* XFT */ enumer = WMEnumerateHashTable(families); - -#ifdef XFT + while ((array = WMNextHashEnumeratorItem(&enumer))) { - WMArrayIterator i; - Xft_Family *fam; - char buffer[256]; - WMListItem *item; + WMArrayIterator i; + Family *fam; + char buffer[256]; + WMListItem *item; WM_ITERATE_ARRAY(array, fam, i) { - strcpy(buffer, fam->name); - item = WMAddListItem(panel->famLs, buffer); - - item->clientData = fam; - } + strcpy(buffer, fam->name); + if (fam->showFoundry) { + strcat(buffer, " "); + strcat(buffer, fam->foundry); + strcat(buffer, " "); + } + if (fam->showRegistry) { + strcat(buffer, " ("); + strcat(buffer, fam->registry); + strcat(buffer, "-"); + strcat(buffer, fam->encoding); + strcat(buffer, ")"); + } + item = WMAddListItem(panel->famLs, buffer); + + item->clientData = fam; + } WMFreeArray(array); } -#else /* XFT */ - while ((array = WMNextHashEnumeratorItem(&enumer))) { - WMArrayIterator i; - Family *fam; - char buffer[256]; - WMListItem *item; - - WM_ITERATE_ARRAY(array, fam, i) { - strcpy(buffer, fam->name); - - if (fam->showFoundry) { - strcat(buffer, " "); - strcat(buffer, fam->foundry); - strcat(buffer, " "); - } - if (fam->showRegistry) { - strcat(buffer, " ("); - strcat(buffer, fam->registry); - strcat(buffer, "-"); - strcat(buffer, fam->encoding); - strcat(buffer, ")"); - } - item = WMAddListItem(panel->famLs, buffer); - - item->clientData = fam; - } - WMFreeArray(array); - } -#endif /* XFT */ WMSortListItems(panel->famLs); - + WMFreeHashTable(families); } @@ -954,42 +813,23 @@ static void getSelectedFont(FontPanel *panel, char buffer[], int bufsize) { WMListItem *item; -#ifdef XFT - Xft_Family *family; - Xft_Typeface *face; -#else Family *family; Typeface *face; -#endif char *size; - + item = WMGetListSelectedItem(panel->famLs); if (!item) - return; -#ifdef XFT - family = (Xft_Family*)item->clientData; -#else + return; family = (Family*)item->clientData; -#endif item = WMGetListSelectedItem(panel->typLs); if (!item) - return; -#ifdef XFT - face = (Xft_Typeface*)item->clientData; -#else + return; face = (Typeface*)item->clientData; -#endif size = WMGetTextFieldText(panel->sizT); -#ifdef XFT - snprintf(buffer, bufsize, "%s:style=%s:pixelsize=%s", - family->name, - face->typeface, - size); -#else snprintf(buffer, bufsize, "-%s-%s-%s-%s-%s-%s-%s-*-*-*-*-*-%s-%s", family->foundry, family->name, @@ -1000,7 +840,7 @@ getSelectedFont(FontPanel *panel, char buffer[], int bufsize) size, family->registry, family->encoding); -#endif /* XFT */ + wfree(size); } @@ -1011,30 +851,26 @@ preview(FontPanel *panel) { char buffer[512]; WMFont *font; - + getSelectedFont(panel, buffer, sizeof(buffer)); + font = WMCreateFont(WMWidgetScreen(panel->win), buffer); if (font) { - WMSetTextFieldFont(panel->sampleT, font); - WMReleaseFont(font); + WMSetTextFieldFont(panel->sampleT, font); + WMReleaseFont(font); } } -static void +static void familyClick(WMWidget *w, void *data) { WMList *lPtr = (WMList*)w; WMListItem *item; -#ifdef XFT - Xft_Family *family; - Xft_Typeface *face; -#else Family *family; - Typeface *face; -#endif FontPanel *panel = (FontPanel*)data; + Typeface *face; WMArrayIterator i; /* current typeface and size */ char *oface = NULL; @@ -1045,107 +881,92 @@ familyClick(WMWidget *w, void *data) /* must try to keep the same typeface and size for the new family */ item = WMGetListSelectedItem(panel->typLs); if (item) - oface = wstrdup(item->text); + oface = wstrdup(item->text); osize = WMGetTextFieldText(panel->sizT); item = WMGetListSelectedItem(lPtr); -#ifdef XFT - family = (Xft_Family*)item->clientData; -#else family = (Family*)item->clientData; -#endif WMClearList(panel->typLs); WM_ITERATE_ARRAY(family->typefaces, face, i) { - char buffer[256]; - int top=0; - WMListItem *fitem; + char buffer[256]; + int top=0; + WMListItem *fitem; + + if (strcmp(face->weight, "medium") == 0) { + buffer[0] = 0; + } else { + if (*face->weight) { + strcpy(buffer, face->weight); + buffer[0] = toupper(buffer[0]); + strcat(buffer, " "); + } else { + buffer[0] = 0; + } + } -#ifdef XFT - strcpy(buffer, face->typeface); - if(strcasecmp(face->typeface, "Roman") == 0) - top = 1; - if(strcasecmp(face->typeface, "Regular") == 0) - top = 1; -#else - if (strcmp(face->weight, "medium") == 0) { - buffer[0] = 0; - } else { - if (*face->weight) { - strcpy(buffer, face->weight); - buffer[0] = toupper(buffer[0]); - strcat(buffer, " "); - } else { - buffer[0] = 0; - } - } + if (strcmp(face->slant, "r") == 0) { + strcat(buffer, _("Roman")); + top = 1; + } else if (strcmp(face->slant, "i") == 0) { + strcat(buffer, _("Italic")); + } else if (strcmp(face->slant, "o") == 0) { + strcat(buffer, _("Oblique")); + } else if (strcmp(face->slant, "ri") == 0) { + strcat(buffer, _("Rev Italic")); + } else if (strcmp(face->slant, "ro") == 0) { + strcat(buffer, _("Rev Oblique")); + } else { + strcat(buffer, face->slant); + } - if (strcmp(face->slant, "r") == 0) { - strcat(buffer, _("Roman")); - top = 1; - } else if (strcmp(face->slant, "i") == 0) { - strcat(buffer, _("Italic")); - } else if (strcmp(face->slant, "o") == 0) { - strcat(buffer, _("Oblique")); - } else if (strcmp(face->slant, "ri") == 0) { - strcat(buffer, _("Rev Italic")); - } else if (strcmp(face->slant, "ro") == 0) { - strcat(buffer, _("Rev Oblique")); - } else { - strcat(buffer, face->slant); - } + if (buffer[0] == 0) { + strcpy(buffer, _("Normal")); + } - if (buffer[0] == 0) { - strcpy(buffer, _("Normal")); - } -#endif - if (top) - fitem = WMInsertListItem(panel->typLs, 0, buffer); - else - fitem = WMAddListItem(panel->typLs, buffer); - fitem->clientData = face; + if (top) + fitem = WMInsertListItem(panel->typLs, 0, buffer); + else + fitem = WMAddListItem(panel->typLs, buffer); + fitem->clientData = face; } if (oface) { - facei = WMFindRowOfListItemWithTitle(panel->typLs, oface); - wfree(oface); + facei = WMFindRowOfListItemWithTitle(panel->typLs, oface); + wfree(oface); } if (facei < 0) { - facei = 0; + facei = 0; } WMSelectListItem(panel->typLs, facei); typefaceClick(panel->typLs, panel); - + if (osize) { - sizei = WMFindRowOfListItemWithTitle(panel->sizLs, osize); + sizei = WMFindRowOfListItemWithTitle(panel->sizLs, osize); } if (sizei >= 0) { - WMSelectListItem(panel->sizLs, sizei); - sizeClick(panel->sizLs, panel); + WMSelectListItem(panel->sizLs, sizei); + sizeClick(panel->sizLs, panel); } if (osize) - wfree(osize); + wfree(osize); preview(panel); } -static void +static void typefaceClick(WMWidget *w, void *data) { FontPanel *panel = (FontPanel*)data; WMListItem *item; -#ifdef XFT - Xft_Typeface *face; -#else Typeface *face; -#endif WMArrayIterator i; char buffer[32]; @@ -1157,138 +978,50 @@ typefaceClick(WMWidget *w, void *data) item = WMGetListSelectedItem(panel->typLs); -#ifdef XFT - face = (Xft_Typeface*)item->clientData; -#else face = (Typeface*)item->clientData; -#endif - + WMClearList(panel->sizLs); WM_ITERATE_ARRAY(face->sizes, size, i) { - if ((int)size != 0) { - sprintf(buffer, "%i", (int)size); + if ((int)size != 0) { + sprintf(buffer, "%i", (int)size); - WMAddListItem(panel->sizLs, buffer); - } + WMAddListItem(panel->sizLs, buffer); + } } if (osize) { - sizei = WMFindRowOfListItemWithTitle(panel->sizLs, osize); + sizei = WMFindRowOfListItemWithTitle(panel->sizLs, osize); } if (sizei < 0) { - sizei = WMFindRowOfListItemWithTitle(panel->sizLs, "12"); + sizei = WMFindRowOfListItemWithTitle(panel->sizLs, "12"); } if (sizei < 0) { - sizei = 0; + sizei = 0; } WMSelectListItem(panel->sizLs, sizei); WMSetListPosition(panel->sizLs, sizei); sizeClick(panel->sizLs, panel); if (osize) - wfree(osize); + wfree(osize); preview(panel); } -static void + +static void sizeClick(WMWidget *w, void *data) { FontPanel *panel = (FontPanel*)data; WMListItem *item; - + item = WMGetListSelectedItem(panel->sizLs); - WMSetTextFieldText(panel->sizT, item->text); + WMSetTextFieldText(panel->sizT, item->text); + WMSelectTextFieldRange(panel->sizT, wmkrange(0, strlen(item->text))); preview(panel); } - -#ifdef XFT -static void -setFontPanelFontName(FontPanel *panel, FcChar8 *family, FcChar8 *style, double size) -{ - int famrow; - int stlrow; - int sz; - char asize[64]; - void *vsize; - WMListItem *item; - Xft_Family *fam; - Xft_Typeface *face; - WMArrayIterator i; - - famrow = WMFindRowOfListItemWithTitle(panel->famLs, family); - if (famrow < 0 ){ - famrow = 0; - return; - } - WMSelectListItem(panel->famLs, famrow); - WMSetListPosition(panel->famLs, famrow); - - WMClearList(panel->typLs); - - item = WMGetListSelectedItem(panel->famLs); - - fam = (Xft_Family*)item->clientData; - WM_ITERATE_ARRAY(fam->typefaces, face, i) { - char buffer[256]; - int top=0; - WMListItem *fitem; - - strcpy(buffer, face->typeface); - if(strcasecmp(face->typeface, "Roman") == 0) - top = 1; - if (top) - fitem = WMInsertListItem(panel->typLs, 0, buffer); - else - fitem = WMAddListItem(panel->typLs, buffer); - fitem->clientData = face; - } - - - stlrow = WMFindRowOfListItemWithTitle(panel->typLs, style); - - if (stlrow < 0) { - stlrow = 0; - return; - } - - WMSelectListItem(panel->typLs, stlrow); - - item = WMGetListSelectedItem(panel->typLs); - - face = (Xft_Typeface*)item->clientData; - - WMClearList(panel->sizLs); - - - WM_ITERATE_ARRAY(face->sizes, vsize, i) { - char buffer[32]; - if ((int)vsize != 0) { - sprintf(buffer, "%i", (int)vsize); - - WMAddListItem(panel->sizLs, buffer); - } - } - - snprintf(asize, sizeof(asize)-1, "%d",(int)(size+0.5)); - - sz = WMFindRowOfListItemWithTitle(panel->sizLs, asize); - - if (sz < 0) { - sz = 4; - return; - } - - WMSelectListItem(panel->sizLs, sz); - sizeClick(panel->sizLs, panel); - - return; -} - -#endif - diff --git a/WINGs/widgets.c b/WINGs/widgets.c index 1bc5b6e3..f06bdafd 100644 --- a/WINGs/widgets.c +++ b/WINGs/widgets.c @@ -12,8 +12,6 @@ #include #include -#include - /********** data ************/ @@ -593,7 +591,6 @@ WMCreateScreenWithRContext(Display *display, int screen, RContext *context) "WM_STATE" }; Atom atoms[sizeof(atomNames)/sizeof(char*)]; - char *locale; int i; if (!initialized) { @@ -759,20 +756,16 @@ WMCreateScreenWithRContext(Display *display, int screen, RContext *context) scrPtr->stipple = stipple; scrPtr->useMultiByte = WINGsConfiguration.useMultiByte; - scrPtr->useMultiByte = 0; - locale = setlocale(LC_CTYPE, NULL); - //printf("LC_CTYPE=%s\n", locale); - if (!locale || strcmp(locale, "C")==0 || strcmp(locale, "POSIX")==0) - scrPtr->useWideChar = 0; - else - scrPtr->useWideChar = 1; + scrPtr->useWideChar = 1; scrPtr->antialiasedText = WINGsConfiguration.antialiasedText; - scrPtr->normalFont = WMSystemFontOfSize(scrPtr, 0); + scrPtr->normalFont = WMSystemFontOfSize(scrPtr, + WINGsConfiguration.defaultFontSize); - scrPtr->boldFont = WMBoldSystemFontOfSize(scrPtr, 0); + scrPtr->boldFont = WMBoldSystemFontOfSize(scrPtr, + WINGsConfiguration.defaultFontSize); if (!scrPtr->boldFont) scrPtr->boldFont = scrPtr->normalFont; diff --git a/WINGs/winputmethod.c b/WINGs/winputmethod.c index eb91211d..c0ed4ef8 100644 --- a/WINGs/winputmethod.c +++ b/WINGs/winputmethod.c @@ -22,8 +22,7 @@ typedef struct W_ICContext { -Bool -W_InitIMStuff(WMScreen *scr) +Bool W_InitIMStuff(WMScreen *scr) { WMIMContext *ctx; @@ -39,8 +38,7 @@ W_InitIMStuff(WMScreen *scr) } -void -W_CloseIMStuff(WMScreen *scr) +void W_CloseIMStuff(WMScreen *scr) { if (!scr->imctx) return; @@ -53,8 +51,7 @@ W_CloseIMStuff(WMScreen *scr) -WMICContext* -W_CreateIC(WMView *view) +WMICContext *W_CreateIC(WMView *view) { WMScreen *scr = W_VIEW_SCREEN(view); WMICContext *ctx; @@ -63,12 +60,11 @@ W_CreateIC(WMView *view) ctx->next = scr->imctx->icList; if (scr->imctx->icList) scr->imctx->icList->prev = ctx; - //scr->imctx = ctx; + scr->imctx = ctx; } -void -W_DestroyIC(WMICContext *ctx) +void W_DestroyIC(WMICContext *ctx) { XDestroyIC(ctx->xic); @@ -76,9 +72,8 @@ W_DestroyIC(WMICContext *ctx) } -int -W_LookupString(WMView *view, XKeyEvent *event, - char buffer, int bufsize, KeySym ksym) +int W_LookupString(WMView *view, XKeyEvent *event, + char buffer, int bufsize, KeySym ksym) { } diff --git a/WINGs/wmisc.c b/WINGs/wmisc.c index e3b65ce3..f8bfdb47 100644 --- a/WINGs/wmisc.c +++ b/WINGs/wmisc.c @@ -120,7 +120,6 @@ fitText(char *text, WMFont *font, int width, int wrap) i = j; } } else { - //i = strcspn(text, "\n\r"); while (text[i]!='\n' && text[i]!=0) i++; } diff --git a/WINGs/wscroller.c b/WINGs/wscroller.c index 263848aa..4ddbd38e 100644 --- a/WINGs/wscroller.c +++ b/WINGs/wscroller.c @@ -306,9 +306,10 @@ paintArrow(WMScroller *sPtr, Drawable d, int part) gc = scr->whiteGC; #endif } - - + + if (sPtr->flags.horizontal) { + /* paint button */ #ifndef DOUBLE_BUFFER XFillRectangle(scr->display, d, gc, @@ -325,7 +326,7 @@ paintArrow(WMScroller *sPtr, Drawable d, int part) XSetClipOrigin(scr->display, scr->clipGC, ofs + (BUTTON_SIZE - arrow->width) / 2, 2 + (BUTTON_SIZE - arrow->height) / 2); - + XCopyArea(scr->display, arrow->pixmap, d, scr->clipGC, 0, 0, arrow->width, arrow->height, ofs + (BUTTON_SIZE - arrow->width) / 2, diff --git a/WPrefs.app/Expert.c b/WPrefs.app/Expert.c index 974e9fdb..ece04a7f 100644 --- a/WPrefs.app/Expert.c +++ b/WPrefs.app/Expert.c @@ -84,7 +84,7 @@ createPanel(Panel *p) WMSetButtonText(panel->swi[7], _("Smooth font edges (needs restart).")); //if (!WMHasAntialiasingSupport(WMWidgetScreen(panel->box))) - WMSetButtonEnabled(panel->swi[7], True); + WMSetButtonEnabled(panel->swi[7], False); WMRealizeWidget(panel->box); WMMapSubwidgets(panel->box); diff --git a/WPrefs.app/Font.c b/WPrefs.app/Font.c index a6d01074..4d5c8b28 100644 --- a/WPrefs.app/Font.c +++ b/WPrefs.app/Font.c @@ -23,7 +23,7 @@ #include "WPrefs.h" #include -#include + typedef struct _Panel { WMBox *box; @@ -358,7 +358,7 @@ paintItems(WMScreen *scr, Drawable d, WMColor *color, WMFont *font, int l = strlen(text); int x = previewPositions[part].pos.x; int y = previewPositions[part].pos.y; - //int w = previewPositions[part].size.width; + int w = previewPositions[part].size.width; int h = previewPositions[part].size.height/4; int i; for( i = 0; i < 4 ; i++) { @@ -443,7 +443,7 @@ dumpRImage(char *path, RImage *image) } } -/*static int +static int isPixmap(WMPropList *prop) { WMPropList *p; @@ -455,7 +455,7 @@ isPixmap(WMPropList *prop) return 1; else return 0; -}*/ +} static Pixmap renderTexture(WMScreen *scr, WMPropList *texture, int width, int height, @@ -669,7 +669,7 @@ renderMenu(_Panel *panel, WMPropList *texture, int width, int iheight) WMScreen *scr = WMWidgetScreen(panel->parent); Display *dpy = WMScreenDisplay(scr); Pixmap pix, tmp; - //RContext *rc = WMScreenRContext(scr); + RContext *rc = WMScreenRContext(scr); GC gc = XCreateGC(dpy, WMWidgetXID(panel->parent), 0, NULL); int i; @@ -835,7 +835,7 @@ paintPreviewBox(Panel *panel, int elements) { WMScreen *scr = WMWidgetScreen(panel->parent); Display *dpy = WMScreenDisplay(scr); - //int refresh = 0; + int refresh = 0; GC gc; WMColor *black = WMBlackColor(scr); Pixmap mitem; @@ -926,7 +926,7 @@ static void paintTextField(void *data, int section) { _Panel *panel = (_Panel*)data; - //char *sample = NULL; + char *sample = NULL; int encoding; encoding = WMGetPopUpButtonSelectedItem(panel->langP); WMSetTextFieldFont(panel->fontT, getFontForPreview(panel, section)); @@ -1072,7 +1072,7 @@ refillFontSetList(void *data) char *encoding = getFontEncoding(panel); int section = WMGetPopUpButtonSelectedItem(panel->fontSel); int i; - //int pos; + int pos; WMClearList(panel->fsetLs); if(!encoding) { array = getCurrentFontProp(panel, section); @@ -1259,7 +1259,7 @@ static void changeLanguageAction(WMWidget *w, void *data) { Panel *panel = (Panel*)data; - //WMScreen *scr = WMWidgetScreen(panel->box); + WMScreen *scr = WMWidgetScreen(panel->box); int section; section = WMGetPopUpButtonSelectedItem(w); @@ -1314,7 +1314,7 @@ static char* getFontSampleString(void *data) { _Panel *panel = (_Panel*)data; - //WMScreen *scr = WMWidgetScreen(panel->box); + WMScreen *scr = WMWidgetScreen(panel->box); WMMenuItem *mi; WMPropList *pl; int section; @@ -1336,7 +1336,7 @@ static char* getFontEncoding(void *data) { _Panel *panel = (_Panel*)data; - //WMScreen *scr = WMWidgetScreen(panel->box); + WMScreen *scr = WMWidgetScreen(panel->box); WMMenuItem *mi; WMPropList *pl; int section; @@ -1358,7 +1358,7 @@ static Bool isEncodingMultiByte(void *data) { _Panel *panel = (_Panel*)data; - //WMScreen *scr = WMWidgetScreen(panel->box); + WMScreen *scr = WMWidgetScreen(panel->box); WMMenuItem *mi; WMPropList *pl; int section; @@ -1473,20 +1473,26 @@ getDefaultSystemFont(void *data, int element) { _Panel *panel = (_Panel*)data; WMScreen *scr = WMWidgetScreen(panel->box); - - switch(element) { - case 0: - case 2: - return WMBoldSystemFontOfSize(scr, 12); - case 1: - return WMBoldSystemFontOfSize(scr, 24); - case 4: - case 5: - return WMSystemFontOfSize(scr, 8); - case 3: - default: - return WMSystemFontOfSize(scr, 12); - } + switch(element) { + case 0: + return WMBoldSystemFontOfSize(scr, 12); + break; + case 1: + return WMBoldSystemFontOfSize(scr, 24); + break; + case 2: + return WMBoldSystemFontOfSize(scr, 12); + break; + case 3: + return WMSystemFontOfSize(scr, 12); + break; + case 4: + return WMSystemFontOfSize(scr, 8); + break; + case 5: + return WMSystemFontOfSize(scr, 8); + break; + } } static void @@ -1509,7 +1515,7 @@ static void toggleAA(WMWidget *w, void *data) { _Panel *panel = (_Panel*)data; - //int section; + int section; if(panel->AntialiasedText) panel->AntialiasedText = False; else @@ -1616,7 +1622,7 @@ addButtonAction(WMWidget *w, void *data) array = getDefaultFontProp(panel, encoding, section); WMHideFontPanel(panel->fontPanel); - chosenFont = WMGetFontName(WMGetFontPanelFont(panel->fontPanel)); + chosenFont = WMGetFontPanelFontName(panel->fontPanel); string = WMCreatePLString(chosenFont); pos = WMGetListSelectedItemRow(panel->fsetLs); WMInsertListItem(panel->fsetLs, pos+1, chosenFont); @@ -1645,7 +1651,7 @@ changeButtonAction(WMWidget *w, void *data) WMHideFontPanel(panel->fontPanel); - chosenFont = WMGetFontName(WMGetFontPanelFont(panel->fontPanel)); + chosenFont = WMGetFontPanelFontName(panel->fontPanel); string = WMCreatePLString(chosenFont); pos = WMGetListSelectedItemRow(panel->fsetLs); @@ -1714,7 +1720,7 @@ removeButtonClick(WMWidget *w, void *data) static void showData(_Panel *panel) { - //WMScreen *scr = WMWidgetScreen(panel->parent); + WMScreen *scr = WMWidgetScreen(panel->parent); char *str; int i; diff --git a/WPrefs.app/Makefile.am b/WPrefs.app/Makefile.am index 917ee3fa..e2e65d77 100644 --- a/WPrefs.app/Makefile.am +++ b/WPrefs.app/Makefile.am @@ -42,9 +42,7 @@ WPrefs_SOURCES = \ imagebrowser.h \ xmodifier.c -AM_CPPFLAGS = -DLOCALEDIR=\"$(NLSDIR)\" - -AM_CFLAGS = -fno-strict-aliasing +AM_CPPFLAGS = @CPPFLAGS@ -DLOCALEDIR=\"$(NLSDIR)\" INCLUDES = -I$(top_srcdir)/wrlib -I$(top_srcdir)/WINGs @HEADER_SEARCH_PATH@ diff --git a/acinclude.m4 b/acinclude.m4 index ee22091b..f0f906b1 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -24,42 +24,6 @@ CPPFLAGS="$CPPFLAGS_old" ]) -dnl -dnl WM_CHECK_XFT_VERSION(MIN_VERSION, [ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]]) -dnl -dnl # $XFTFLAGS should be defined before calling this macro, -dnl # else it will not be able to find Xft.h -dnl -AC_DEFUN(WM_CHECK_XFT_VERSION, -[ -CPPFLAGS_old="$CPPFLAGS" -CPPFLAGS="$CPPFLAGS $XFTFLAGS $inc_search_path" -xft_major_version=`echo $1 | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` -xft_minor_version=`echo $1 | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` -xft_micro_version=`echo $1 | sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` -AC_MSG_CHECKING([whether libXft is at least version $1]) -AC_CACHE_VAL(ac_cv_lib_xft_version_ok, -[AC_TRY_LINK( -[/* Test version of libXft we have */ -#include - -#if !defined(XFT_VERSION) || XFT_VERSION < $xft_major_version*10000 + $xft_minor_version*100 + $xft_micro_version -#error libXft on this system is too old. Consider upgrading to at least $1 -#endif -], [], -eval "ac_cv_lib_xft_version_ok=yes", -eval "ac_cv_lib_xft_version_ok=no")]) -if eval "test \"`echo '$ac_cv_lib_xft_version_ok'`\" = yes"; then - AC_MSG_RESULT(yes) - ifelse([$2], , :, [$2]) -else - AC_MSG_RESULT(no) - ifelse([$3], , , [$3]) -fi -CPPFLAGS="$CPPFLAGS_old" -]) - - dnl dnl WM_CHECK_REDCRAP_BUGS(prefix,bindir,libdir) dnl diff --git a/configure.ac b/configure.ac index 7f8ef85a..eabd927f 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,7 @@ AC_INIT(src/WindowMaker.h) -AM_INIT_AUTOMAKE(WindowMaker, 0.85.0) +AM_INIT_AUTOMAKE(WindowMaker, 0.90.0) AC_PROG_LIBTOOL @@ -519,54 +519,35 @@ fi dnl Xft antialiased font support dnl ============================ - xft=yes XFTLIBS="" +AC_ARG_ENABLE(xft, +[ --disable-xft disable Xft antialiased font support], + xft=$enableval, xft=yes) -if test "x$PKGCONFIG" != x -a "`$PKGCONFIG xft; echo $?`" = 0; then - XFTCONFIG="$PKGCONFIG xft" - pkgconfig_xft=yes -else - AC_CHECK_PROG(XFTCONFIG, xft-config, xft-config) +if test "$xft" = yes; then + if test "x$PKGCONFIG" != x -a "`$PKGCONFIG xft; echo $?`" = 0; then + XFTCONFIG="$PKGCONFIG xft" + pkgconfig_xft=yes + else + AC_CHECK_PROG(XFTCONFIG, xft-config, xft-config) + fi + AC_MSG_CHECKING([for the Xft2 library]) + if test "x$XFTCONFIG" != x; then + XFTLIBS=`$XFTCONFIG --libs` + XFTFLAGS=`$XFTCONFIG --cflags` + AC_MSG_RESULT([found]) + else + xft=no + AC_MSG_RESULT([not found]) + fi + if test "$xft" = yes; then + AC_SUBST(XFTFLAGS) + AC_SUBST(XFTLIBS) + AC_DEFINE(XFT, 1, [define if you want support for antialiased fonts (set by configure)]) + fi fi -AC_MSG_CHECKING([for the Xft2 library]) - -if test "x$XFTCONFIG" != x; then - XFTLIBS=`$XFTCONFIG --libs` - XFTFLAGS=`$XFTCONFIG --cflags` - AC_MSG_RESULT([found]) -else - AC_MSG_RESULT([not found]) - echo - echo "ERROR!!! libXft2 is not installed or could not be found." - echo " Xft2 is a requirement for building Window Maker." - echo " Please install it (along with fontconfig) before continuing." - echo - exit 1 -fi - -minXFT="2.1.2" -goodxft="no" - -dnl -dnl The macro below will use $XFTFLAGS (defined above) to find Xft.h -dnl -WM_CHECK_XFT_VERSION($minXFT, goodxft=yes, goodxft=no) - -if test "$goodxft" = no; then - echo - echo "ERROR!!! libXft on this system is an old version." - echo " Please consider upgrading to at least version ${minXFT}." - echo - exit 1 -fi - -AC_SUBST(XFTFLAGS) -AC_SUBST(XFTLIBS) -AC_DEFINE(XFT, 1, [define if you want support for antialiased fonts (set by configure)]) - - dnl XINERAMA support dnl ================ xinerama=no diff --git a/src/Makefile.am b/src/Makefile.am index 0dba2879..a89a5c02 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -104,9 +104,7 @@ wmaker_SOURCES = \ text.h -AM_CPPFLAGS = $(DFLAGS) -DLOCALEDIR=\"$(NLSDIR)\" - -AM_CFLAGS = -fno-strict-aliasing +AM_CPPFLAGS = @CPPFLAGS@ $(DFLAGS) -DLOCALEDIR=\"$(NLSDIR)\" INCLUDES = \ diff --git a/src/appicon.c b/src/appicon.c index 68a67527..391dae7a 100644 --- a/src/appicon.c +++ b/src/appicon.c @@ -407,7 +407,7 @@ setIconCallback(WMenu *menu, WMenuEntry *entry) result = wIconChooserDialog(scr, &file, icon->wm_instance, icon->wm_class); if (result && !icon->destroyed) { - if (file && *file==0) { + if (file[0]==0) { wfree(file); file = NULL; } diff --git a/src/cycling.c b/src/cycling.c index e5ace829..8e0c98d2 100644 --- a/src/cycling.c +++ b/src/cycling.c @@ -198,9 +198,7 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next) if (hasModifier) { keymap = XGetModifierMapping(dpy); -#ifdef DEBUG - printf("Grabbing keyboard\n"); -#endif + XGrabKeyboard(dpy, scr->root_win, False, GrabModeAsync, GrabModeAsync, CurrentTime); } @@ -225,6 +223,11 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next) wWindowFocus(newFocused, scr->focused_window); oldFocused = newFocused; + if (hasModifier) + done = False; + else + done = True; + #if 0 if (wPreferences.popup_switchmenu && (!scr->switch_menu || !scr->switch_menu->flags.mapped)) { @@ -233,9 +236,8 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next) openedSwitchMenu = True; } #endif - - while (hasModifier && !done) { - WMMaskEvent(dpy, KeyPressMask|KeyReleaseMask|ExposureMask, &ev); + while (!done) { + WMMaskEvent(dpy,KeyPressMask|KeyReleaseMask|ExposureMask, &ev); if (ev.type != KeyRelease && ev.type != KeyPress) { WMHandleEvent(&ev); @@ -245,10 +247,7 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next) modifiers = ev.xkey.state & ValidModMask; if (ev.type == KeyPress) { -#ifdef DEBUG - printf("Got key press\n"); -#endif - if (wKeyBindings[WKBD_FOCUSNEXT].keycode == ev.xkey.keycode + if (wKeyBindings[WKBD_FOCUSNEXT].keycode == ev.xkey.keycode && wKeyBindings[WKBD_FOCUSNEXT].modifier == modifiers) { newFocused = nextToFocusAfter(newFocused); @@ -275,18 +274,12 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next) } } else { -#ifdef DEBUG - printf("Got something else\n"); -#endif somethingElse = True; done = True; } } else if (ev.type == KeyRelease) { int i; -#ifdef DEBUG - printf("Got key release\n"); -#endif for (i = 0; i < 8 * keymap->max_keypermod; i++) { if (keymap->modifiermap[i] == ev.xkey.keycode && wKeyBindings[WKBD_FOCUSNEXT].modifier @@ -301,9 +294,6 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next) XFreeModifiermap(keymap); if (hasModifier) { -#ifdef DEBUG - printf("Ungrabbing keyboard\n"); -#endif XUngrabKeyboard(dpy, CurrentTime); } wSetFocusTo(scr, newFocused); diff --git a/src/dialog.c b/src/dialog.c index ef531a24..804ec381 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -636,7 +636,6 @@ wIconChooserDialog(WScreen *scr, char **file, char *instance, char *class) IconPanel *panel; WMColor *color; WMFont *boldFont; - Bool result; panel = wmalloc(sizeof(IconPanel)); memset(panel, 0, sizeof(IconPanel)); @@ -785,7 +784,7 @@ wIconChooserDialog(WScreen *scr, char **file, char *instance, char *class) /* check if the file the user selected is not the one that * would be loaded by default with the current search path */ *file = WMGetListSelectedItem(panel->iconList)->text; - if (**file==0) { + if ((*file)[0]==0) { wfree(*file); *file = NULL; } else { @@ -804,8 +803,6 @@ wIconChooserDialog(WScreen *scr, char **file, char *instance, char *class) *file = NULL; } - result = panel->result; - WMReleaseFont(panel->normalfont); WMUnmapWidget(panel->win); @@ -818,7 +815,7 @@ wIconChooserDialog(WScreen *scr, char **file, char *instance, char *class) XDestroyWindow(dpy, parent); - return result; + return panel->result; } @@ -865,10 +862,6 @@ typedef struct { "Copyright \xa9 1997-2003 Alfredo K. Kojima \n"\ "Copyright \xa9 1998-2003 Dan Pascu " -#define COPYRIGHT_TEXT_UTF8 \ - "Copyright \xc2\xa9 1997-2003 Alfredo K. Kojima \n"\ - "Copyright \xc2\xa9 1998-2003 Dan Pascu " - static InfoPanel *thePanel = NULL; @@ -1317,7 +1310,7 @@ wShowInfoPanel(WScreen *scr) WMResizeWidget(panel->copyrL, 360, 40); WMMoveWidget(panel->copyrL, 15, 185); WMSetLabelTextAlignment(panel->copyrL, WALeft); - WMSetLabelText(panel->copyrL, COPYRIGHT_TEXT_UTF8); + WMSetLabelText(panel->copyrL, COPYRIGHT_TEXT); /* we want the (c) character in the font, so don't use a FontSet here */ // fix this -Dan font = WMCreateFontWithFlags(scr->wmscreen, "SystemFont-11", WFNormalFont); font = WMSystemFontOfSize(scr->wmscreen, 11); diff --git a/src/event.c b/src/event.c index a19e812d..484de816 100644 --- a/src/event.c +++ b/src/event.c @@ -478,7 +478,7 @@ handleMapRequest(XEvent *ev) Window window = ev->xmaprequest.window; #ifdef DEBUG - printf("got map request for %x\n", (unsigned)window); + L("got map request for %x\n", (unsigned)window); #endif if ((wwin = wWindowFor(window))) { if (wwin->flags.shaded) { @@ -553,7 +553,7 @@ handleDestroyNotify(XEvent *event) int index; #ifdef DEBUG - printf("got destroy notify\n"); + L("got destroy notify"); #endif wwin = wWindowFor(window); if (wwin) { @@ -607,7 +607,7 @@ handleExpose(XEvent *event) XEvent ev; #ifdef DEBUG - printf("got expose\n"); + L("got expose"); #endif while (XCheckTypedWindowEvent(dpy, event->xexpose.window, Expose, &ev)); @@ -662,7 +662,7 @@ handleButtonPress(XEvent *event) WScreen *scr; #ifdef DEBUG - printf("got button press\n"); + L("got button press"); #endif scr = wScreenForRootWindow(event->xbutton.root); @@ -749,7 +749,7 @@ handleMapNotify(XEvent *event) { WWindow *wwin; #ifdef DEBUG - printf("got map\n"); + L("got map"); #endif wwin = wWindowFor(event->xmap.event); if (wwin && wwin->client_win == event->xmap.event) { @@ -772,7 +772,7 @@ handleUnmapNotify(XEvent *event) XEvent ev; Bool withdraw = False; #ifdef DEBUG - printf("got unmap\n"); + L("got unmap"); #endif /* only process windows with StructureNotify selected * (ignore SubstructureNotify) */ @@ -824,7 +824,7 @@ handleConfigureRequest(XEvent *event) { WWindow *wwin; #ifdef DEBUG - printf("got configure request\n"); + L("got configure request"); #endif if (!(wwin=wWindowFor(event->xconfigurerequest.window))) { /* @@ -847,7 +847,7 @@ handlePropertyNotify(XEvent *event) unsigned int ju; WScreen *scr; #ifdef DEBUG - printf("got property notify\n"); + L("got property notify"); #endif if ((wwin=wWindowFor(event->xproperty.window))) { if (!XGetGeometry(dpy, wwin->client_win, &jr, &ji, &ji, @@ -876,7 +876,7 @@ handleClientMessage(XEvent *event) WWindow *wwin; WObjDescriptor *desc; #ifdef DEBUG - printf("got client message\n"); + L("got client message"); #endif /* handle transition from Normal to Iconic state */ if (event->xclient.message_type == _XA_WM_CHANGE_STATE @@ -1038,7 +1038,7 @@ handleEnterNotify(XEvent *event) XEvent ev; WScreen *scr = wScreenForRootWindow(event->xcrossing.root); #ifdef DEBUG - printf("got enter notify\n"); + L("got enter notify"); #endif #ifdef VIRTUAL_DESKTOP @@ -1178,7 +1178,7 @@ handleShapeNotify(XEvent *event) WWindow *wwin; XEvent ev; #ifdef DEBUG - printf("got shape notify\n"); + L("got shape notify"); #endif while (XCheckTypedWindowEvent(dpy, shev->window, event->type, &ev)) { XShapeEvent *sev = (XShapeEvent*)&ev; @@ -1739,7 +1739,7 @@ handleMotionNotify(XEvent *event) p.y >= (rect.pos.y + rect.size.height - 2)) { WMenu *menu; #ifdef DEBUG - printf("pointer at screen edge\n"); + L("pointer at screen edge"); #endif menu = wMenuUnderPointer(scr); if (menu!=NULL) diff --git a/src/main.c b/src/main.c index eac30aed..8f2103db 100644 --- a/src/main.c +++ b/src/main.c @@ -717,25 +717,22 @@ main(int argc, char **argv) } - if (Locale) { - /* return of wstrconcat should not be free-ed! read putenv man page */ - putenv(wstrconcat("LANG=", Locale)); - } else { - Locale = getenv("LC_ALL"); - if (!Locale) { - Locale = getenv("LANG"); - } + if (!Locale) { + Locale = getenv("LC_ALL"); + } + if (!Locale) { + Locale = getenv("LANG"); } setlocale(LC_ALL, ""); if (!Locale || strcmp(Locale, "C")==0 || strcmp(Locale, "POSIX")==0) - Locale = NULL; + Locale = NULL; #ifdef I18N if (getenv("NLSPATH")) - bindtextdomain("WindowMaker", getenv("NLSPATH")); + bindtextdomain("WindowMaker", getenv("NLSPATH")); else - bindtextdomain("WindowMaker", LOCALEDIR); + bindtextdomain("WindowMaker", LOCALEDIR); textdomain("WindowMaker"); if (!XSupportsLocale()) { diff --git a/src/placement.c b/src/placement.c index 55dd9df7..f5c0b529 100644 --- a/src/placement.c +++ b/src/placement.c @@ -349,7 +349,7 @@ smartPlaceWindow(WWindow *wwin, int *x_ret, int *y_ret, unsigned int width, unsigned int height, WArea usableArea) { - //WScreen *scr = wwin->screen_ptr; + WScreen *scr = wwin->screen_ptr; int test_x = 0, test_y = Y_ORIGIN(scr); int from_x, to_x, from_y, to_y; int sx; diff --git a/src/text.c b/src/text.c index c483d640..58889306 100644 --- a/src/text.c +++ b/src/text.c @@ -28,7 +28,6 @@ #include #include #include -#include #include #include "WindowMaker.h" @@ -43,14 +42,14 @@ #endif -#ifdef DEBUG +#if 0 # define ENTER(X) fprintf(stderr,"Entering: %s()\n", X); # define LEAVE(X) fprintf(stderr,"Leaving: %s()\n", X); -# define PDEBUG(X) fprintf(stderr,"debug: %s()\n", X); +# define DEBUG(X) fprintf(stderr,"debug: %s()\n", X); #else # define ENTER(X) # define LEAVE(X) -# define PDEBUG(X) +# define DEBUG(X) #endif extern Cursor wCursor[WCUR_LAST]; @@ -583,32 +582,32 @@ textEventHandler( WObjDescriptor *desc, XEvent *event ) * text so we can wTextRefresh() */ if( event->xmotion.state & (Button1Mask|Button3Mask|Button2Mask) ) { - PDEBUG("MotionNotify"); + DEBUG("MotionNotify"); handled = True; wtext->text.endPos = textXtoPos( wtext, event->xmotion.x ); } break; case ButtonPress: - PDEBUG("ButtonPress"); + DEBUG("ButtonPress"); handled = True; wtext->text.startPos = textXtoPos( wtext, event->xbutton.x ); wtext->text.endPos = wtext->text.startPos; break; case ButtonRelease: - PDEBUG("ButtonRelease"); + DEBUG("ButtonRelease"); handled = True; wtext->text.endPos = textXtoPos( wtext, event->xbutton.x ); break; case KeyPress: - PDEBUG("KeyPress"); + DEBUG("KeyPress"); handled = handleKeyPress( wtext, &event->xkey ); break; case EnterNotify: - PDEBUG("EnterNotify"); + DEBUG("EnterNotify"); handled = True; #if 0 if (!wtext->magic) @@ -622,7 +621,7 @@ textEventHandler( WObjDescriptor *desc, XEvent *event ) break; case LeaveNotify: - PDEBUG("LeaveNotify"); + DEBUG("LeaveNotify"); handled = True; #if 0 wtext->blinking = 0; diff --git a/src/xdnd.c b/src/xdnd.c index b9a11dff..35085db7 100644 --- a/src/xdnd.c +++ b/src/xdnd.c @@ -86,7 +86,7 @@ void wXDNDMakeAwareness(Window window) { } void wXDNDClearAwareness(Window window) { - //long int xdnd_version = 3; + long int xdnd_version = 3; XDeleteProperty (dpy, window, _XA_XdndAware); } diff --git a/src/xutil.c b/src/xutil.c index 964d602e..71c9f981 100644 --- a/src/xutil.c +++ b/src/xutil.c @@ -24,7 +24,6 @@ #include #include #include -#include #include "wconfig.h" diff --git a/test/wtest.c b/test/wtest.c index 692a5341..563dbe85 100644 --- a/test/wtest.c +++ b/test/wtest.c @@ -9,7 +9,6 @@ */ #include -#include #include #include #include diff --git a/util/Makefile.am b/util/Makefile.am index 1346f994..d42a0a58 100644 --- a/util/Makefile.am +++ b/util/Makefile.am @@ -3,10 +3,9 @@ AUTOMAKE_OPTIONS = no-dependencies pkgdatadir = $(datadir)/@PACKAGE@ -bin_PROGRAMS = wxcopy wxpaste wdwrite wdread getstyle setstyle convertfonts \ - seticons geticonset wmsetbg wmsetup wmagnify +bin_PROGRAMS = wxcopy wxpaste wdwrite wdread getstyle setstyle seticons geticonset wmsetbg wmsetup wmagnify -bin_SCRIPTS = wmaker.inst wm-oldmenu2new wsetfont wmchlocale wkdemenu.pl \ +bin_SCRIPTS = wmaker.inst wm-oldmenu2new wsetfont wmchlocale wkdemenu.pl\ wcopy wpaste EXTRA_DIST = wmaker.inst.in bughint wm-oldmenu2new wsetfont directjpeg.c \ @@ -32,8 +31,6 @@ setstyle_LDADD = \ $(top_builddir)/WINGs/libWUtil.a \ @XLFLAGS@ @XLIBS@ $(liblist) -convertfonts_LDADD = $(top_builddir)/WINGs/libWUtil.a $(liblist) - seticons_LDADD= $(top_builddir)/WINGs/libWUtil.a $(liblist) geticonset_LDADD= $(top_builddir)/WINGs/libWUtil.a $(liblist) diff --git a/util/convertfonts.c b/util/convertfonts.c deleted file mode 100644 index 2ed83a8a..00000000 --- a/util/convertfonts.c +++ /dev/null @@ -1,317 +0,0 @@ -/* convertfonts.c - converts fonts in a style file to fontconfig format - * - * WindowMaker window manager - * - * Copyright (c) 2004 Dan Pascu - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ - - -#define PROG_VERSION "convertfonts (Window Maker) 1.0" - -#include -#include -#include -#include -#include - -#include "../src/wconfig.h" - -#define DEFAULT_FONT "sans-serif:pixelsize=12" - -char *FontOptions[] = { - "IconTitleFont", - "ClipTitleFont", - "DisplayFont", - "LargeDisplayFont", - "MenuTextFont", - "MenuTitleFont", - "WindowTitleFont", - "SystemFont", - "BoldSystemFont", - NULL -}; - - -char *ProgName; - - -static int -countChar(char *str, char c) -{ - int count = 0; - - if (!str) - return 0; - - for (; *str!=0; str++) { - if (*str == c) { - count++; - } - } - - return count; -} - - -typedef struct str { - char *str; - int len; -} str; - -#define XLFD_TOKENS 14 - - -static str* -getXLFDTokens(char *xlfd) -{ - static str tokens[XLFD_TOKENS]; - int i, len, size; - char *ptr; - - if (!xlfd || *xlfd!='-' || countChar(xlfd, '-')0; i++) { - /* skip one '-' */ - ptr++; - len--; - if (len <= 0) - break; - size = strcspn(ptr, "-"); - tokens[i].str = ptr; - tokens[i].len = size; - ptr += size; - len -= size; - } - - return tokens; -} - - -static int -strToInt(str *token) -{ - int res=0, pos, c; - - if (token->len==0 || token->str[0]=='*') { - return -1; - } else { - for (res=0, pos=0; poslen; pos++) { - c = token->str[pos] - '0'; - if (c<0 || c>9) - break; - res = res*10 + c; - } - } - return res; -} - - -static char* -mapSlantToName(str *slant) -{ - if (slant->len==0 || slant->str[0]=='*') - return "roman"; - - switch(slant->str[0]) { - case 'i': - return "italic"; - case 'o': - return "oblique"; - case 'r': - default: - return "roman"; - } -} - - -char* -xlfdToFc(char *xlfd, char *useFamily, Bool keepXLFD) -{ - str *tokens, *family, *weight, *slant; - char *name, buf[512]; - int size, pixelsize; - - tokens = getXLFDTokens(xlfd); - if (!tokens) - return wstrdup(DEFAULT_FONT); - - family = &(tokens[1]); - weight = &(tokens[2]); - slant = &(tokens[3]); - - if (useFamily) { - name = wstrdup(useFamily); - } else { - if (family->len==0 || family->str[0]=='*') - return wstrdup(DEFAULT_FONT); - - sprintf(buf, "%.*s", family->len, family->str); - name = wstrdup(buf); - } - - pixelsize = strToInt(&tokens[6]); - size = strToInt(&tokens[7]); - - if (size<=0 && pixelsize<=0) { - name = wstrappend(name, ":pixelsize=12"); - } else if (pixelsize>0) { - /* if pixelsize is present size will be ignored so we skip it */ - sprintf(buf, ":pixelsize=%d", pixelsize); - name = wstrappend(name, buf); - } else { - sprintf(buf, "-%d", size/10); - name = wstrappend(name, buf); - } - - if (weight->len>0 && weight->str[0]!='*') { - sprintf(buf, ":weight=%.*s", weight->len, weight->str); - name = wstrappend(name, buf); - } - - if (slant->len>0 && slant->str[0]!='*') { - sprintf(buf, ":slant=%s", mapSlantToName(slant)); - name = wstrappend(name, buf); - } - - if (keepXLFD) { - name = wstrappend(name, ":xlfd="); - name = wstrappend(name, xlfd); - } - - return name; -} - - -/* return converted font (if conversion is needed) else the original font */ -static char* -convertFont(char *font, Bool keepXLFD) -{ - if (font[0]=='-') { - if (!strchr(font, ',')) { - return xlfdToFc(font, NULL, keepXLFD); - } else { - return xlfdToFc(font, "sans-serif", keepXLFD); - } - } else { - return font; - } -} - - -void -print_help() -{ - printf("\nUsage: %s \n\n", ProgName); - puts("Converts fonts in a style file into fontconfig format"); - puts(""); - puts(" --help display this help and exit"); - puts(" --version output version information and exit"); - puts(" --keep-xlfd preserve the original xlfd by appending a ':xlfd=' hint"); - puts(" to the font name. This property is not used by the fontconfig"); - puts(" matching engine to find the font, but it is useful as a hint"); - puts(" about what the original font was to allow hand tuning the"); - puts(" result or restoring the xlfd. The default is to not add it"); - puts(" as it results in long, unreadable and confusing names."); - puts(" --sets-too try to approximate fontsets by using their first complete xlfd."); - puts(" This only works for singlebyte languages. The default is to"); - puts(" replace the fontset with the default: 'sans-serif:pixelsize=12'"); - puts(" which should display properly for any language."); - puts(""); -} - -// replace --sets-too with something better -int -main(int argc, char **argv) -{ - WMPropList *style, *key, *val; - char *file = NULL, *oldfont, *newfont; - struct stat statbuf; - Bool keepXLFD = False; - int i; - - ProgName = argv[0]; - - if (argc<2) { - print_help(); - exit(0); - } - - for (i=1; i < argc; i++) { - if (strcmp("--version", argv[i])==0) { - puts(PROG_VERSION); - exit(0); - } else if (strcmp("--help", argv[i])==0) { - print_help(); - exit(0); - } else if (strcmp("--keep-xlfd", argv[i])==0) { - keepXLFD = True;; - } else if (argv[i][0]=='-') { - printf("%s: invalid argument '%s'\n", ProgName, argv[i]); - printf("Try '%s --help' for more information\n", ProgName); - exit(1); - } else { - file = argv[i]; - } - } - - WMPLSetCaseSensitive(False); - - if (stat(file, &statbuf) < 0) { - perror(file); - exit(1); - } - - style = WMReadPropListFromFile(file); - if (!style) { - perror(file); - printf("%s: could not load style file.\n", ProgName); - exit(1); - } - - if (!WMIsPLDictionary(style)) { - printf("%s: '%s' is not a well formatted style file\n", ProgName, file); - exit(1); - } - - for (i=0; FontOptions[i]!=NULL; i++) { - key = WMCreatePLString(FontOptions[i]); - val = WMGetFromPLDictionary(style, key); - if (val) { - oldfont = WMGetFromPLString(val); - newfont = convertFont(oldfont, keepXLFD); - if (oldfont != newfont) { - val = WMCreatePLString(newfont); - WMPutInPLDictionary(style, key, val); - WMReleasePropList(val); - wfree(newfont); - } - } - WMReleasePropList(key); - } - - WMWritePropListToFile(style, file, True); - - exit(0); -} - - diff --git a/util/getstyle.c b/util/getstyle.c index 9585cfe9..e0c54625 100644 --- a/util/getstyle.c +++ b/util/getstyle.c @@ -467,7 +467,7 @@ strToInt(str *token) int res=0, pos, c; if (token->len==0 || token->str[0]=='*') { - return -1; + return -1; } else { for (res=0, pos=0; poslen; pos++) { c = token->str[pos] - '0'; @@ -589,7 +589,7 @@ findCopyFile(char *dir, char *file) if (!fullPath) { char buffer[4000]; - sprintf(buffer, "could not find file %s", file); + sprintf(buffer, "coould not find file %s", file); abortar(buffer); } copyFile(dir, fullPath); @@ -776,7 +776,7 @@ main(int argc, char **argv) oldfont = WMGetFromPLString(val); newfont = convertFont(oldfont); - /* newfont is a reference to old if conversion is not needed */ + /* font is a reference to old if conversion is not needed */ if (newfont != oldfont) { WMReleasePropList(val); val = WMCreatePLString(newfont); diff --git a/util/wmagnify.c b/util/wmagnify.c index 9d6703d9..0ab49b79 100644 --- a/util/wmagnify.c +++ b/util/wmagnify.c @@ -10,7 +10,6 @@ #include #include -#include #include /* diff --git a/util/wmsetbg.c b/util/wmsetbg.c index ba7c56fa..31592cb0 100644 --- a/util/wmsetbg.c +++ b/util/wmsetbg.c @@ -495,7 +495,7 @@ parseTexture(RContext *rc, char *text) XColor color; Pixmap pixmap = None; RImage *image = NULL; - //int w, h; + int w, h; int iwidth, iheight; RColor rcolor; diff --git a/wmlib/app.c b/wmlib/app.c index 6a7f5769..96e11a75 100644 --- a/wmlib/app.c +++ b/wmlib/app.c @@ -21,7 +21,6 @@ #include #include -#include #include "WMaker.h" #include "app.h" diff --git a/wrlib/convert.c b/wrlib/convert.c index 95689bba..ba96643e 100644 --- a/wrlib/convert.c +++ b/wrlib/convert.c @@ -678,8 +678,7 @@ image2StandardPseudoColor(RContext *ctx, RImage *image) int x1, ofs; #ifdef DEBUG - printf("pseudo color dithering with %d colors per channel\n", - ctx->attribs->colors_per_channel); + printf("pseudo color dithering with %d colors per channel\n", cpc); #endif err = (short*)malloc(3*(image->width+2)*sizeof(short)); nerr = (short*)malloc(3*(image->width+2)*sizeof(short));