mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 20:38:08 +01:00
er.. WPrefs Appearance section update
This commit is contained in:
@@ -14,6 +14,7 @@ Changes since version 0.51.2:
|
||||
- enhancements to the modelock patch (id@windowmaker.org)
|
||||
- show kbd mode for modelock (id@windowmaker.org)
|
||||
- enhanced positioning of transient windows
|
||||
- added dynamically loadable texture renderer code (from ?)
|
||||
|
||||
|
||||
Changes since version 0.51.1:
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
1
TODO
1
TODO
@@ -1,6 +1,7 @@
|
||||
|
||||
Do ASAP:
|
||||
========
|
||||
- exitscript
|
||||
- fix bestvisual selection code. Broken.
|
||||
- fix RemakeStackList() to account for transient windows
|
||||
- blink border of clients with UrgencyHint set between red and black
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -1332,7 +1332,6 @@ getDefaultMenu(_Panel *panel, int *hasWSMenu)
|
||||
}
|
||||
}
|
||||
|
||||
free(gspath);
|
||||
free(menuPath);
|
||||
|
||||
if (menu) {
|
||||
@@ -1358,7 +1357,6 @@ showData(_Panel *panel)
|
||||
|
||||
menuPath = wmalloc(strlen(gspath)+32);
|
||||
strcpy(menuPath, gspath);
|
||||
free(gspath);
|
||||
strcat(menuPath, "/Defaults/WMRootMenu");
|
||||
|
||||
menu = PLGetProplistWithPath(menuPath);
|
||||
|
||||
@@ -100,6 +100,7 @@ typedef struct _TexturePanel {
|
||||
WMButton *dispB;
|
||||
WMPopUpButton *arrP;
|
||||
|
||||
RImage *image;
|
||||
char *imageFile;
|
||||
|
||||
/*****/
|
||||
@@ -197,6 +198,36 @@ updateGradButtons(TexturePanel *panel)
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
updateTGradImage(TexturePanel *panel)
|
||||
{
|
||||
RImage *image, *gradient;
|
||||
WMPixmap *pixmap;
|
||||
RColor from;
|
||||
RColor to;
|
||||
WMColor *color;
|
||||
|
||||
color = WMGetColorWellColor(panel->tcol1W);
|
||||
from.red = WMRedComponentOfColor(color)>>8;
|
||||
from.green = WMGreenComponentOfColor(color)>>8;
|
||||
from.blue = WMBlueComponentOfColor(color)>>8;
|
||||
|
||||
color = WMGetColorWellColor(panel->tcol2W);
|
||||
to.red = WMRedComponentOfColor(color)>>8;
|
||||
to.green = WMGreenComponentOfColor(color)>>8;
|
||||
to.blue = WMBlueComponentOfColor(color)>>8;
|
||||
|
||||
if (WMGetButtonSelected(panel->dirhB)) {
|
||||
gradient = RRenderGradient(80, 30, &from, &to, RHorizontalGradient);
|
||||
} else if (WMGetButtonSelected(panel->dirvB)) {
|
||||
gradient = RRenderGradient(80, 30, &from, &to, RVerticalGradient);
|
||||
} else {
|
||||
gradient = RRenderGradient(80, 30, &from, &to, RDiagonalGradient);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
updateSGradButtons(TexturePanel *panel)
|
||||
{
|
||||
@@ -619,15 +650,21 @@ browseImageCallback(WMWidget *w, void *data)
|
||||
return;
|
||||
}
|
||||
|
||||
pixmap = WMCreatePixmapFromRImage(scr, image, 128);
|
||||
RDestroyImage(image);
|
||||
if (panel->image)
|
||||
RDestroyImage(panel->image);
|
||||
panel->image = image;
|
||||
|
||||
size = WMGetPixmapSize(pixmap);
|
||||
WMSetLabelImage(panel->imageL, pixmap);
|
||||
WMResizeWidget(panel->imageL, size.width, size.height);
|
||||
if (WMGetPopUpButtonSelectedItem(panel->typeP) == TYPE_PIXMAP) {
|
||||
pixmap = WMCreatePixmapFromRImage(scr, image, 128);
|
||||
|
||||
WMReleasePixmap(pixmap);
|
||||
size = WMGetPixmapSize(pixmap);
|
||||
WMSetLabelImage(panel->imageL, pixmap);
|
||||
WMResizeWidget(panel->imageL, size.width, size.height);
|
||||
|
||||
WMReleasePixmap(pixmap);
|
||||
} else {
|
||||
updateTGradImage(panel);
|
||||
}
|
||||
panel->imageFile = path;
|
||||
|
||||
WMSetTextFieldText(panel->imageT, path);
|
||||
@@ -667,6 +704,11 @@ DestroyTexturePanel(TexturePanel *panel)
|
||||
void
|
||||
ShowTexturePanel(TexturePanel *panel)
|
||||
{
|
||||
Display *dpy = WMScreenDisplay(WMWidgetScreen(panel->win));
|
||||
|
||||
WMSetWindowUPosition(panel->win,
|
||||
WidthOfScreen(DefaultScreenOfDisplay(dpy)),
|
||||
HeightOfScreen(DefaultScreenOfDisplay(dpy)));
|
||||
WMMapWidget(panel->win);
|
||||
}
|
||||
|
||||
@@ -723,10 +765,10 @@ SetTexturePanelTexture(TexturePanel *panel, char *name, proplist_t texture)
|
||||
|
||||
p = PLGetArrayElement(texture, 1);
|
||||
if (!p) {
|
||||
goto bad_texture;
|
||||
str = "black";
|
||||
} else {
|
||||
str = PLGetString(p);
|
||||
}
|
||||
|
||||
str = PLGetString(p);
|
||||
color = WMCreateNamedColor(scr, str, False);
|
||||
|
||||
WMSetColorWellColor(panel->defcW, color);
|
||||
@@ -741,9 +783,10 @@ SetTexturePanelTexture(TexturePanel *panel, char *name, proplist_t texture)
|
||||
|
||||
p = PLGetArrayElement(texture, 1);
|
||||
if (!p) {
|
||||
goto bad_texture;
|
||||
str = "black";
|
||||
} else {
|
||||
str = PLGetString(p);
|
||||
}
|
||||
str = PLGetString(p);
|
||||
color = WMCreateNamedColor(scr, str, False);
|
||||
|
||||
WMSetColorWellColor(panel->tcol1W, color);
|
||||
@@ -752,9 +795,10 @@ SetTexturePanelTexture(TexturePanel *panel, char *name, proplist_t texture)
|
||||
|
||||
p = PLGetArrayElement(texture, 2);
|
||||
if (!p) {
|
||||
goto bad_texture;
|
||||
str = "black";
|
||||
} else {
|
||||
str = PLGetString(p);
|
||||
}
|
||||
str = PLGetString(p);
|
||||
color = WMCreateNamedColor(scr, str, False);
|
||||
|
||||
WMSetColorWellColor(panel->tcol2W, color);
|
||||
@@ -766,11 +810,43 @@ SetTexturePanelTexture(TexturePanel *panel, char *name, proplist_t texture)
|
||||
} else if (strcasecmp(type, "thgradient")==0
|
||||
|| strcasecmp(type, "tvgradient")==0
|
||||
|| strcasecmp(type, "tdgradient")==0) {
|
||||
int i;
|
||||
|
||||
WMSetPopUpButtonSelectedItem(panel->typeP, TYPE_TGRADIENT);
|
||||
|
||||
/****** TODO: setador de textura apartir desse */
|
||||
gradient = type[1];
|
||||
|
||||
WMSetTextFieldText(panel->imageT,
|
||||
PLGetString(PLGetArrayElement(texture, 1)));
|
||||
|
||||
i = 180;
|
||||
sscanf(PLGetString(PLGetArrayElement(texture, 2)), "%i", &i);
|
||||
WMSetSliderValue(panel->topaS, i);
|
||||
|
||||
p = PLGetArrayElement(texture, 3);
|
||||
if (!p) {
|
||||
str = "black";
|
||||
} else {
|
||||
str = PLGetString(p);
|
||||
}
|
||||
color = WMCreateNamedColor(scr, str, False);
|
||||
|
||||
WMSetColorWellColor(panel->tcol1W, color);
|
||||
|
||||
WMReleaseColor(color);
|
||||
|
||||
p = PLGetArrayElement(texture, 4);
|
||||
if (!p) {
|
||||
str = "black";
|
||||
} else {
|
||||
str = PLGetString(p);
|
||||
}
|
||||
color = WMCreateNamedColor(scr, str, False);
|
||||
|
||||
WMSetColorWellColor(panel->tcol2W, color);
|
||||
|
||||
WMReleaseColor(color);
|
||||
|
||||
/*...............................................*/
|
||||
} else if (strcasecmp(type, "mhgradient")==0
|
||||
|| strcasecmp(type, "mvgradient")==0
|
||||
@@ -787,10 +863,10 @@ SetTexturePanelTexture(TexturePanel *panel, char *name, proplist_t texture)
|
||||
|
||||
p = PLGetArrayElement(texture, 1);
|
||||
if (!p) {
|
||||
goto bad_texture;
|
||||
str = "black";
|
||||
} else {
|
||||
str = PLGetString(p);
|
||||
}
|
||||
|
||||
str = PLGetString(p);
|
||||
color = WMCreateNamedColor(scr, str, False);
|
||||
|
||||
WMSetColorWellColor(panel->defcW, color);
|
||||
@@ -803,9 +879,10 @@ SetTexturePanelTexture(TexturePanel *panel, char *name, proplist_t texture)
|
||||
|
||||
p = PLGetArrayElement(texture, i);
|
||||
if (!p) {
|
||||
goto bad_texture;
|
||||
str = "black";
|
||||
} else {
|
||||
str = PLGetString(p);
|
||||
}
|
||||
str = PLGetString(p);
|
||||
|
||||
XParseColor(WMScreenDisplay(scr), WMScreenRContext(scr)->cmap,
|
||||
str, &xcolor);
|
||||
@@ -1059,8 +1136,6 @@ CreateTexturePanel(WMWindow *keyWindow)
|
||||
WMSetPopUpButtonSelectedItem(panel->typeP, 0);
|
||||
WMSetPopUpButtonAction(panel->typeP, changeTypeCallback, panel);
|
||||
|
||||
WMSetPopUpButtonItemEnabled(panel->typeP, TYPE_TGRADIENT, False);
|
||||
|
||||
/* color */
|
||||
panel->defcF = WMCreateFrame(panel->win);
|
||||
WMResizeWidget(panel->defcF, 100, 75);
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
20
configure.in
20
configure.in
@@ -98,6 +98,22 @@ AC_FUNC_VPRINTF
|
||||
AC_FUNC_ALLOCA
|
||||
AC_CHECK_FUNCS(gethostname select poll strerror strncasecmp setpgid atexit)
|
||||
|
||||
|
||||
|
||||
dnl Loading of dynamic libraries at runtime
|
||||
dnl =======================================
|
||||
AC_CHECK_FUNC(dlopen, [HAVEDL="yes"],
|
||||
AC_CHECK_LIB(dl, dlopen, [DLLIBS="-ldl" HAVEDL="yes"],
|
||||
DLLIBS="" ))
|
||||
|
||||
if test "x$HAVEDL" = xyes; then
|
||||
AC_CHECK_HEADERS(dlfcn.h)
|
||||
fi
|
||||
|
||||
|
||||
|
||||
dnl Check CPP
|
||||
dnl =========
|
||||
if test "x$CPP_PATH" = x; then
|
||||
AC_PATH_PROG(CPP_PATH, cpp, notfound,
|
||||
$PATH:/lib:/usr/bin:/bin:/usr/lib:/usr/ccs/lib)
|
||||
@@ -153,6 +169,7 @@ dnl AM_GNU_GETTEXT
|
||||
|
||||
|
||||
INTLIBS=""
|
||||
DLLIBS=""
|
||||
|
||||
|
||||
AC_CHECK_FUNC(gettext, [HAVEGETTEXT="yes"],
|
||||
@@ -260,6 +277,9 @@ if test "x$NLSDIR" = "x"; then
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
AC_SUBST(DLLIBS)
|
||||
AC_SUBST(INTLIBS)
|
||||
AC_SUBST(NLSDIR)
|
||||
AC_SUBST(MOFILES)
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -23,6 +23,7 @@ ru.po Russian Alexey Vyskubov <alexey@alv.stud.pu.ru>
|
||||
tr.po Turkish F. Kagan Gurkaynak <kgf@wpi.edu>
|
||||
fi.po Finnish Ville Hautamaki <villeh@cs.joensuu.fi>
|
||||
Ramin Miraftabi <ramin@cs.joensuu.fi>
|
||||
Tomi Kajala <tomi@iki.fi>
|
||||
hr.po Croatian 3 Toni Bilic <tbilic@efos.hr>
|
||||
el.po Greek Nikolaos Papagrigoriou <papanikos@usa.net>
|
||||
pl.po Polish Piotr Dembiñski <pdemb@aurora.put.poznan.pl>
|
||||
|
||||
@@ -115,5 +115,6 @@ wmaker_LDADD = \
|
||||
@GFXLIBS@ \
|
||||
@XLIBS@ \
|
||||
@INTLIBS@ \
|
||||
@DLLIBS@ \
|
||||
-lm
|
||||
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
@@ -103,7 +104,7 @@ CPPFLAGS = @CPPFLAGS@ @DFLAGS@ -DLOCALEDIR=\"$(NLSDIR)\"
|
||||
INCLUDES = -I$(top_srcdir)/wrlib -I$(top_srcdir)/WINGs @HEADER_SEARCH_PATH@
|
||||
|
||||
|
||||
wmaker_LDADD = $(top_builddir)/WINGs/libWINGs.a $(top_builddir)/wrlib/libwraster.la @LIBRARY_SEARCH_PATH@ @LIBPL@ @GFXLIBS@ @XLIBS@ @INTLIBS@ -lm
|
||||
wmaker_LDADD = $(top_builddir)/WINGs/libWINGs.a $(top_builddir)/wrlib/libwraster.la @LIBRARY_SEARCH_PATH@ @LIBPL@ @GFXLIBS@ @XLIBS@ @INTLIBS@ @DLLIBS@ -lm
|
||||
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = config.h
|
||||
|
||||
@@ -722,7 +722,6 @@ wClientGetNormalHints(WWindow *wwin, XWindowAttributes *wattribs, Bool geometry,
|
||||
wwin->normal_hints->flags &= ~PPosition;
|
||||
#endif
|
||||
if (wwin->normal_hints->flags & (USPosition|PPosition)) {
|
||||
puts("QWEWQEWQ");
|
||||
*x = wwin->normal_hints->x;
|
||||
*y = wwin->normal_hints->y;
|
||||
}
|
||||
|
||||
@@ -148,6 +148,9 @@
|
||||
/* Define if you have the strncasecmp function. */
|
||||
#undef HAVE_STRNCASECMP
|
||||
|
||||
/* Define if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define if you have the <fcntl.h> header file. */
|
||||
#undef HAVE_FCNTL_H
|
||||
|
||||
|
||||
@@ -1602,6 +1602,7 @@ getEnum(WScreen *scr, WDefaultEntry *entry, proplist_t value, void *addr,
|
||||
* (thgradient <file> <opaqueness> <color> <color>)
|
||||
* (tvgradient <file> <opaqueness> <color> <color>)
|
||||
* (tdgradient <file> <opaqueness> <color> <color>)
|
||||
* (function <lib> <function> ...)
|
||||
*/
|
||||
|
||||
static WTexture*
|
||||
@@ -1853,7 +1854,47 @@ parse_texture(WScreen *scr, proplist_t pl)
|
||||
|
||||
texture = (WTexture*)wTextureMakeTGradient(scr, style, &color1, &color2,
|
||||
val, opacity);
|
||||
} else {
|
||||
}
|
||||
#ifdef TEXTURE_PLUGIN
|
||||
else if (strcasecmp(val, "function")==0) {
|
||||
|
||||
char *lib, *func, **argv;
|
||||
int i, argc;
|
||||
|
||||
if (nelem < 3)
|
||||
return NULL;
|
||||
|
||||
/* get the library name */
|
||||
elem = PLGetArrayElement(pl, 1);
|
||||
if (!elem || !PLIsString(elem)) {
|
||||
return NULL;
|
||||
}
|
||||
lib = PLGetString(elem);
|
||||
|
||||
/* get the function name */
|
||||
elem = PLGetArrayElement(pl, 2);
|
||||
if (!elem || !PLIsString(elem)) {
|
||||
return NULL;
|
||||
}
|
||||
func = PLGetString(elem);
|
||||
|
||||
argc = nelem - 3;
|
||||
argv = (char **) wmalloc (argc * sizeof (char *));
|
||||
|
||||
/* get the parameters */
|
||||
for (i=0; i<argc; i++) {
|
||||
elem = PLGetArrayElement(pl, 3+i);
|
||||
if (!elem || !PLIsString(elem)) {
|
||||
free (argv);
|
||||
return NULL;
|
||||
}
|
||||
argv[i] = PLGetString(elem);
|
||||
}
|
||||
|
||||
texture = (WTexture*)wTextureMakeFunction(scr, lib, func, argc, argv);
|
||||
}
|
||||
#endif /* TEXTURE_PLUGIN */
|
||||
else {
|
||||
wwarning(_("invalid texture type %s"), val);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,12 @@
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
|
||||
#ifdef TEXTURE_PLUGIN
|
||||
# ifdef HAVE_DLFCN_H
|
||||
# include <dlfcn.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@@ -177,6 +183,17 @@ wTextureDestroy(WScreen *scr, WTexture *texture)
|
||||
case WTEX_TDGRADIENT:
|
||||
RDestroyImage(texture->tgradient.pixmap);
|
||||
break;
|
||||
|
||||
#ifdef TEXTURE_PLUGIN
|
||||
case WTEX_FUNCTION:
|
||||
#ifdef HAVE_DLFCN_H
|
||||
if (texture->function.handle) {
|
||||
dlclose (texture->function.handle);
|
||||
}
|
||||
#endif
|
||||
free (texture->function.argv);
|
||||
break;
|
||||
#endif /* TEXTURE_PLUGIN */
|
||||
}
|
||||
if (CANFREE(texture->any.color.pixel))
|
||||
colors[count++] = texture->any.color.pixel;
|
||||
@@ -353,6 +370,46 @@ wTextureMakeTGradient(WScreen *scr, int style, RColor *from, RColor *to,
|
||||
}
|
||||
|
||||
|
||||
#ifdef TEXTURE_PLUGIN
|
||||
WTexFunction*
|
||||
wTextureMakeFunction(WScreen *scr, char *lib, char *func, int argc, char **argv)
|
||||
{
|
||||
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
|
||||
/* open the library */
|
||||
texture->handle = dlopen(lib, RTLD_LAZY);
|
||||
if (!texture->handle) {
|
||||
wwarning(_("library \"%s\" cound not be opened."), lib);
|
||||
free(argv);
|
||||
free(texture);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* find the function */
|
||||
texture->render = dlsym (texture->handle, func);
|
||||
if (!texture->render) {
|
||||
wwarning(_("function \"%s\" not founf in library \"%s\""), func, lib);
|
||||
free(argv);
|
||||
dlclose(texture->handle);
|
||||
free(texture);
|
||||
return NULL;
|
||||
}
|
||||
#else
|
||||
wwarning(_("function textures not supported on this system, sorry."));
|
||||
#endif
|
||||
|
||||
/* success! */
|
||||
return texture;
|
||||
}
|
||||
#endif /* TEXTURE_PLUGIN */
|
||||
|
||||
|
||||
RImage*
|
||||
wTextureRenderImage(WTexture *texture, int width, int height, int relief)
|
||||
@@ -453,6 +510,18 @@ wTextureRenderImage(WTexture *texture, int width, int height, int relief)
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef TEXTURE_PLUGIN
|
||||
case WTEX_FUNCTION:
|
||||
#ifdef HAVE_DLFCN_H
|
||||
if (texture->function.render) {
|
||||
image = texture->function.render (
|
||||
texture->function.argc, texture->function.argv,
|
||||
width, height, relief);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
#endif /* TEXTURE_PLUGIN */
|
||||
|
||||
default:
|
||||
puts("ERROR in wTextureRenderImage()");
|
||||
image = NULL;
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
#define WTEX_THGRADIENT ((1<<9)|WREL_BORDER_MASK)
|
||||
#define WTEX_TVGRADIENT ((1<<10)|WREL_BORDER_MASK)
|
||||
#define WTEX_TDGRADIENT ((1<<11)|WREL_BORDER_MASK)
|
||||
#define WTEX_FUNCTION ((1<<12)|WREL_BORDER_MASK)
|
||||
|
||||
/* pixmap subtypes */
|
||||
#define WTP_TILE 2
|
||||
@@ -120,6 +121,18 @@ typedef struct WTexTGradient {
|
||||
int opacity;
|
||||
} WTexTGradient;
|
||||
|
||||
typedef struct WTexFunction {
|
||||
short type;
|
||||
char subtype;
|
||||
XColor normal;
|
||||
GC normal_gc;
|
||||
|
||||
void *handle;
|
||||
RImage *(*render) (int, char**, int, int, int);
|
||||
int argc;
|
||||
char **argv;
|
||||
} WTexFunction;
|
||||
|
||||
typedef union WTexture {
|
||||
WTexAny any;
|
||||
WTexSolid solid;
|
||||
@@ -127,6 +140,7 @@ typedef union WTexture {
|
||||
WTexMGradient mgradient;
|
||||
WTexPixmap pixmap;
|
||||
WTexTGradient tgradient;
|
||||
WTexFunction function;
|
||||
} WTexture;
|
||||
|
||||
|
||||
@@ -136,6 +150,9 @@ WTexMGradient *wTextureMakeMGradient(WScreen*, int, RColor**);
|
||||
WTexTGradient *wTextureMakeTGradient(WScreen*, int, RColor*, RColor*, char *, int);
|
||||
WTexPixmap *wTextureMakePixmap(WScreen *scr, int style, char *pixmap_file,
|
||||
XColor *color);
|
||||
#ifdef TEXTURE_PLUGIN
|
||||
WTexFunction *wTextureMakeFunction(WScreen*, char *, char *, int, char **);
|
||||
#endif
|
||||
void wTextureDestroy(WScreen*, WTexture*);
|
||||
void wTexturePaint(WTexture *, Pixmap *, WCoreWindow*, int, int);
|
||||
void wTextureRender(WScreen*, WTexture*, Pixmap*, int, int, int);
|
||||
|
||||
@@ -209,6 +209,8 @@
|
||||
#undef WINDOW_BIRTH_ZOOM
|
||||
|
||||
|
||||
#define TEXTURE_PLUGIN
|
||||
|
||||
/*
|
||||
*--------------------------------------------------------------------
|
||||
* Default Configuration
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -60,6 +60,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
@@ -62,6 +62,7 @@ host_triplet = @host@
|
||||
CC = @CC@
|
||||
CPP_PATH = @CPP_PATH@
|
||||
DFLAGS = @DFLAGS@
|
||||
DLLIBS = @DLLIBS@
|
||||
GFXLIBS = @GFXLIBS@
|
||||
HEADER_SEARCH_PATH = @HEADER_SEARCH_PATH@
|
||||
ICONEXT = @ICONEXT@
|
||||
|
||||
Reference in New Issue
Block a user