diff --git a/INSTALL b/INSTALL index 46727fd9..f9660115 100644 --- a/INSTALL +++ b/INSTALL @@ -38,6 +38,7 @@ SUPPORTED PLATFORMS - Amiga 3000 running RedHat Linux 5.1 (Rawhide) - IBM S/390 running Linux - iBook running Darwin +- Windows NT with Cygwin/XFree86 Patches to make it work on other platforms are welcome. diff --git a/WINGs/Tests/wtest.c b/WINGs/Tests/wtest.c index 14d4ae50..07839c3d 100644 --- a/WINGs/Tests/wtest.c +++ b/WINGs/Tests/wtest.c @@ -610,21 +610,21 @@ testText(WMScreen *scr) if(file) { char buf[1024]; - WMFreezeText(text); - while(fgets(buf, 1023, file)) - WMAppendTextStream(text, buf); - - fclose(file); - WMThawText(text); - } else { - WMAppendTextStream(text, - "Window Maker is the GNU window manager for the " - "X Window System. It was designed to emulate the " - "look and feel of part of the NEXTSTEP(tm) GUI. Its " - "supposed to be relatively fast and small, feature " - "rich, easy to configure and easy to use, with a simple " - "and elegant appearance borrowed from NEXTSTEP(tm)."); - } + WMFreezeText(text); + while(fgets(buf, 1023, file)) + WMAppendTextStream(text, buf); + + fclose(file); + WMThawText(text); + } else { + WMAppendTextStream(text, + "Window Maker is the GNU window manager for the " + "X Window System. It was designed to emulate the " + "look and feel of part of the NEXTSTEP(tm) GUI. Its " + "supposed to be relatively fast and small, feature " + "rich, easy to configure and easy to use, with a simple " + "and elegant appearance borrowed from NEXTSTEP(tm)."); + } WMRealizeWidget(win); WMMapSubwidgets(win); @@ -1294,6 +1294,7 @@ main(int argc, char **argv) testDragAndDrop(scr); + testText(scr); #if 0 testColorPanel(scr); testScrollView(scr); diff --git a/WINGs/wtext.c b/WINGs/wtext.c index b1d086fe..4e0f916e 100644 --- a/WINGs/wtext.c +++ b/WINGs/wtext.c @@ -616,10 +616,10 @@ TextBlock *tb) } - if(!tb->sections) + if(!tb->sections) { layOutDocument(tPtr); - if(!tb->sections) return 0; + } *dir = !(y <= tb->sections[0].y); if(*dir) { @@ -3597,7 +3597,8 @@ WMAppendTextBlock(WMText *tPtr, void *vtb) tPtr->currentTextBlock = tb; } -void * + +void* WMRemoveTextBlock(WMText *tPtr) { TextBlock *tb = NULL; @@ -3637,15 +3638,15 @@ WMRemoveTextBlock(WMText *tPtr) } +#if 0 static void destroyWidget(WMWidget *widget) { - if(!widget) - return; - WMDestroyWidget(widget); - wfree(widget); + // -- never do this -- wfree(widget); } +#endif + void WMDestroyTextBlock(WMText *tPtr, void *vtb) @@ -3656,30 +3657,32 @@ WMDestroyTextBlock(WMText *tPtr, void *vtb) if (tb->graphic) { if(tb->object) { -/* naturally, there's a danger to destroying widgets whose action - brings us here: ie. press a button to destroy it... - need to find a safer way. till then... this stays commented out */ -/* 5 months later... destroy it 10 seconds after now which should be - enough time for the widget's action to be completed... :-) */ - WMAddTimerHandler(10000, destroyWidget, (void *)tb->d.widget); - tb->d.widget = NULL; - + /* naturally, there's a danger to destroying widgets whose action + * brings us here: ie. press a button to destroy it... + * need to find a safer way. till then... this stays commented out */ + /* 5 months later... destroy it 10 seconds after now which should + * be enough time for the widget's action to be completed... :-) */ + // This is a bad assumption. Just destroy the widget here. + // if the caller needs it, it can protect it with W_RetainView() + //WMAddTimerHandler(10000, destroyWidget, (void *)tb->d.widget); + WMDestroyWidget(tb->d.widget); + //tb->d.widget = NULL; } else { WMReleasePixmap(tb->d.pixmap); - tb->d.pixmap = NULL; + //tb->d.pixmap = NULL; } } else { WMReleaseFont(tb->d.font); } - + WMReleaseColor(tb->color); - if (tb->sections && tb->nsections > 0) + // isn't this going to memleak if nsections==0? if (tb->sections && tb->nsections > 0) + if (tb->sections) wfree(tb->sections); wfree(tb->text); wfree(tb); - tb = NULL; + //tb = NULL; } - void diff --git a/src/defaults.c b/src/defaults.c index 17dce276..a8cfdad2 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -797,18 +797,18 @@ WDefaultEntry optionList[] = { }, {"ScreenSwitchKey", "None", (void*)WKBD_SWITCH_SCREEN, NULL, getKeybind, setKeyGrab - }, + } #ifdef KEEP_XKB_LOCK_STATUS - {"ToggleKbdModeKey", "None", (void*)WKBD_TOGGLE, + ,{"ToggleKbdModeKey", "None", (void*)WKBD_TOGGLE, NULL, getKeybind, setKeyGrab }, {"KbdModeLock", "NO", NULL, &wPreferences.modelock, getBool, NULL - }, + } #endif /* KEEP_XKB_LOCK_STATUS */ #ifdef DEFINABLE_CURSOR - {"NormalCursor", "(builtin, left_ptr)", (void*)WCUR_ROOT, + ,{"NormalCursor", "(builtin, left_ptr)", (void*)WCUR_ROOT, NULL, getCursor, setCursor }, {"MoveCursor", "(builtin, fleur)", (void*)WCUR_MOVE, diff --git a/wrlib/ChangeLog b/wrlib/ChangeLog index da609b3b..f6441228 100644 --- a/wrlib/ChangeLog +++ b/wrlib/ChangeLog @@ -7,6 +7,11 @@ - Small speed improvement for 24 and 32 bpp, if internal converter is used - Small speed improvement for generating gradients. - Fixed RSaveXPM() to output correct xpm images. +- fixed speckles (white dots) on dithered images (bug still present on the + PowerPC architecture, because on LinuxPPC char is unsigned by default, not + signed like on the other platforms). + Bug fixed by Philip Derrin + - fixed code dependant on the order of evaluation. code like *ptr++ = *ptr++ = *ptr++ = color; diff --git a/wrlib/convert.c b/wrlib/convert.c index 4ec4e8d7..ebd5e106 100644 --- a/wrlib/convert.c +++ b/wrlib/convert.c @@ -139,7 +139,7 @@ computeStdTable(unsigned int mult, unsigned int max) static void convertTrueColor_generic(RXImage *ximg, RImage *image, - char *err, char *nerr, + signed char *err, signed char *nerr, const short *rtable, const short *gtable, const short *btable, @@ -148,7 +148,7 @@ convertTrueColor_generic(RXImage *ximg, RImage *image, const unsigned short goffs, const unsigned short boffs) { - char *terr; + signed char *terr; int x, y, r, g, b; int pixel; int rer, ger, ber; @@ -330,7 +330,7 @@ image2TrueColor(RContext *ctx, RImage *image) static void convertPseudoColor_to_8(RXImage *ximg, RImage *image, - char *err, char *nerr, + signed char *err, signed char *nerr, const short *rtable, const short *gtable, const short *btable, @@ -338,7 +338,7 @@ convertPseudoColor_to_8(RXImage *ximg, RImage *image, unsigned long *pixels, int cpc) { - char *terr; + signed char *terr; int x, y, r, g, b; int pixel; int rer, ger, ber; @@ -545,8 +545,8 @@ image2StandardPseudoColor(RContext *ctx, RImage *image) } } else { /* dither */ - short *err, *nerr; - short *terr; + signed short *err, *nerr; + signed short *terr; int rer, ger, ber; int x1, ofs; @@ -842,6 +842,14 @@ hermesConvert(RContext *context, RImage *image) dest.indexed = 1; dest.has_colorkey = 0; + /*printf("source r=0x%x, g=0x%x, b=0x%x, a=0x%x, b=%d, i=%d, c=%d\n", + source.r, source.g, source.b, source.a, + source.bits, source.indexed, source.has_colorkey); + printf("dest r=0x%x, g=0x%x, b=0x%x, a=0x%x, b=%d, i=%d, c=%d\n", + dest.r, dest.g, dest.b, dest.a, + dest.bits, dest.indexed, dest.has_colorkey); + */ + Hermes_ConverterRequest(context->hermes_data->converter, &source, &dest); Hermes_ConverterPalette(context->hermes_data->converter, diff --git a/wrlib/gradient.c b/wrlib/gradient.c index 69e4b80d..41516f7a 100644 --- a/wrlib/gradient.c +++ b/wrlib/gradient.c @@ -115,7 +115,7 @@ renderHGradient(unsigned width, unsigned height, int r0, int g0, int b0, int rf, int gf, int bf) { int i; - unsigned long r, g, b, dr, dg, db; + long r, g, b, dr, dg, db; unsigned lineSize = width*3; RImage *image; unsigned char *ptr; @@ -170,7 +170,7 @@ renderVGradient(unsigned width, unsigned height, int r0, int g0, int b0, int rf, int gf, int bf) { int i, j; - unsigned long r, g, b, dr, dg, db; + long r, g, b, dr, dg, db; RImage *image; unsigned char *ptr; unsigned char rr, gg, bb; @@ -280,7 +280,7 @@ static RImage* renderMHGradient(unsigned width, unsigned height, RColor **colors, int count) { int i, j, k; - unsigned long r, g, b, dr, dg, db; + long r, g, b, dr, dg, db; unsigned lineSize = width*3; RImage *image; unsigned char *ptr; @@ -347,7 +347,7 @@ static RImage* renderMVGradient(unsigned width, unsigned height, RColor **colors, int count) { int i, j, k; - unsigned long r, g, b, dr, dg, db; + long r, g, b, dr, dg, db; unsigned lineSize = width*3; RImage *image; unsigned char *ptr, *tmp; @@ -498,8 +498,8 @@ RRenderInterwovenGradient(unsigned width, unsigned height, RColor colors2[2], int thickness2) { int i, j, k, l, ll; - unsigned long r1, g1, b1, dr1, dg1, db1; - unsigned long r2, g2, b2, dr2, dg2, db2; + long r1, g1, b1, dr1, dg1, db1; + long r2, g2, b2, dr2, dg2, db2; RImage *image; unsigned char *ptr; unsigned char rr, gg, bb; diff --git a/wrlib/view.c b/wrlib/view.c index 97ff07a7..ae1bfead 100644 --- a/wrlib/view.c +++ b/wrlib/view.c @@ -36,15 +36,19 @@ main(int argc, char **argv) puts(RMessageForError(RErrorCode)); exit(1); } - /* + if (argc > 2) { RImage *tmp = img; - img = RSmoothScaleImage(tmp, tmp->width*atol(argv[2]), - tmp->height*atol(argv[2])); + img = RScaleImage(tmp, tmp->width*atol(argv[2]), + tmp->height*atol(argv[2])); + /*img = RSmoothScaleImage(tmp, tmp->width*atol(argv[2]), + tmp->height*atol(argv[2])); + */ + RReleaseImage(tmp); } - */ + #if 0 if (argc > 2) { img = RScaleImage(img, img->width*atof(argv[2]),