From 1ba54a5199112e6a9d89bac1b398654ed04b97a1 Mon Sep 17 00:00:00 2001 From: kojima Date: Thu, 18 Mar 1999 05:41:00 +0000 Subject: [PATCH] Texture plugin update --- WindowMaker/Defaults/WindowMaker | 7 +++-- src/defaults.c | 39 +++++++++++++++++++------ src/texture.c | 49 +++++++++++++++++++++++++------- 3 files changed, 73 insertions(+), 22 deletions(-) diff --git a/WindowMaker/Defaults/WindowMaker b/WindowMaker/Defaults/WindowMaker index d0fbecfd..b498bfc0 100755 --- a/WindowMaker/Defaults/WindowMaker +++ b/WindowMaker/Defaults/WindowMaker @@ -1,4 +1,5 @@ { + DisableMiniwindows = NO; OpenTransientOnOwnerWorkspace = NO; EdgeResistance = 30; IconificationStyle = Zoom; @@ -54,9 +55,9 @@ IconPosition = "blh"; WrapMenus = NO; ScrollableMenus = YES; - MenuScrollSpeed = medium; - IconSlideSpeed = medium; - ShadeSpeed = medium; + MenuScrollSpeed = fast; + IconSlideSpeed = fast; + ShadeSpeed = fast; DoubleClickTime = 250; AlignSubmenus = NO; NoWindowOverIcons = NO; diff --git a/src/defaults.c b/src/defaults.c index 23a78e87..cd9bf7e6 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -34,6 +34,12 @@ #include #include +#ifdef HAVE_DLFCN_H +# include +#endif + + + #ifndef PATH_MAX #define PATH_MAX DEFAULT_PATH_MAX #endif @@ -1860,7 +1866,8 @@ parse_texture(WScreen *scr, proplist_t pl) } #ifdef TEXTURE_PLUGIN else if (strcasecmp(val, "function")==0) { - + WTexFunction *function; + void (*initFunc) (Display *, Colormap); char *lib, *func, **argv; int i, argc; @@ -1881,20 +1888,36 @@ parse_texture(WScreen *scr, proplist_t pl) } func = PLGetString(elem); - argc = nelem - 3; - argv = (char **) wmalloc (argc * sizeof (char *)); + argc = nelem - 2; + argv = (char **)wmalloc(argc * sizeof(char *)); /* get the parameters */ - for (i=0; ihandle, "initWindowMaker"); + if (initFunc) { + initFunc(dpy, scr->w_colormap); + } else { + wwarning(_("could not initialize library %s"), lib); + } + } else { + wwarning(_("could not find function %s::%s"), lib, func); + } +#endif /* HAVE_DLFCN_H */ + texture = (WTexture*)function; } #endif /* TEXTURE_PLUGIN */ else { diff --git a/src/texture.c b/src/texture.c index 9c3eae73..591d3f4a 100644 --- a/src/texture.c +++ b/src/texture.c @@ -188,10 +188,13 @@ wTextureDestroy(WScreen *scr, WTexture *texture) case WTEX_FUNCTION: #ifdef HAVE_DLFCN_H if (texture->function.handle) { - dlclose (texture->function.handle); + dlclose(texture->function.handle); } #endif - free (texture->function.argv); + for (i = 0; i < texture->function.argc; i++) { + free(texture->function.argv[i]); + } + free(texture->function.argv); break; #endif /* TEXTURE_PLUGIN */ } @@ -374,15 +377,27 @@ wTextureMakeTGradient(WScreen *scr, int style, RColor *from, RColor *to, WTexFunction* wTextureMakeFunction(WScreen *scr, char *lib, char *func, int argc, char **argv) { + XColor fallbackColor; + XGCValues gcv; WTexFunction *texture; + texture = wmalloc(sizeof(WTexture)); texture->type = WTEX_FUNCTION; texture->handle = NULL; texture->render = 0; texture->argc = argc; texture->argv = argv; - -#ifdef HAVE_DLFCN_H + + fallbackColor.red = 0x8000; + fallbackColor.green = 0x8000; + fallbackColor.blue = 0x8000; + + gcv.background = gcv.foreground = fallbackColor.pixel; + gcv.graphics_exposures = False; + texture->normal_gc = XCreateGC(dpy, scr->w_win, GCForeground|GCBackground + |GCGraphicsExposures, &gcv); + +# ifdef HAVE_DLFCN_H /* open the library */ texture->handle = dlopen(lib, RTLD_LAZY); if (!texture->handle) { @@ -391,20 +406,20 @@ wTextureMakeFunction(WScreen *scr, char *lib, char *func, int argc, char **argv) free(texture); return NULL; } - + /* find the function */ - texture->render = dlsym (texture->handle, func); + texture->render = dlsym(texture->handle, func); if (!texture->render) { - wwarning(_("function \"%s\" not founf in library \"%s\""), func, lib); + wwarning(_("function \"%s\" not found in library \"%s\""), func, lib); free(argv); dlclose(texture->handle); free(texture); return NULL; } -#else +# else wwarning(_("function textures not supported on this system, sorry.")); -#endif - +# endif + /* success! */ return texture; } @@ -519,6 +534,9 @@ wTextureRenderImage(WTexture *texture, int width, int height, int relief) width, height, relief); } #endif + if (!image) { + RErrorCode = RERR_INTERNAL; + } break; #endif /* TEXTURE_PLUGIN */ @@ -529,8 +547,17 @@ wTextureRenderImage(WTexture *texture, int width, int height, int relief) } if (!image) { + RColor gray; + wwarning(_("could not render texture: %s"), RMessageForError(RErrorCode)); - return None; + + image = RCreateImage(width, height, False); + + gray.red = 190; + gray.green = 190; + gray.blue = 190; + gray.alpha = 255; + RClearImage(image, &gray); }