X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=filebrowser%2Fdraw.c;h=4f8abaae17eeb5dd51afedbd474c1d281cea9d48;hb=b9c6b5e9fcd6321336ec28f25833530db79b928d;hp=47efa17abaea05a4282a1edd96052d2152c40396;hpb=373488935bf19680e26a3b51e617c9586dd438c6;p=xboard.git diff --git a/filebrowser/draw.c b/filebrowser/draw.c index 47efa17..4f8abaa 100644 --- a/filebrowser/draw.c +++ b/filebrowser/draw.c @@ -25,8 +25,9 @@ */ #include -#include "selfile.h" #include "xstat.h" +#include "selfile.h" +#include "config.h" #include #include #include @@ -53,14 +54,25 @@ static XtResource textResources[] = { XtOffset(textPtr, fontname), XtRString, SF_DEFAULT_FONT}, }; +#if ENABLE_NLS +extern XFontSet fontSet; //XXX should really be in a .h file +#else static XFontStruct *SFfont; +#endif static int SFcurrentListY; static XtIntervalId SFscrollTimerId; +void SFinitFont() { +#if ENABLE_NLS + XFontSetExtents *fse = XExtentsOfFontSet(fontSet); + SFcharWidth = fse->max_logical_extent.width; + SFcharAscent = -fse->max_logical_extent.y; + SFcharHeight = fse->max_logical_extent.height; +#else TextData *data; data = XtNew(TextData); @@ -84,8 +96,11 @@ SFinitFont() SFcharWidth = (SFfont->max_bounds.width + SFfont->min_bounds.width) / 2; SFcharAscent = SFfont->max_bounds.ascent; SFcharHeight = SFcharAscent + SFfont->max_bounds.descent; +#endif + return; } +void SFcreateGC() { XGCValues gcValues; @@ -122,7 +137,9 @@ SFcreateGC() gcValues.foreground = SFfore; gcValues.background = SFback; +#if !ENABLE_NLS gcValues.font = SFfont->fid; +#endif SFtextGC = XCreateGC( SFdisplay, @@ -130,7 +147,9 @@ SFcreateGC() (unsigned long) GCForeground | GCBackground | +#if !ENABLE_NLS GCFont | +#endif 0, &gcValues ); @@ -149,8 +168,10 @@ SFcreateGC() 1, Unsorted ); + return; } +void SFclearList(n, doScroll) int n; int doScroll; @@ -191,9 +212,10 @@ SFclearList(n, doScroll) (float) 1.0); } } + return; } -static +static void SFdeleteEntry(dir, entry) SFDir *dir; SFEntry *entry; @@ -242,15 +264,17 @@ SFdeleteEntry(dir, entry) (float) (((double) ((dir->nEntries < SFlistSize) ? dir->nEntries : SFlistSize)) / dir->nEntries) ); + return; } -static +static void SFwriteStatChar(name, last, statBuf) char *name; int last; struct stat *statBuf; { name[last] = SFstatChar(statBuf); + return; } static int @@ -320,7 +344,7 @@ SFstatAndCheck(dir, entry) return 0; } -static +static void SFdrawStrings(w, dir, from, to) register Window w; register SFDir *dir; @@ -347,6 +371,18 @@ SFdrawStrings(w, dir, from, to) continue; } } +#if ENABLE_NLS + XmbDrawImageString( + SFdisplay, + w, + fontSet, + SFtextGC, + x, + SFtextYoffset + i * SFentryHeight, + entry->shown, + strlen(entry->shown) + ); +#else XDrawImageString( SFdisplay, w, @@ -356,6 +392,7 @@ SFdrawStrings(w, dir, from, to) entry->shown, strlen(entry->shown) ); +#endif if (dir->vOrigin + i == dir->beginSelection) { XDrawLine( SFdisplay, @@ -395,8 +432,10 @@ SFdrawStrings(w, dir, from, to) ); } } + return; } +void SFdrawList(n, doScroll) int n; int doScroll; @@ -409,6 +448,18 @@ SFdrawList(n, doScroll) if (SFdirPtr + (3-NR) + n < SFdirEnd) { dir = &(SFdirs[SFdirPtr + n + (3-NR)]); w = XtWindow(selFileLists[n]); +#if ENABLE_NLS + XmbDrawImageString( + SFdisplay, + w, + fontSet, + SFtextGC, + SFtextX - dir->hOrigin * SFcharWidth, + SFlineToTextV + SFaboveAndBelowText + SFcharAscent, + dir->dir, + strlen(dir->dir) + ); +#else XDrawImageString( SFdisplay, w, @@ -418,10 +469,13 @@ SFdrawList(n, doScroll) dir->dir, strlen(dir->dir) ); +#endif SFdrawStrings(w, dir, 0, SFlistSize - 1); } + return; } +void SFdrawLists(doScroll) int doScroll; { @@ -430,9 +484,10 @@ SFdrawLists(doScroll) for (i = 0; i < NR; i++) { SFdrawList(i, doScroll); } + return; } -static +static void SFinvertEntry(n) register int n; { @@ -445,6 +500,7 @@ SFinvertEntry(n) SFentryWidth, SFentryHeight ); + return; } static unsigned long @@ -486,7 +542,7 @@ SFscrollTimer(p, id) int save; int n; - n = (int) p; + n = (int)(intptr_t) p; dir = &(SFdirs[SFdirPtr + n]); save = dir->vOrigin; @@ -516,7 +572,7 @@ SFscrollTimer(p, id) if (SFbuttonPressed) { SFscrollTimerId = XtAppAddTimeOut(SFapp, - SFscrollTimerInterval(), SFscrollTimer, (XtPointer) n); + SFscrollTimerInterval(), SFscrollTimer, (XtPointer)(intptr_t) n); } } @@ -557,7 +613,7 @@ SFnewInvertEntry(n, event) SFscrollTimerAdded = 1; SFscrollTimerId = XtAppAddTimeOut(SFapp, SFscrollTimerInterval(), SFscrollTimer, - (XtPointer) n); + (XtPointer)(intptr_t) n); } } @@ -620,20 +676,7 @@ SFmotionList(w, n, event) SFinvertEntry(n); } } -} - -/* ARGSUSED */ -void -SFvFloatSliderMovedCallback(w, n, fnew) - Widget w; - int n; - float *fnew; -{ - int new; - - new = (*fnew) * SFdirs[SFdirPtr + n].nEntries; - - SFvSliderMovedCallback(w, n, new); + return; } /* ARGSUSED */ @@ -649,7 +692,10 @@ SFvSliderMovedCallback(w, n, new) dir = &(SFdirs[SFdirPtr + n]); + old = dir->vOrigin; + if(new == -1) new = old + 1; else if(new == -2) new = old - 1; // [HGM] indicates scroll direction on mousewheel event + if(new < 0 || new > dir->nEntries - SFlistSize) return; dir->vOrigin = new; if (old == new) { @@ -724,6 +770,21 @@ SFvSliderMovedCallback(w, n, new) /* ARGSUSED */ void +SFvFloatSliderMovedCallback(w, n, fnew) + Widget w; + int n; + float *fnew; +{ + int new; + + new = (*fnew) * SFdirs[SFdirPtr + n].nEntries; + + SFvSliderMovedCallback(w, n, new); +} + + +/* ARGSUSED */ +void SFvAreaSelectedCallback(w, n, pnew) Widget w; int n;