summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2008-01-29 00:42:15 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2008-01-29 00:42:15 +0000
commit38dcd3f172c9bd74dd6726ba921ddd8a929be386 (patch)
tree76729f91d7394cfca95b62cec4464e2cc3c8101b /render
parent416c81208b6dc90b63af35308294e316faced6d9 (diff)
downloadnetsurf-38dcd3f172c9bd74dd6726ba921ddd8a929be386.tar.gz
netsurf-38dcd3f172c9bd74dd6726ba921ddd8a929be386.tar.bz2
Apply min font size config option to radio icons and checkboxes.
svn path=/trunk/netsurf/; revision=3797
Diffstat (limited to 'render')
-rw-r--r--render/layout.c60
1 files 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: