From 38dcd3f172c9bd74dd6726ba921ddd8a929be386 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Tue, 29 Jan 2008 00:42:15 +0000 Subject: [PATCH] Apply min font size config option to radio icons and checkboxes. svn path=/trunk/netsurf/; revision=3797 --- render/layout.c | 60 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/render/layout.c b/render/layout.c index e9f356e11..247bdf705 100644 --- a/render/layout.c +++ b/render/layout.c @@ -46,6 +46,7 @@ #include "desktop/options.h" #include "render/box.h" #include "render/font.h" +#include "render/form.h" #include "render/layout.h" #define NDEBUG #include "utils/log.h" @@ -1027,6 +1028,7 @@ bool layout_line(struct box *first, int *width, int *y, int space_before = 0, space_after = 0; unsigned int inline_count = 0; unsigned int i; + int min_gadget_size = 0; LOG(("first %p, first->text '%.*s', width %i, y %i, cx %i, cy %i", first, (int) first->length, first->text, *width, @@ -1157,16 +1159,31 @@ bool layout_line(struct box *first, int *width, int *y, /* inline replaced, 10.3.2 and 10.6.2 */ assert(b->style); + min_gadget_size = 0; + /* checkboxes and radiobuttons contain no text but need to + * follow configured min font size option */ + if (b->gadget && (b->gadget->type == GADGET_RADIO || + b->gadget->type == GADGET_CHECKBOX)) { + min_gadget_size = option_font_min_size * css_screen_dpi + / 720.0; + min_gadget_size = min_gadget_size > css_len2px(&b-> + style->font_size.value.length, b->style) ? + min_gadget_size : 0; + } + /* calculate box width */ switch (b->style->width.width) { case CSS_WIDTH_LENGTH: - b->width = css_len2px(&b->style->width.value. - length, b->style); + b->width = min_gadget_size ? css_screen_dpi * + option_font_min_size / 720.0 : + css_len2px(&b->style->width.value. + length, b->style); break; case CSS_WIDTH_PERCENT: - b->width = *width * - b->style->width.value.percent / - 100; + b->width = min_gadget_size ? css_screen_dpi * + option_font_min_size / 720.0 : + css_len2px(&b->style->width.value. + length, b->style); break; case CSS_WIDTH_AUTO: default: @@ -1177,8 +1194,10 @@ bool layout_line(struct box *first, int *width, int *y, /* height */ switch (b->style->height.height) { case CSS_HEIGHT_LENGTH: - b->height = css_len2px(&b->style->height.length, - b->style); + b->height = min_gadget_size ? css_screen_dpi * + option_font_min_size / 720.0 : + css_len2px(&b->style->height.length, + b->style); break; case CSS_HEIGHT_AUTO: default: @@ -1561,6 +1580,7 @@ struct box *layout_minmax_line(struct box *first, float frac; size_t i, j; struct box *b; + int min_gadget_size = 0; /* corresponds to the pass 1 loop in layout_line() */ for (b = first; b; b = b->next) { @@ -1655,13 +1675,25 @@ struct box *layout_minmax_line(struct box *first, /* inline replaced, 10.3.2 and 10.6.2 */ assert(b->style); + min_gadget_size = 0; + /* checkboxes and radiobuttons contain no text but need to + * follow configured min font size option */ + if (b->gadget && (b->gadget->type == GADGET_RADIO || + b->gadget->type == GADGET_CHECKBOX)) { + min_gadget_size = option_font_min_size * css_screen_dpi + / 720.0; + min_gadget_size = min_gadget_size > css_len2px(&b-> + style->font_size.value.length, b->style) ? + min_gadget_size : 0; + } + /* calculate box width */ switch (b->style->width.width) { case CSS_WIDTH_LENGTH: - width = css_len2px(&b->style->width.value. - length, b->style); - if (width < 0) - width = 0; + width = min_gadget_size ? css_screen_dpi * + option_font_min_size / 720.0 : + css_len2px(&b->style->width.value. + length, b->style); break; case CSS_WIDTH_PERCENT: /*b->width = width * @@ -1677,8 +1709,10 @@ struct box *layout_minmax_line(struct box *first, /* height */ switch (b->style->height.height) { case CSS_HEIGHT_LENGTH: - height = css_len2px(&b->style->height.length, - b->style); + height = min_gadget_size ? css_screen_dpi * + option_font_min_size / 720.0 : + css_len2px(&b->style->height.length, + b->style); break; case CSS_HEIGHT_AUTO: default: