1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-20 21:08:08 +01:00

pass texture to plugin so it doesn't have to grab from title bar.

add experiment plugin support to menu entry, performance need to
be improved. I'm thinking of making a compressed expose event geometry.
This commit is contained in:
id
2000-12-06 16:34:58 +00:00
parent 83824dbcc3
commit 756ab2c019
4 changed files with 51 additions and 8 deletions

View File

@@ -272,6 +272,7 @@ logicalCombineArea(RImage *bg, RImage *image,
int _dx, int _dy, int _dx, int _dy,
int opaquueness) { int opaquueness) {
/*
if (_dx < 0) { if (_dx < 0) {
_sx = -_dx; _sx = -_dx;
_sw = _sw + _dx; _sw = _sw + _dx;
@@ -291,6 +292,7 @@ logicalCombineArea(RImage *bg, RImage *image,
if (_dy + _sh > bg->height) { if (_dy + _sh > bg->height) {
_sh = bg->height - _dy; _sh = bg->height - _dy;
} }
*/
if (_sh > 0 && _sw > 0) { if (_sh > 0 && _sw > 0) {
if (opaquueness) { if (opaquueness) {
@@ -332,7 +334,7 @@ drawFreeTypeString (proplist_t pl, Drawable d,
} }
if (rimg) { if (rimg) {
for (i = 0, j = 3; i < strlen(text); i++) { for (i = 0, j = x; i < strlen(text); i++) {
if (!data->glyphs_array[text[i]]) { if (!data->glyphs_array[text[i]]) {
data->glyphs_array[text[i]] = renderChar(data->face, (FT_ULong)text[i], &data->color); data->glyphs_array[text[i]] = renderChar(data->face, (FT_ULong)text[i], &data->color);
data->glyphs_shadow_array[text[i]] = renderChar(data->face, (FT_ULong)text[i], &black_color); data->glyphs_shadow_array[text[i]] = renderChar(data->face, (FT_ULong)text[i], &black_color);
@@ -342,22 +344,30 @@ drawFreeTypeString (proplist_t pl, Drawable d,
int _dx, _dy, _sw, _sh; int _dx, _dy, _sw, _sh;
_dx = j + data->glyphs_array[text[i]]->left; _dx = j + data->glyphs_array[text[i]]->left;
_dy = rimg->height - data->glyphs_array[text[i]]->top ; _dy = (height + data->face->size->metrics.y_ppem)/2 - data->glyphs_array[text[i]]->top;
_sw = data->glyphs_array[text[i]]->image->width; _sw = data->glyphs_array[text[i]]->image->width;
_sh = data->glyphs_array[text[i]]->image->height; _sh = data->glyphs_array[text[i]]->image->height;
logicalCombineArea(rimg, data->glyphs_shadow_array[text[i]]->image, logicalCombineArea(rimg, data->glyphs_shadow_array[text[i]]->image,
0, 0, _sw, _sh, _dx-2, _dy-2, 100); 0, 0, _sw, _sh, _dx-2, _dy+2, 100);
logicalCombineArea(rimg, data->glyphs_array[text[i]]->image, logicalCombineArea(rimg, data->glyphs_array[text[i]]->image,
0, 0, _sw, _sh, _dx-3, _dy-3, 0); 0, 0, _sw, _sh, _dx-3, _dy+1, 0);
j += data->glyphs_array[text[i]]->advance_x >> 6; j += data->glyphs_array[text[i]]->advance_x >> 6;
} }
} }
RConvertImage(rc, rimg, &pixmap); RConvertImage(rc, rimg, &pixmap);
XCopyArea(ds_dpy, pixmap, d, gc, 0, 0, rimg->width, rimg->height, 0, 0); XCopyArea(ds_dpy, pixmap, d, gc, 0, 0, rimg->width, height, 0, y);
XFreePixmap(ds_dpy, pixmap); XFreePixmap(ds_dpy, pixmap);
/*
_debug("%d\n", height);
*/
/*
i = (height + data->face->size->metrics.y_ppem)/2 - data->face->size->metrics.y_ppem;
XDrawLine(ds_dpy, d, gc, 5, y + i, 100, y + data->face->size->metrics.y_ppem);
XDrawLine(ds_dpy, d, gc, 100, y + i, 5, y + data->face->size->metrics.y_ppem);
*/
RDestroyImage(rimg); RDestroyImage(rimg);
} }

View File

@@ -652,14 +652,17 @@ WDefaultEntry optionList[] = {
{"MenuTitleColor", "white", NULL, {"MenuTitleColor", "white", NULL,
NULL, getTextRenderer, setMenuTitleColor NULL, getTextRenderer, setMenuTitleColor
}, },
{"MenuTextColor", "black", NULL,
NULL, getTextRenderer, setMenuTextColor
},
#else #else
{"MenuTitleColor", "white", NULL, {"MenuTitleColor", "white", NULL,
NULL, getColor, setMenuTitleColor NULL, getColor, setMenuTitleColor
}, },
#endif
{"MenuTextColor", "black", NULL, {"MenuTextColor", "black", NULL,
NULL, getColor, setMenuTextColor NULL, getColor, setMenuTextColor
}, },
#endif
{"MenuDisabledColor", "\"#616161\"", NULL, {"MenuDisabledColor", "\"#616161\"", NULL,
NULL, getColor, setMenuDisabledColor NULL, getColor, setMenuDisabledColor
}, },

View File

@@ -1093,16 +1093,17 @@ wFrameWindowPaint(WFrameWindow *fwin)
scr->drawstring_func[DRAWSTRING_CURRENT_STATE]->proc.drawString( scr->drawstring_func[DRAWSTRING_CURRENT_STATE]->proc.drawString(
scr->drawstring_func[DRAWSTRING_CURRENT_STATE]->arg, scr->drawstring_func[DRAWSTRING_CURRENT_STATE]->arg,
fwin->titlebar->window, fwin->titlebar->window,
x, *fwin->title_clearance + TITLEBAR_EXTEND_SPACE, x, 0,
fwin->titlebar->width, fwin->top_width, fwin->titlebar->width, fwin->top_width,
fwin->title, p); fwin->title, p);
free(p); free(p);
} else { } else {
WMDrawString(scr->wmscreen, fwin->titlebar->window, WMDrawString(scr->wmscreen, fwin->titlebar->window,
*fwin->title_gc, *fwin->font, *fwin->title_gc, *fwin->font,
x, *fwin->title_clearance + TITLEBAR_EXTEND_SPACE, x, ((signed)fwin->top_width - (signed)WMFontHeight(*fwin->font))/2,
title, titlelen); title, titlelen);
} }
#undef DRAWSTRING_CURRENT_STATE
#else #else
WMDrawString(scr->wmscreen, fwin->titlebar->window, WMDrawString(scr->wmscreen, fwin->titlebar->window,
*fwin->title_gc, *fwin->font, x, *fwin->title_clearance + TITLEBAR_EXTEND_SPACE, *fwin->title_gc, *fwin->font, x, *fwin->title_clearance + TITLEBAR_EXTEND_SPACE,

View File

@@ -784,8 +784,37 @@ paintEntry(WMenu *menu, int index, int selected)
if (entry->flags.indicator) if (entry->flags.indicator)
x += MENU_INDICATOR_SPACE + 2; x += MENU_INDICATOR_SPACE + 2;
#ifdef DRAWSTRING_PLUGIN
if (scr->drawstring_func[W_STRING_MTEXT]) {
Pixmap tmp_bg;
void **p;
tmp_bg = XCreatePixmap(dpy, win, w, menu->entry_height, DefaultDepth(dpy, DefaultScreen(dpy)));
XCopyArea(dpy, win, tmp_bg, textGC, 0, y, w, menu->entry_height, 0, 0);
p = wPluginPackData(4,
textGC,
scr->menu_entry_font,
scr->drawstring_func[W_STRING_MTEXT]->data,
/*menu->menu_texture_data,*/
tmp_bg,
"extendable");
scr->drawstring_func[W_STRING_MTEXT]->proc.drawString(
scr->drawstring_func[W_STRING_MTEXT]->arg,
win,
x, y,
menu->frame->titlebar->width, menu->entry_height,
entry->text, p);
XFreePixmap(dpy, tmp_bg);
free(p);
#undef DRAWSTRING_CURRENT_STATE
} else {
WMDrawString(scr->wmscreen, win, textGC, scr->menu_entry_font,
x, 3 + y + wPreferences.menu_text_clearance, entry->text, strlen(entry->text));
}
#else
WMDrawString(scr->wmscreen, win, textGC, scr->menu_entry_font, WMDrawString(scr->wmscreen, win, textGC, scr->menu_entry_font,
x, 3 + y + wPreferences.menu_text_clearance, entry->text, strlen(entry->text)); x, 3 + y + wPreferences.menu_text_clearance, entry->text, strlen(entry->text));
#endif
if (entry->cascade>=0) { if (entry->cascade>=0) {
/* draw the cascade indicator */ /* draw the cascade indicator */