From 17be8cf216e08a57c511ec1ea43eae40874fa9de Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Mon, 13 Oct 2014 11:56:31 +0100 Subject: Put the font operations table alongside all the other core API The netsurf core is driven from numerous operation tables most of which are now set through a common netsurf_register() interface. The font and plotting interfaces are currently separate and unlike all the other operation tables are modified for differing contexts. This change moves the font operations alongside all the other operations table and remove unnecessary interaction with the renderers font internals. Further this also removes the need for css internals to be visible in frontends. --- amiga/font.c | 2 +- amiga/print.c | 2 +- atari/encoding.h | 2 - atari/font.c | 2 +- atari/gui.c | 2 +- beos/font.cpp | 2 +- beos/plotters.cpp | 2 +- beos/scaffolding.cpp | 2 +- beos/thumbnail.cpp | 2 +- beos/window.cpp | 2 +- cocoa/font.m | 4 +- desktop/browser_history.c | 14 +++---- desktop/font.h | 97 ++++++++++++++++++++++++++++++++++++++++++++ desktop/save_pdf/font_haru.c | 2 +- desktop/save_pdf/font_haru.h | 2 +- desktop/selection.c | 18 ++++---- desktop/textarea.c | 9 ++-- desktop/textinput.c | 20 ++++----- desktop/tree.c | 11 ++--- desktop/treeview.c | 10 +++-- framebuffer/fbtk/text.c | 2 +- framebuffer/font_freetype.c | 2 +- framebuffer/font_internal.c | 4 +- gtk/font_pango.c | 7 ++-- gtk/plotters.c | 1 - gtk/print.c | 7 ++-- gtk/scaffolding.c | 2 +- gtk/thumbnail.c | 8 ++-- monkey/font.c | 3 +- render/box_textarea.c | 3 +- render/font.c | 86 ++++++++++++++++++--------------------- render/font.h | 86 ++++++--------------------------------- render/form.c | 15 +++---- render/html.c | 2 +- render/html_interaction.c | 13 +++--- render/html_redraw.c | 17 ++++---- render/layout.c | 9 ++-- render/textplain.c | 15 +++---- riscos/dialog.c | 1 - riscos/font.c | 4 +- riscos/plotters.c | 2 - riscos/thumbnail.c | 8 ++-- windows/font.c | 2 +- 43 files changed, 270 insertions(+), 236 deletions(-) create mode 100644 desktop/font.h diff --git a/amiga/font.c b/amiga/font.c index d1fcf7597..711aeb67d 100755 --- a/amiga/font.c +++ b/amiga/font.c @@ -26,7 +26,7 @@ #include "amiga/schedule.h" #include "utils/nsoption.h" #include "desktop/browser.h" -#include "render/font.h" +#include "desktop/font.h" #include "utils/log.h" #include "utils/utf8.h" #include "utils/utils.h" diff --git a/amiga/print.c b/amiga/print.c index 66e5a558c..19c78d097 100644 --- a/amiga/print.c +++ b/amiga/print.c @@ -18,7 +18,7 @@ #include "desktop/printer.h" #include "amiga/plotters.h" -#include "render/font.h" +#include "desktop/font.h" #include "amiga/gui.h" #include "utils/nsoption.h" #include "amiga/print.h" diff --git a/atari/encoding.h b/atari/encoding.h index d0289b613..784aa8273 100644 --- a/atari/encoding.h +++ b/atari/encoding.h @@ -23,8 +23,6 @@ #include #include -#include "css/css.h" -#include "render/font.h" #include "utils/utf8.h" struct gui_utf8_table *atari_utf8_table; diff --git a/atari/font.c b/atari/font.c index c55aca05a..24a18edef 100755 --- a/atari/font.c +++ b/atari/font.c @@ -39,7 +39,7 @@ #include #include "css/css.h" -#include "render/font.h" +#include "desktop/font.h" #include "utils/utf8.h" #include "utils/log.h" #include "utils/nsoption.h" diff --git a/atari/gui.c b/atari/gui.c index f70c740d5..29991515e 100644 --- a/atari/gui.c +++ b/atari/gui.c @@ -50,7 +50,7 @@ #include "desktop/browser.h" #include "desktop/browser_private.h" #include "desktop/mouse.h" -#include "render/font.h" +#include "desktop/font.h" #include "atari/gemtk/gemtk.h" #include "atari/gui.h" diff --git a/beos/font.cpp b/beos/font.cpp index b262562d3..c52e9671c 100644 --- a/beos/font.cpp +++ b/beos/font.cpp @@ -32,7 +32,7 @@ #include extern "C" { #include "css/css.h" -#include "render/font.h" +#include "desktop/font.h" #include "utils/utils.h" #include "utils/log.h" #include "utils/nsoption.h" diff --git a/beos/plotters.cpp b/beos/plotters.cpp index 52ab4ec21..81d0e10e7 100644 --- a/beos/plotters.cpp +++ b/beos/plotters.cpp @@ -32,7 +32,7 @@ #include extern "C" { #include "desktop/plotters.h" -#include "render/font.h" +#include "desktop/font.h" #include "utils/log.h" #include "utils/utils.h" #include "utils/nsoption.h" diff --git a/beos/scaffolding.cpp b/beos/scaffolding.cpp index 7a00c02a9..b701b98f0 100644 --- a/beos/scaffolding.cpp +++ b/beos/scaffolding.cpp @@ -59,7 +59,7 @@ extern "C" { #include "desktop/plotters.h" #include "utils/nsoption.h" #include "desktop/textinput.h" -#include "render/font.h" +#include "desktop/font.h" #include "render/form.h" #include "utils/messages.h" #include "utils/utils.h" diff --git a/beos/thumbnail.cpp b/beos/thumbnail.cpp index 128462f57..12a7320ce 100644 --- a/beos/thumbnail.cpp +++ b/beos/thumbnail.cpp @@ -36,7 +36,7 @@ extern "C" { #include "desktop/browser.h" #include "desktop/thumbnail.h" #include "image/bitmap.h" -#include "render/font.h" +#include "desktop/font.h" #include "utils/log.h" } #include "beos/scaffolding.h" diff --git a/beos/window.cpp b/beos/window.cpp index 3fa88ad33..886e20622 100644 --- a/beos/window.cpp +++ b/beos/window.cpp @@ -29,7 +29,7 @@ extern "C" { #include "utils/nsoption.h" #include "desktop/netsurf.h" #include "desktop/textinput.h" -#include "render/font.h" +#include "desktop/font.h" #include "utils/log.h" #include "utils/types.h" #include "utils/utf8.h" diff --git a/cocoa/font.m b/cocoa/font.m index 08fad0a36..3e28dea47 100644 --- a/cocoa/font.m +++ b/cocoa/font.m @@ -23,7 +23,7 @@ #import "css/css.h" #import "utils/nsoption.h" -#import "render/font.h" +#import "desktop/font.h" #import "desktop/plotters.h" @@ -234,4 +234,4 @@ static inline NSDictionary *cocoa_font_attributes( const plot_font_style_t *styl cocoa_font_get_nsfont( style ), NSFontAttributeName, cocoa_convert_colour( style->foreground ), NSForegroundColorAttributeName, nil]; -} \ No newline at end of file +} diff --git a/desktop/browser_history.c b/desktop/browser_history.c index 8c21eed8e..1e8140626 100644 --- a/desktop/browser_history.c +++ b/desktop/browser_history.c @@ -18,7 +18,7 @@ */ /** \file - * Browser history tree (implementation). + * Browser history tree implementation. */ #include @@ -27,20 +27,20 @@ #include #include +#include "utils/log.h" +#include "utils/nsurl.h" +#include "utils/utils.h" #include "content/content.h" #include "content/hlcache.h" #include "content/urldb.h" #include "css/css.h" +#include "image/bitmap.h" + #include "desktop/browser_history.h" #include "desktop/browser_private.h" #include "desktop/plotters.h" #include "desktop/thumbnail.h" -#include "image/bitmap.h" -#include "render/font.h" -#include "utils/log.h" -#include "utils/nsurl.h" -#include "utils/utils.h" - +#include "desktop/font.h" #define WIDTH 100 #define HEIGHT 86 diff --git a/desktop/font.h b/desktop/font.h new file mode 100644 index 000000000..4ebd75d73 --- /dev/null +++ b/desktop/font.h @@ -0,0 +1,97 @@ +/* + * Copyright 2003 Phil Mellor + * Copyright 2005 James Bursa + * Copyright 2004 John Tytgat + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** \file + * Font handling interface. + * + * These functions provide font related services. They all work on + * UTF-8 strings with lengths given. + * + * Note that an interface to painting is not defined here. Painting is + * redirected through platform-dependent plotters anyway, so there is + * no gain in abstracting it here. + */ + +#ifndef _NETSURF_DESKTOP_FONT_H_ +#define _NETSURF_DESKTOP_FONT_H_ + +#include +#include + +#include "desktop/plot_style.h" + +struct font_functions +{ + /** + * Measure the width of a string. + * + * \param fstyle plot style for this text + * \param string UTF-8 string to measure + * \param length length of string, in bytes + * \param width updated to width of string[0..length) + * \return true on success, false on error and error reported + */ + bool (*font_width)(const plot_font_style_t *fstyle, + const char *string, size_t length, + int *width); + /** + * Find the position in a string where an x coordinate falls. + * + * \param fstyle style for this text + * \param string UTF-8 string to measure + * \param length length of string, in bytes + * \param x x coordinate to search for + * \param char_offset updated to offset in string of actual_x, [0..length] + * \param actual_x updated to x coordinate of character closest to x + * \return true on success, false on error and error reported + */ + bool (*font_position_in_string)(const plot_font_style_t *fstyle, + const char *string, size_t length, + int x, size_t *char_offset, int *actual_x); + /** + * Find where to split a string to make it fit a width. + * + * \param fstyle style for this text + * \param string UTF-8 string to measure + * \param length length of string, in bytes + * \param x width available + * \param char_offset updated to offset in string of actual_x, [1..length] + * \param actual_x updated to x coordinate of character closest to x + * \return true on success, false on error and error reported + * + * On exit, char_offset indicates first character after split point. + * + * Note: char_offset of 0 should never be returned. + * + * Returns: + * char_offset giving split point closest to x, where actual_x <= x + * else + * char_offset giving split point closest to x, where actual_x > x + * + * Returning char_offset == length means no split possible + */ + bool (*font_split)(const plot_font_style_t *fstyle, + const char *string, size_t length, + int x, size_t *char_offset, int *actual_x); +}; + +extern const struct font_functions nsfont; + +#endif diff --git a/desktop/save_pdf/font_haru.c b/desktop/save_pdf/font_haru.c index 57d36fe95..e8643f701 100644 --- a/desktop/save_pdf/font_haru.c +++ b/desktop/save_pdf/font_haru.c @@ -41,7 +41,7 @@ #include "utils/nsoption.h" #include "desktop/save_pdf/font_haru.h" -#include "render/font.h" +#include "desktop/font.h" #include "utils/log.h" diff --git a/desktop/save_pdf/font_haru.h b/desktop/save_pdf/font_haru.h index 0dd6dc0c4..c6578b09f 100644 --- a/desktop/save_pdf/font_haru.h +++ b/desktop/save_pdf/font_haru.h @@ -26,8 +26,8 @@ #include -#include "render/font.h" #include "desktop/plot_style.h" +#include "desktop/font.h" bool haru_nsfont_apply_style(const plot_font_style_t *fstyle, HPDF_Doc doc, HPDF_Page page, diff --git a/desktop/selection.c b/desktop/selection.c index 34292fdce..ec01e5b81 100644 --- a/desktop/selection.c +++ b/desktop/selection.c @@ -28,21 +28,21 @@ #include #include +#include "utils/log.h" +#include "utils/utf8.h" +#include "utils/utils.h" +#include "render/box.h" +#include "render/form.h" +#include "render/html_internal.h" +#include "render/font.h" +#include "render/textplain.h" + #include "desktop/browser_private.h" #include "desktop/gui_factory.h" #include "desktop/mouse.h" #include "desktop/plotters.h" #include "desktop/save_text.h" #include "desktop/selection.h" -#include "render/box.h" -#include "render/font.h" -#include "render/form.h" -#include "render/html_internal.h" -#include "render/textplain.h" -#include "utils/log.h" -#include "utils/utf8.h" -#include "utils/utils.h" - /** * Text selection works by labelling each node in the box tree with its diff --git a/desktop/textarea.c b/desktop/textarea.c index d29e5f247..8b84f3279 100644 --- a/desktop/textarea.c +++ b/desktop/textarea.c @@ -23,18 +23,19 @@ #include #include + #include "css/utils.h" +#include "utils/log.h" +#include "utils/utf8.h" +#include "utils/utils.h" #include "desktop/mouse.h" #include "desktop/textarea.h" #include "desktop/textinput.h" #include "desktop/plotters.h" #include "desktop/scrollbar.h" +#include "desktop/font.h" #include "desktop/gui_factory.h" -#include "render/font.h" -#include "utils/log.h" -#include "utils/utf8.h" -#include "utils/utils.h" #define CARET_COLOR 0x0000FF #define TA_ALLOC_STEP 512 diff --git a/desktop/textinput.c b/desktop/textinput.c index fd6ae9ff1..cf0697a2e 100644 --- a/desktop/textinput.c +++ b/desktop/textinput.c @@ -21,7 +21,7 @@ */ /** \file - * Textual input handling (implementation) + * Textual input handling implementation */ #include @@ -29,21 +29,21 @@ #include #include +#include "utils/log.h" +#include "utils/talloc.h" +#include "utils/utf8.h" +#include "utils/utils.h" +#include "render/box.h" +#include "render/form.h" +#include "render/html_internal.h" +#include "render/layout.h" + #include "desktop/browser_private.h" #include "desktop/gui_factory.h" #include "desktop/mouse.h" #include "desktop/scrollbar.h" #include "desktop/selection.h" #include "desktop/textinput.h" -#include "render/box.h" -#include "render/font.h" -#include "render/form.h" -#include "render/html_internal.h" -#include "render/layout.h" -#include "utils/log.h" -#include "utils/talloc.h" -#include "utils/utf8.h" -#include "utils/utils.h" /* Define to enable textinput debug */ #undef TEXTINPUT_DEBUG diff --git a/desktop/tree.c b/desktop/tree.c index c29afa761..975f74409 100644 --- a/desktop/tree.c +++ b/desktop/tree.c @@ -26,16 +26,17 @@ #include #include #include + +#include "utils/log.h" +#include "utils/messages.h" +#include "utils/utils.h" #include "content/content.h" #include "content/hlcache.h" #include "css/utils.h" +#include "utils/nsoption.h" + #include "desktop/browser.h" #include "desktop/tree.h" -#include "utils/nsoption.h" -#include "render/font.h" -#include "utils/log.h" -#include "utils/messages.h" -#include "utils/utils.h" struct tree { unsigned int flags; /* Tree flags */ diff --git a/desktop/treeview.c b/desktop/treeview.c index 484d279cf..4e597e0b5 100644 --- a/desktop/treeview.c +++ b/desktop/treeview.c @@ -16,14 +16,15 @@ * along with this program. If not, see . */ -/** \file - * Treeview handling (implementation). +/** + * \file + * + * Treeview handling implementation. */ #include "utils/log.h" #include "css/utils.h" #include "image/bitmap.h" -#include "render/font.h" #include "content/hlcache.h" #include "desktop/system_colour.h" @@ -31,8 +32,9 @@ #include "desktop/plotters.h" #include "desktop/textarea.h" #include "desktop/treeview.h" +#include "desktop/font.h" -/* TODO: get rid of REDRAW_MAX -- need to be able to know window size */ +/** @todo get rid of REDRAW_MAX -- need to be able to know window size */ #define REDRAW_MAX 8000 struct treeview_globals { diff --git a/framebuffer/fbtk/text.c b/framebuffer/fbtk/text.c index b05271b44..f15586a92 100644 --- a/framebuffer/fbtk/text.c +++ b/framebuffer/fbtk/text.c @@ -29,7 +29,7 @@ #include "utils/log.h" #include "desktop/browser.h" -#include "render/font.h" +#include "desktop/font.h" #include "framebuffer/gui.h" #include "framebuffer/fbtk.h" diff --git a/framebuffer/font_freetype.c b/framebuffer/font_freetype.c index eaaf2f099..3469a95ec 100644 --- a/framebuffer/font_freetype.c +++ b/framebuffer/font_freetype.c @@ -27,8 +27,8 @@ #include "utils/utf8.h" #include "utils/log.h" #include "utils/nsoption.h" -#include "render/font.h" #include "desktop/gui.h" +#include "desktop/font.h" #include "desktop/browser.h" #include "framebuffer/gui.h" diff --git a/framebuffer/font_internal.c b/framebuffer/font_internal.c index 9b850d5c8..4ac850448 100644 --- a/framebuffer/font_internal.c +++ b/framebuffer/font_internal.c @@ -20,12 +20,12 @@ #include #include #include +#include #include "utils/nsoption.h" #include "utils/utf8.h" #include "desktop/gui.h" -#include "css/css.h" -#include "render/font.h" +#include "desktop/font.h" #include "framebuffer/gui.h" #include "framebuffer/font.h" diff --git a/gtk/font_pango.c b/gtk/font_pango.c index 1cb536e9e..c49b32b25 100644 --- a/gtk/font_pango.c +++ b/gtk/font_pango.c @@ -27,12 +27,13 @@ #include #include -#include "gtk/font_pango.h" -#include "gtk/plotters.h" -#include "render/font.h" #include "utils/utils.h" #include "utils/log.h" #include "utils/nsoption.h" +#include "desktop/font.h" + +#include "gtk/font_pango.h" +#include "gtk/plotters.h" static bool nsfont_width(const plot_font_style_t *fstyle, const char *string, size_t length, diff --git a/gtk/plotters.c b/gtk/plotters.c index b2a7edecc..de0bf9d48 100644 --- a/gtk/plotters.c +++ b/gtk/plotters.c @@ -33,7 +33,6 @@ #include "utils/log.h" #include "desktop/plotters.h" -#include "render/font.h" #include "utils/nsoption.h" #include "gtk/font_pango.h" diff --git a/gtk/print.c b/gtk/print.c index 68a96dc2d..e5870267a 100644 --- a/gtk/print.c +++ b/gtk/print.c @@ -31,19 +31,20 @@ #include #include +#include "utils/log.h" +#include "utils/utils.h" #include "content/content.h" #include "content/hlcache.h" #include "utils/nsoption.h" #include "desktop/plotters.h" #include "desktop/print.h" #include "desktop/printer.h" +#include "desktop/font.h" + #include "gtk/font_pango.h" #include "gtk/bitmap.h" #include "gtk/print.h" #include "gtk/scaffolding.h" -#include "render/font.h" -#include "utils/log.h" -#include "utils/utils.h" /* Globals */ cairo_t *gtk_print_current_cr; diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c index 4706c6f60..4be27c7db 100644 --- a/gtk/scaffolding.c +++ b/gtk/scaffolding.c @@ -44,7 +44,7 @@ #include "desktop/save_text.h" #include "desktop/searchweb.h" #include "desktop/textinput.h" -#include "render/font.h" +#include "desktop/font.h" #include "render/html.h" #include "content/hlcache.h" diff --git a/gtk/thumbnail.c b/gtk/thumbnail.c index 19c5fc193..4bdab7485 100644 --- a/gtk/thumbnail.c +++ b/gtk/thumbnail.c @@ -28,19 +28,19 @@ #include #include +#include "utils/log.h" +#include "utils/utils.h" #include "content/content.h" #include "content/hlcache.h" #include "content/urldb.h" #include "desktop/plotters.h" #include "desktop/browser.h" #include "desktop/thumbnail.h" +#include "image/bitmap.h" + #include "gtk/scaffolding.h" #include "gtk/plotters.h" #include "gtk/bitmap.h" -#include "image/bitmap.h" -#include "render/font.h" -#include "utils/log.h" -#include "utils/utils.h" /** * Create a thumbnail of a page. diff --git a/monkey/font.c b/monkey/font.c index c4f4bffe1..3b6ca4fdc 100644 --- a/monkey/font.c +++ b/monkey/font.c @@ -16,10 +16,9 @@ * along with this program. If not, see . */ -#include "render/font.h" #include "utils/nsoption.h" #include "utils/utf8.h" - +#include "desktop/font.h" static bool nsfont_width(const plot_font_style_t *fstyle, const char *string, size_t length, diff --git a/render/box_textarea.c b/render/box_textarea.c index a1bbb539e..1a431ed88 100644 --- a/render/box_textarea.c +++ b/render/box_textarea.c @@ -25,10 +25,11 @@ #include "desktop/browser.h" #include "desktop/textarea.h" #include "desktop/textinput.h" +#include "utils/log.h" + #include "render/box_textarea.h" #include "render/font.h" #include "render/form.h" -#include "utils/log.h" bool box_textarea_keypress(html_content *html, struct box *box, uint32_t key) diff --git a/render/font.c b/render/font.c index 03c5a36fb..0b059a218 100644 --- a/render/font.c +++ b/render/font.c @@ -16,54 +16,17 @@ * along with this program. If not, see . */ -#include "css/css.h" -#include "css/utils.h" -#include "utils/nsoption.h" -#include "render/font.h" - -static plot_font_generic_family_t plot_font_generic_family( - enum css_font_family_e css); -static int plot_font_weight(enum css_font_weight_e css); -static plot_font_flags_t plot_font_flags(enum css_font_style_e style, - enum css_font_variant_e variant); - /** - * Populate a font style using data from a computed CSS style + * \file * - * \param css Computed style to consider - * \param fstyle Font style to populate + * Renderer internal font handling implementation. */ -void font_plot_style_from_css(const css_computed_style *css, - plot_font_style_t *fstyle) -{ - lwc_string **families; - css_fixed length = 0; - css_unit unit = CSS_UNIT_PX; - css_color col; - fstyle->family = plot_font_generic_family( - css_computed_font_family(css, &families)); - - css_computed_font_size(css, &length, &unit); - fstyle->size = FIXTOINT(FMUL(nscss_len2pt(length, unit), - INTTOFIX(FONT_SIZE_SCALE))); - - /* Clamp font size to configured minimum */ - if (fstyle->size < (nsoption_int(font_min_size) * FONT_SIZE_SCALE) / 10) - fstyle->size = (nsoption_int(font_min_size) * FONT_SIZE_SCALE) / 10; - - fstyle->weight = plot_font_weight(css_computed_font_weight(css)); - fstyle->flags = plot_font_flags(css_computed_font_style(css), - css_computed_font_variant(css)); - - css_computed_color(css, &col); - fstyle->foreground = nscss_color_to_ns(col); - fstyle->background = 0; -} +#include "css/css.h" +#include "css/utils.h" +#include "utils/nsoption.h" -/****************************************************************************** - * Helper functions * - ******************************************************************************/ +#include "render/font.h" /** * Map a generic CSS font family to a generic plot font family @@ -71,7 +34,7 @@ void font_plot_style_from_css(const css_computed_style *css, * \param css Generic CSS font family * \return Plot font family */ -plot_font_generic_family_t plot_font_generic_family( +static plot_font_generic_family_t plot_font_generic_family( enum css_font_family_e css) { plot_font_generic_family_t plot; @@ -104,7 +67,7 @@ plot_font_generic_family_t plot_font_generic_family( * \param css CSS font weight * \return Plot weight */ -int plot_font_weight(enum css_font_weight_e css) +static int plot_font_weight(enum css_font_weight_e css) { int weight; @@ -146,12 +109,12 @@ int plot_font_weight(enum css_font_weight_e css) /** * Map a CSS font style and font variant to plot font flags - * + * * \param style CSS font style * \param variant CSS font variant * \return Computed plot flags */ -plot_font_flags_t plot_font_flags(enum css_font_style_e style, +static plot_font_flags_t plot_font_flags(enum css_font_style_e style, enum css_font_variant_e variant) { plot_font_flags_t flags = FONTF_NONE; @@ -167,3 +130,32 @@ plot_font_flags_t plot_font_flags(enum css_font_style_e style, return flags; } + +/* exported function documented in render/font_internal.h */ +void font_plot_style_from_css(const css_computed_style *css, + plot_font_style_t *fstyle) +{ + lwc_string **families; + css_fixed length = 0; + css_unit unit = CSS_UNIT_PX; + css_color col; + + fstyle->family = plot_font_generic_family( + css_computed_font_family(css, &families)); + + css_computed_font_size(css, &length, &unit); + fstyle->size = FIXTOINT(FMUL(nscss_len2pt(length, unit), + INTTOFIX(FONT_SIZE_SCALE))); + + /* Clamp font size to configured minimum */ + if (fstyle->size < (nsoption_int(font_min_size) * FONT_SIZE_SCALE) / 10) + fstyle->size = (nsoption_int(font_min_size) * FONT_SIZE_SCALE) / 10; + + fstyle->weight = plot_font_weight(css_computed_font_weight(css)); + fstyle->flags = plot_font_flags(css_computed_font_style(css), + css_computed_font_variant(css)); + + css_computed_color(css, &col); + fstyle->foreground = nscss_color_to_ns(col); + fstyle->background = 0; +} diff --git a/render/font.h b/render/font.h index bc8df2335..e4353df64 100644 --- a/render/font.h +++ b/render/font.h @@ -1,7 +1,5 @@ /* - * Copyright 2003 Phil Mellor - * Copyright 2005 James Bursa - * Copyright 2004 John Tytgat + * Copyright 2014 Vincent Sanders * * This file is part of NetSurf, http://www.netsurf-browser.org/ * @@ -19,83 +17,23 @@ */ /** \file - * Font handling (interface). * - * These functions provide font related services. They all work on UTF-8 strings - * with lengths given. + * Internal font handling interfaces. * - * Note that an interface to painting is not defined here. Painting is - * redirected through platform-dependent plotters anyway, so there is no gain in - * abstracting it here. + * These functions provide font related services. They all work on + * UTF-8 strings with lengths given. */ #ifndef _NETSURF_RENDER_FONT_H_ #define _NETSURF_RENDER_FONT_H_ -#include -#include - -#include "css/css.h" -#include "desktop/plot_style.h" - -struct font_functions -{ - /** - * Measure the width of a string. - * - * \param fstyle plot style for this text - * \param string UTF-8 string to measure - * \param length length of string, in bytes - * \param width updated to width of string[0..length) - * \return true on success, false on error and error reported - */ - bool (*font_width)(const plot_font_style_t *fstyle, - const char *string, size_t length, - int *width); - /** - * Find the position in a string where an x coordinate falls. - * - * \param fstyle style for this text - * \param string UTF-8 string to measure - * \param length length of string, in bytes - * \param x x coordinate to search for - * \param char_offset updated to offset in string of actual_x, [0..length] - * \param actual_x updated to x coordinate of character closest to x - * \return true on success, false on error and error reported - */ - bool (*font_position_in_string)(const plot_font_style_t *fstyle, - const char *string, size_t length, - int x, size_t *char_offset, int *actual_x); - /** - * Find where to split a string to make it fit a width. - * - * \param fstyle style for this text - * \param string UTF-8 string to measure - * \param length length of string, in bytes - * \param x width available - * \param char_offset updated to offset in string of actual_x, [1..length] - * \param actual_x updated to x coordinate of character closest to x - * \return true on success, false on error and error reported - * - * On exit, char_offset indicates first character after split point. - * - * Note: char_offset of 0 should never be returned. - * - * Returns: - * char_offset giving split point closest to x, where actual_x <= x - * else - * char_offset giving split point closest to x, where actual_x > x - * - * Returning char_offset == length means no split possible - */ - bool (*font_split)(const plot_font_style_t *fstyle, - const char *string, size_t length, - int x, size_t *char_offset, int *actual_x); -}; - -extern const struct font_functions nsfont; - -void font_plot_style_from_css(const css_computed_style *css, - plot_font_style_t *fstyle); +/** + * Populate a font style using data from a computed CSS style + * + * \param css Computed style to consider + * \param fstyle Font style to populate + */ +void font_plot_style_from_css(const css_computed_style *css, + plot_font_style_t *fstyle); #endif diff --git a/render/form.c b/render/form.c index 76a67ba5c..3dd3a6cdd 100644 --- a/render/form.c +++ b/render/form.c @@ -33,6 +33,13 @@ #include #include +#include "utils/corestrings.h" +#include "utils/log.h" +#include "utils/messages.h" +#include "utils/talloc.h" +#include "utils/url.h" +#include "utils/utf8.h" +#include "utils/utils.h" #include "content/fetch.h" #include "content/hlcache.h" #include "css/css.h" @@ -43,19 +50,13 @@ #include "desktop/plotters.h" #include "desktop/scrollbar.h" #include "desktop/textarea.h" + #include "render/box.h" #include "render/font.h" #include "render/form.h" #include "render/html.h" #include "render/html_internal.h" #include "render/layout.h" -#include "utils/corestrings.h" -#include "utils/log.h" -#include "utils/messages.h" -#include "utils/talloc.h" -#include "utils/url.h" -#include "utils/utf8.h" -#include "utils/utils.h" #define MAX_SELECT_HEIGHT 210 #define SELECT_LINE_SPACING 0.2 diff --git a/render/html.c b/render/html.c index 36f6e807d..7ab8fb5bd 100644 --- a/render/html.c +++ b/render/html.c @@ -47,9 +47,9 @@ #include "image/bitmap.h" #include "javascript/js.h" #include "desktop/gui_factory.h" +#include "desktop/font.h" #include "render/box.h" -#include "render/font.h" #include "render/form.h" #include "render/html_internal.h" #include "render/imagemap.h" diff --git a/render/html_interaction.c b/render/html_interaction.c index 279eb4058..0d05485f2 100644 --- a/render/html_interaction.c +++ b/render/html_interaction.c @@ -28,6 +28,10 @@ #include +#include "utils/corestrings.h" +#include "utils/messages.h" +#include "utils/utils.h" +#include "utils/log.h" #include "content/content.h" #include "content/hlcache.h" #include "desktop/browser.h" @@ -39,6 +43,9 @@ #include "desktop/selection.h" #include "desktop/textarea.h" #include "desktop/textinput.h" +#include "desktop/font.h" +#include "javascript/js.h" + #include "render/box.h" #include "render/box_textarea.h" #include "render/font.h" @@ -46,12 +53,6 @@ #include "render/html_internal.h" #include "render/imagemap.h" #include "render/search.h" -#include "javascript/js.h" -#include "utils/corestrings.h" -#include "utils/messages.h" -#include "utils/utils.h" -#include "utils/log.h" - /** * Get pointer shape for given box diff --git a/render/html_redraw.c b/render/html_redraw.c index 92b70fec7..12ed1d3d4 100644 --- a/render/html_redraw.c +++ b/render/html_redraw.c @@ -22,8 +22,10 @@ * along with this program. If not, see . */ -/** \file - * Redraw of a CONTENT_HTML (implementation). +/** + * \file + * + * Redrawing CONTENT_HTML implementation. */ #include @@ -32,7 +34,11 @@ #include #include #include + #include "utils/config.h" +#include "utils/log.h" +#include "utils/messages.h" +#include "utils/utils.h" #include "content/content_protected.h" #include "css/css.h" #include "css/utils.h" @@ -42,18 +48,15 @@ #include "desktop/print.h" #include "desktop/scrollbar.h" #include "desktop/textarea.h" +#include "desktop/font.h" #include "image/bitmap.h" + #include "render/box.h" #include "render/font.h" #include "render/form.h" #include "render/html_internal.h" #include "render/layout.h" #include "render/search.h" -#include "utils/log.h" -#include "utils/messages.h" -#include "utils/utils.h" - - bool html_redraw_debug = false; diff --git a/render/layout.c b/render/layout.c index ab2dd6cc1..79961094f 100644 --- a/render/layout.c +++ b/render/layout.c @@ -41,21 +41,24 @@ #include #include #include + +#include "utils/log.h" +#include "utils/talloc.h" +#include "utils/utils.h" #include "css/css.h" #include "css/utils.h" #include "content/content_protected.h" #include "utils/nsoption.h" #include "desktop/scrollbar.h" #include "desktop/textarea.h" +#include "desktop/font.h" + #include "render/box.h" #include "render/font.h" #include "render/form.h" #include "render/html_internal.h" #include "render/layout.h" #include "render/table.h" -#include "utils/log.h" -#include "utils/talloc.h" -#include "utils/utils.h" /* Define to enable layout debugging */ diff --git a/render/textplain.c b/render/textplain.c index 86c87330d..9d87fbf1e 100644 --- a/render/textplain.c +++ b/render/textplain.c @@ -31,6 +31,12 @@ #include #include +#include "utils/corestrings.h" +#include "utils/http.h" +#include "utils/log.h" +#include "utils/messages.h" +#include "utils/utils.h" +#include "utils/utf8.h" #include "content/content_protected.h" #include "content/hlcache.h" #include "css/css.h" @@ -41,17 +47,12 @@ #include "desktop/search.h" #include "desktop/selection.h" #include "desktop/textinput.h" -#include "render/font.h" +#include "desktop/font.h" + #include "render/search.h" #include "render/textplain.h" #include "render/html.h" #include "render/search.h" -#include "utils/corestrings.h" -#include "utils/http.h" -#include "utils/log.h" -#include "utils/messages.h" -#include "utils/utils.h" -#include "utils/utf8.h" struct textplain_line { size_t start; diff --git a/riscos/dialog.c b/riscos/dialog.c index fd854b857..0244860cc 100644 --- a/riscos/dialog.c +++ b/riscos/dialog.c @@ -42,7 +42,6 @@ #include "utils/utils.h" #include "desktop/netsurf.h" #include "desktop/browser.h" -#include "render/font.h" #include "riscos/configure.h" #include "riscos/cookies.h" diff --git a/riscos/font.c b/riscos/font.c index 7e6c80fe5..db6376a88 100644 --- a/riscos/font.c +++ b/riscos/font.c @@ -29,13 +29,11 @@ #include #include -#include "css/css.h" -#include "css/utils.h" -#include "render/font.h" #include "utils/nsoption.h" #include "utils/log.h" #include "utils/messages.h" #include "utils/utils.h" +#include "desktop/font.h" #include "riscos/gui.h" #include "riscos/font.h" diff --git a/riscos/plotters.c b/riscos/plotters.c index 6e49c2278..e3745c5ba 100644 --- a/riscos/plotters.c +++ b/riscos/plotters.c @@ -28,7 +28,6 @@ #include "utils/log.h" #include "desktop/plotters.h" -#include "render/font.h" #include "riscos/bitmap.h" #include "riscos/image.h" @@ -36,7 +35,6 @@ #include "riscos/font.h" #include "riscos/oslib_pre7.h" - static bool ro_plot_rectangle(int x0, int y0, int x1, int y1, const plot_style_t *style); static bool ro_plot_line(int x0, int y0, int x1, int y1, const plot_style_t *style); static bool ro_plot_draw_path(const draw_path * const path, int width, diff --git a/riscos/thumbnail.c b/riscos/thumbnail.c index 2bdd37251..e259686f8 100644 --- a/riscos/thumbnail.c +++ b/riscos/thumbnail.c @@ -31,21 +31,21 @@ #include "oslib/colourtrans.h" #include "oslib/osfile.h" #include "oslib/osspriteop.h" + +#include "utils/nsoption.h" +#include "utils/log.h" #include "content/content.h" #include "content/hlcache.h" #include "content/urldb.h" #include "desktop/plotters.h" #include "desktop/thumbnail.h" #include "image/bitmap.h" -#include "render/font.h" + #include "riscos/bitmap.h" #include "riscos/gui.h" -#include "utils/nsoption.h" #include "riscos/oslib_pre7.h" #include "riscos/thumbnail.h" #include "riscos/tinct.h" -#include "utils/log.h" - /* Whether we can use 32bpp sprites */ diff --git a/windows/font.c b/windows/font.c index 09adeeda7..6e1efdc6a 100644 --- a/windows/font.c +++ b/windows/font.c @@ -27,7 +27,7 @@ #include #include "css/css.h" -#include "render/font.h" +#include "desktop/font.h" #include "utils/nsoption.h" #include "utils/utf8.h" -- cgit v1.2.3