Hello, I've made a patch that fixes the look of the MWM borders and
title bars. Apparently, the title bar, hidden handles, and buttons
were off by one or two pixels.
I've also made another fix which is also included in the patch. The
separators were actually 2 pixels off and do meet both ends of a menu.
This isn't the correct look when compared to a real MWM menu.
These fixes, of course were extremely simple and hope to have them
added to FVWM.
I don't have a place to host the file, so here goes:
!--- snip ------ snip ------ snip ------ snip ------ snip ------ snip ---!
? mwm_motif_corrections.patch
Index: fvwm/borders.c
===================================================================
RCS file: /home/cvs/fvwm/fvwm/fvwm/borders.c,v
retrieving revision 1.251
diff -u -r1.251 borders.c
--- fvwm/borders.c 27 Jan 2007 11:33:15 -0000 1.251
+++ fvwm/borders.c 6 May 2007 08:25:25 -0000
@@ -1029,7 +1029,7 @@
/* get mark's length and thickness */
inset = (br->relief.w_shin != 0 || br->relief.w_din != 0);
- br->marks.length = fw->boundary_width - br->relief.w_dout - inset;
+ br->marks.length = fw->boundary_width - br->relief.w_dout - inset + 1;
if (br->marks.length <= 0)
{
br->marks.has_x_marks = 0;
@@ -1107,8 +1107,8 @@
}
static void border_draw_x_mark(
- border_relief_descr *br, int x, int y, Pixmap dest_pix,
- Bool do_draw_shadow)
+ border_relief_descr *br, int x, int y, int relief_offset,
+ Pixmap dest_pix, Bool do_draw_shadow)
{
int k;
int length;
@@ -1143,7 +1143,7 @@
x1 = x;
y1 = y + k;
}
- x2 = x1 + length;
+ x2 = x1 + length + relief_offset;
y2 = y1;
XDrawLine(dpy, dest_pix, gc, x1, y1, x2, y2);
}
@@ -1152,8 +1152,8 @@
}
static void border_draw_y_mark(
- border_relief_descr *br, int x, int y, Pixmap dest_pix,
- Bool do_draw_shadow)
+ border_relief_descr *br, int x, int y, int relief_offset,
+ Pixmap dest_pix, Bool do_draw_shadow)
{
int k;
int length;
@@ -1165,6 +1165,7 @@
}
y += br->marks.offset_tl;
gc = (do_draw_shadow) ? br->gcs.shadow : br->gcs.relief;
+
/* draw it */
for (k = 0, length = br->marks.length; k < br->marks.thickness;
k++, length--)
@@ -1189,7 +1190,8 @@
y1 = y;
}
x2 = x1;
- y2 = y1 + length - 1;
+ y2 = y1 + length - 1 + relief_offset;
+
XDrawLine(dpy, dest_pix, gc, x1, y1, x2, y2);
}
@@ -1214,36 +1216,36 @@
switch (part)
{
case PART_BORDER_N:
- border_draw_y_mark(br, 0, 0, dest_pix, False);
- border_draw_y_mark(br, w, 0, dest_pix, True);
+ border_draw_y_mark(br, 0, 1, 0, dest_pix, False);
+ border_draw_y_mark(br, w, 1, -1, dest_pix, True);
break;
case PART_BORDER_S:
- border_draw_y_mark(br, 0, h + o, dest_pix, False);
- border_draw_y_mark(br, w, h + o, dest_pix, True);
+ border_draw_y_mark(br, 0, h + o, -1, dest_pix, False);
+ border_draw_y_mark(br, w, h + o + 1, 0, dest_pix, True);
break;
case PART_BORDER_E:
- border_draw_x_mark(br, w + o, 0, dest_pix, False);
- border_draw_x_mark(br, w + o, h, dest_pix, True);
+ border_draw_x_mark(br, w + o, 0, -1, dest_pix, False);
+ border_draw_x_mark(br, w + o + 1, h, 0, dest_pix, True);
break;
case PART_BORDER_W:
- border_draw_x_mark(br, 0, 0, dest_pix, False);
- border_draw_x_mark(br, 0, h, dest_pix, True);
+ border_draw_x_mark(br, 1, 0, 0, dest_pix, False);
+ border_draw_x_mark(br, 1, h, 0, dest_pix, True);
break;
case PART_BORDER_NW:
- border_draw_x_mark(br, 0, t, dest_pix, True);
- border_draw_y_mark(br, l, 0, dest_pix, True);
+ border_draw_x_mark(br, 1, t, 0, dest_pix, True);
+ border_draw_y_mark(br, l, 1, -1, dest_pix, True);
break;
case PART_BORDER_NE:
- border_draw_x_mark(br, l + o, t, dest_pix, True);
- border_draw_y_mark(br, 0, 0, dest_pix, False);
+ border_draw_x_mark(br, l + o + 1, t, 0, dest_pix, True);
+ border_draw_y_mark(br, 0, 0, 0, dest_pix, False);
break;
case PART_BORDER_SW:
- border_draw_x_mark(br, 0, 0, dest_pix, False);
- border_draw_y_mark(br, l, t + o, dest_pix, True);
+ border_draw_x_mark(br, 1, 0, 0, dest_pix, False);
+ border_draw_y_mark(br, l, t + o + 1, 0, dest_pix, True);
break;
case PART_BORDER_SE:
- border_draw_x_mark(br, l + o, 0, dest_pix, False);
- border_draw_y_mark(br, 0, t + o, dest_pix, False);
+ border_draw_x_mark(br, l + o, 0, -1, dest_pix, False);
+ border_draw_y_mark(br, 0, t + o, -1, dest_pix, False);
break;
default:
return;
@@ -3370,7 +3372,7 @@
button_g->height - 1,
(do_reverse_relief) ? sgc : rgc,
(do_reverse_relief) ? rgc : sgc,
- td->cd->relief_width, True);
+ td->cd->relief_width, False);
break;
default:
/* flat */
@@ -3587,7 +3589,7 @@
fw->title_thickness - 1),
(reverse) ? tdd->sgc : tdd->rgc,
(reverse) ? tdd->rgc : tdd->sgc, td->cd->relief_width,
- True, rotation);
+ False, rotation);
break;
default:
/* flat */
Index: fvwm/menuitem.c
===================================================================
RCS file: /home/cvs/fvwm/fvwm/fvwm/menuitem.c,v
retrieving revision 1.41
diff -u -r1.41 menuitem.c
--- fvwm/menuitem.c 27 Jan 2007 11:33:15 -0000 1.41
+++ fvwm/menuitem.c 6 May 2007 08:25:25 -0000
@@ -84,8 +84,8 @@
static void draw_separator(
Window w, GC TopGC, GC BottomGC, int x1, int y, int x2)
{
- XDrawLine(dpy, w, TopGC , x1, y, x2, y);
- XDrawLine(dpy, w, BottomGC, x1-1, y+1, x2+1, y+1);
+ XDrawLine(dpy, w, TopGC , x1-2, y, x2+2, y);
+ XDrawLine(dpy, w, BottomGC, x1-2, y+1, x2+2, y+1);
return;
}
@@ -121,7 +121,7 @@
return;
}
-static void draw_higlight_background(
+static void draw_highlight_background(
struct MenuPaintItemParameters *mpip, int x, int y, int width,
int height, colorset_t *cs, GC gc)
{
@@ -501,11 +501,11 @@
2 * relief_thickness;
if (ST_DO_HILIGHT_BACK(ms))
{
- draw_higlight_background(
+ draw_highlight_background(
mpip, lit_x_start,
y_offset + relief_thickness,
lit_x_end - lit_x_start,
- y_height - relief_thickness,
+ y_height + 1 - relief_thickness,
(cs >= 0 ? &Colorset[cs] : NULL),
gcs.back_gc);
item_cleared = True;
@@ -549,7 +549,7 @@
MDIM_HILIGHT_WIDTH(*dim) > 0 &&
ST_DO_HILIGHT_TITLE_BACK(ms))
{
- draw_higlight_background(
+ draw_highlight_background(
mpip, lit_x_start,
y_offset + relief_thickness,
lit_x_end - lit_x_start,
!--- snip ------ snip ------ snip ------ snip ------ snip ------ snip ---!