widget_border_width (Lisp_Object domain);
static int
widget_spacing (Lisp_Object domain);
-
+#define BORDER_FIDDLE_FACTOR 10
#ifdef DEBUG_WIDGETS
int debug_widget_instances;
#endif
IMAGE_INSTANCE_WIDGET_FACE (ii),
&w, &h, 0, domain);
/* Adjust the size for borders. */
- if (IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii))
+ if (width && IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii))
*width = w + 2 * widget_instance_border_width (ii);
- if (IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii))
+ if (height && IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii))
*height = h + 2 * widget_instance_border_width (ii);
}
}
/* Finish off with dynamic sizing. */
- if (!NILP (IMAGE_INSTANCE_WIDGET_WIDTH_SUBR (ii)))
+ if (width && !NILP (IMAGE_INSTANCE_WIDGET_WIDTH_SUBR (ii)))
{
dynamic_width = Feval (IMAGE_INSTANCE_WIDGET_WIDTH_SUBR (ii));
if (INTP (dynamic_width))
*width = XINT (dynamic_width);
}
- if (!NILP (IMAGE_INSTANCE_WIDGET_HEIGHT_SUBR (ii)))
+ if (height && !NILP (IMAGE_INSTANCE_WIDGET_HEIGHT_SUBR (ii)))
{
dynamic_height = Feval (IMAGE_INSTANCE_WIDGET_HEIGHT_SUBR (ii));
if (INTP (dynamic_height))
glyph_query_geometry (XCAR (items), &gwidth, &gheight, disp,
image_instance);
ph_adjust = gheight;
+ /* Include text width in vertical layouts. */
+ if (IMAGE_INSTANCE_SUBWINDOW_ORIENT (ii) == LAYOUT_VERTICAL)
+ maxpw = gwidth + BORDER_FIDDLE_FACTOR;
items = XCDR (items);
}
IMAGE_INSTANCE_LAYOUT_BORDER (ii) = make_int (gheight / 2);
/* #### Really, what should this be? */
- glyph_do_layout (border, gwidth, gheight, 10, 0,
+ glyph_do_layout (border, gwidth, gheight, BORDER_FIDDLE_FACTOR, 0,
image_instance);
}