diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2015-02-03 19:48:28 +0000 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2015-02-03 19:48:28 +0000 |
commit | f123ed101f6651b15175a9cf33038bf54975dd8b (patch) | |
tree | d8dc5cea88a816ec44c40a810f81ebdbbf168b71 | |
parent | ee75f5b3addaa6e2989a2dabbd2d49fed71d19c8 (diff) | |
download | netsurf-f123ed101f6651b15175a9cf33038bf54975dd8b.tar.gz netsurf-f123ed101f6651b15175a9cf33038bf54975dd8b.tar.bz2 |
Lazy bitmap font rendered text for slow hardware (non-working)
-rw-r--r-- | amiga/Makefile.target | 3 | ||||
-rw-r--r-- | amiga/font.c | 72 | ||||
-rwxr-xr-x | amiga/font.h | 14 | ||||
-rw-r--r-- | amiga/options.h | 1 |
4 files changed, 68 insertions, 22 deletions
diff --git a/amiga/Makefile.target b/amiga/Makefile.target index 7d858ef8a..902770722 100644 --- a/amiga/Makefile.target +++ b/amiga/Makefile.target @@ -74,7 +74,8 @@ S_AMIGA := gui.c tree.c history.c hotlist.c schedule.c file.c \ sslcert.c gui_options.c print.c theme.c drag.c icon.c libs.c \ datatypes.c dt_picture.c dt_anim.c dt_sound.c plugin_hack.c \ stringview/stringview.c stringview/urlhistory.c rtg.c \ - agclass/amigaguide_class.c fs_backing_store.c os3support.c + agclass/amigaguide_class.c fs_backing_store.c os3support.c \ + font_bitmap.c S_AMIGA := $(addprefix amiga/,$(S_AMIGA)) # This is the final source build list diff --git a/amiga/font.c b/amiga/font.c index 435e75992..80e34bd10 100644 --- a/amiga/font.c +++ b/amiga/font.c @@ -160,26 +160,8 @@ struct OutlineFont *ami_open_outline_font(const plot_font_style_t *fstyle, const uint16 *codepoint); static void ami_font_cleanup(struct MinList *ami_font_list); -static bool nsfont_width(const plot_font_style_t *fstyle, - const char *string, size_t length, - int *width); - -static bool nsfont_position_in_string(const plot_font_style_t *fstyle, - const char *string, size_t length, - int x, size_t *char_offset, int *actual_x); - -static bool nsfont_split(const plot_font_style_t *fstyle, - const char *string, size_t length, - int x, size_t *char_offset, int *actual_x); -const struct font_functions nsfont = { - nsfont_width, - nsfont_position_in_string, - nsfont_split -}; - - -bool nsfont_width(const plot_font_style_t *fstyle, +static bool amiga_nsfont_width(const plot_font_style_t *fstyle, const char *string, size_t length, int *width) { @@ -202,7 +184,7 @@ bool nsfont_width(const plot_font_style_t *fstyle, * \return true on success, false on error and error reported */ -bool nsfont_position_in_string(const plot_font_style_t *fstyle, +static bool amiga_nsfont_position_in_string(const plot_font_style_t *fstyle, const char *string, size_t length, int x, size_t *char_offset, int *actual_x) { @@ -289,7 +271,7 @@ bool nsfont_position_in_string(const plot_font_style_t *fstyle, * Returning char_offset == length means no split possible */ -bool nsfont_split(const plot_font_style_t *fstyle, +static bool amiga_nsfont_split(const plot_font_style_t *fstyle, const char *string, size_t length, int x, size_t *char_offset, int *actual_x) { @@ -752,6 +734,10 @@ ULONG ami_unicode_text(struct RastPort *rp, const char *string, ULONG length, if(!string || string[0]=='\0') return 0; if(!length) return 0; + if(nsoption_bool(use_diskfont) == true) { + return ami_font_bm_text(rp, string, length, fstyle, dx, dy); + } + if(utf8_to_enc(string,"UTF-16",length,(char **)&utf16) != NSERROR_OK) return 0; outf16 = utf16; if(!(ofont = ami_open_outline_font(fstyle, 0))) return 0; @@ -949,3 +935,47 @@ void ami_font_close_disk_font(struct TextFont *tfont) { CloseFont(tfont); } + + +/* Stub entry points */ +static bool nsfont_width(const plot_font_style_t *fstyle, + const char *string, size_t length, + int *width) +{ + if(nsoption_bool(use_diskfont) == false) { + return amiga_nsfont_width(fstyle, string, length, width); + } else { + return amiga_bm_nsfont_width(fstyle, string, length, width); + } +} + +static bool nsfont_position_in_string(const plot_font_style_t *fstyle, + const char *string, size_t length, + int x, size_t *char_offset, int *actual_x) +{ + if(nsoption_bool(use_diskfont) == false) { + return amiga_nsfont_position_in_string(fstyle, string, length, x, + char_offset, actual_x); + } else { + return amiga_bm_nsfont_position_in_string(fstyle, string, length, x, + char_offset, actual_x); + } +} + +static bool nsfont_split(const plot_font_style_t *fstyle, + const char *string, size_t length, + int x, size_t *char_offset, int *actual_x) +{ + if(nsoption_bool(use_diskfont) == false) { + return amiga_nsfont_split(fstyle, string, length, x, char_offset, actual_x); + } else { + return amiga_bm_nsfont_split(fstyle, string, length, x, char_offset, actual_x); + } +} + +const struct font_functions nsfont = { + nsfont_width, + nsfont_position_in_string, + nsfont_split +}; + diff --git a/amiga/font.h b/amiga/font.h index 10137f777..6c600abe4 100755 --- a/amiga/font.h +++ b/amiga/font.h @@ -40,4 +40,18 @@ void ami_font_savescanner(void); /* Simple diskfont functions for graphics.library use (not page rendering) */ struct TextFont *ami_font_open_disk_font(struct TextAttr *tattr); void ami_font_close_disk_font(struct TextFont *tfont); + +/* In font_bitmap.c */ +bool amiga_bm_nsfont_width(const plot_font_style_t *fstyle, + const char *string, size_t length, int *width); +bool amiga_bm_nsfont_position_in_string(const plot_font_style_t *fstyle, + const char *string, size_t length, + int x, size_t *char_offset, int *actual_x); +bool amiga_bm_nsfont_split(const plot_font_style_t *fstyle, + const char *string, size_t length, + int x, size_t *char_offset, int *actual_x); +ULONG ami_font_bm_text(struct RastPort *rp, const char *string, ULONG length, + const plot_font_style_t *fstyle, ULONG dx, ULONG dy); + #endif + diff --git a/amiga/options.h b/amiga/options.h index 868e28fdb..b94242085 100644 --- a/amiga/options.h +++ b/amiga/options.h @@ -63,6 +63,7 @@ NSOPTION_STRING(font_unicode, NULL) NSOPTION_STRING(font_unicode_file, NULL) NSOPTION_BOOL(font_unicode_only, false) NSOPTION_BOOL(font_antialiasing, true) +NSOPTION_BOOL(use_diskfont, false) NSOPTION_BOOL(drag_save_icons, true) NSOPTION_INTEGER(hotlist_window_xpos, 0) NSOPTION_INTEGER(hotlist_window_ypos, 0) |