summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xamiga/dist/NetSurf.guide1
-rw-r--r--amiga/font.c409
-rw-r--r--amiga/options.h3
-rwxr-xr-xamiga/plotters.c41
4 files changed, 125 insertions, 329 deletions
diff --git a/amiga/dist/NetSurf.guide b/amiga/dist/NetSurf.guide
index c9b81fa94..8dc2086a6 100755
--- a/amiga/dist/NetSurf.guide
+++ b/amiga/dist/NetSurf.guide
@@ -44,7 +44,6 @@ The options file is stored in @{"Resources/Options" link Resources/Options/Main}
@{b}recent_file@{ub} Path to file to store recent history list
@{b}arexx_dir@{ub} Path to ARexx scripts dir
@{b}download_dir@{ub} default download destination
-@{b}quick_text@{ub} enable for local charset text only (not recommended)
@{b}faster_scroll@{ub} enable faster scrolling (experimental)
@{b}cache_bitmaps@{ub} cache bitmaps in native format in gfx mem (0=off, 1=sclaed, 2=all)
diff --git a/amiga/font.c b/amiga/font.c
index 2abe5847c..bbcc89118 100644
--- a/amiga/font.c
+++ b/amiga/font.c
@@ -66,16 +66,7 @@ bool nsfont_width(const struct css_style *style,
{
struct TextFont *tfont;
- if(option_quick_text)
- {
- tfont = ami_open_font(style);
- *width = TextLength(currp,string,length); //buffer,strlen(buffer));
- ami_close_font(tfont);
- }
- else
- {
- *width = ami_unicode_text(NULL,string,length,style,0,0,0);
- }
+ *width = ami_unicode_text(NULL,string,length,style,0,0,0);
return true;
}
@@ -99,76 +90,61 @@ bool nsfont_position_in_string(const struct css_style *style,
{
struct TextExtent extent;
struct TextFont *tfont;
+ uint16 *utf16 = NULL, *outf16 = NULL;
+ struct OutlineFont *ofont;
+ struct GlyphMap *glyph;
+ uint32 tx=0,i=0;
+ size_t len,utf8len;
+ uint8 *utf8;
+ uint32 co = 0;
- if(option_quick_text)
- {
- tfont = ami_open_font(style);
+ len = utf8_bounded_length(string, length);
+ if(utf8_to_enc(string,"UTF-16",length,&utf16) != UTF8_CONVERT_OK) return;
+ outf16 = utf16;
- *char_offset = TextFit(currp,string,length,
- &extent,NULL,1,x,32767);
+ if(!(ofont = ami_open_outline_font(style))) return 0;
- *actual_x = extent.te_Extent.MaxX;
+ *char_offset = length;
- ami_close_font(tfont);
- }
- else
+ for(i=0;i<len;i++)
{
- uint16 *utf16 = NULL, *outf16 = NULL;
- struct OutlineFont *ofont;
- struct GlyphMap *glyph;
- uint32 tx=0,i=0;
- size_t len,utf8len;
- uint8 *utf8;
- uint32 co = 0;
-
- len = utf8_bounded_length(string, length);
- if(utf8_to_enc(string,"UTF-16",length,&utf16) != UTF8_CONVERT_OK) return;
- outf16 = utf16;
-
- if(!(ofont = ami_open_outline_font(style))) return 0;
-
- *char_offset = length;
-
- for(i=0;i<len;i++)
+ if(ESetInfo(&ofont->olf_EEngine,
+ OT_GlyphCode,*utf16,
+ TAG_END) == OTERR_Success)
{
- if(ESetInfo(&ofont->olf_EEngine,
- OT_GlyphCode,*utf16,
- TAG_END) == OTERR_Success)
+ if(EObtainInfo(&ofont->olf_EEngine,
+ OT_GlyphMap8Bit,&glyph,
+ TAG_END) == 0)
{
- if(EObtainInfo(&ofont->olf_EEngine,
- OT_GlyphMap8Bit,&glyph,
- TAG_END) == 0)
+ if(utf8_from_enc(utf16,"UTF-16",4,&utf8) != UTF8_CONVERT_OK) return;
+ utf8len = utf8_char_byte_length(utf8);
+ free(utf8);
+
+ if(x<tx+glyph->glm_X1)
{
- if(utf8_from_enc(utf16,"UTF-16",4,&utf8) != UTF8_CONVERT_OK) return;
- utf8len = utf8_char_byte_length(utf8);
- free(utf8);
-
- if(x<tx+glyph->glm_X1)
- {
- i = len+1;
- }
- else
- {
- co += utf8len;
- }
+ i = len+1;
+ }
+ else
+ {
+ co += utf8len;
+ }
- *actual_x = tx;
- tx+= glyph->glm_X1;
+ *actual_x = tx;
+ tx+= glyph->glm_X1;
- EReleaseInfo(&ofont->olf_EEngine,
- OT_GlyphMap8Bit,glyph,
- TAG_END);
- }
+ EReleaseInfo(&ofont->olf_EEngine,
+ OT_GlyphMap8Bit,glyph,
+ TAG_END);
}
- if (*utf16 < 0xD800 || 0xDFFF < *utf16)
- utf16++;
- else
- utf16 += 2;
}
- *char_offset = co;
- if(co>=length) *actual_x = tx;
- free(outf16);
+ if (*utf16 < 0xD800 || 0xDFFF < *utf16)
+ utf16++;
+ else
+ utf16 += 2;
}
+ *char_offset = co;
+ if(co>=length) *actual_x = tx;
+ free(outf16);
return true;
}
@@ -199,189 +175,63 @@ bool nsfont_split(const struct css_style *style,
ULONG co;
char *charp;
struct TextFont *tfont;
+ uint16 *utf16 = NULL,*outf16 = NULL;
+ struct OutlineFont *ofont;
+ struct GlyphMap *glyph;
+ uint32 tx=0,i=0;
+ size_t len;
- if(option_quick_text)
- {
- tfont = ami_open_font(style);
-
- co = TextFit(currp,string,length,
- &extent,NULL,1,x,32767);
-
- charp = string+co;
- while(((*charp != ' ')) && (charp > string))
- {
- charp--;
- co--;
- }
+ len = utf8_bounded_length(string, length);
+ if(utf8_to_enc(string,"UTF-16",length,&utf16) != UTF8_CONVERT_OK) return;
+ outf16 = utf16;
+ if(!(ofont = ami_open_outline_font(style))) return 0;
- *char_offset = co;
- if(string && co)
- {
- *actual_x = TextLength(currp,string,co);
- }
- else
- {
- *actual_x = 0;
- }
+ *char_offset = 0;
- ami_close_font(tfont);
- }
- else
+ for(i=0;i<len;i++)
{
- uint16 *utf16 = NULL,*outf16 = NULL;
- struct OutlineFont *ofont;
- struct GlyphMap *glyph;
- uint32 tx=0,i=0;
- size_t len;
-
- len = utf8_bounded_length(string, length);
- if(utf8_to_enc(string,"UTF-16",length,&utf16) != UTF8_CONVERT_OK) return;
- outf16 = utf16;
- if(!(ofont = ami_open_outline_font(style))) return 0;
-
- *char_offset = 0;
-
- for(i=0;i<len;i++)
+ if(ESetInfo(&ofont->olf_EEngine,
+ OT_GlyphCode,*utf16,
+ TAG_END) == OTERR_Success)
{
- if(ESetInfo(&ofont->olf_EEngine,
- OT_GlyphCode,*utf16,
- TAG_END) == OTERR_Success)
+ if(EObtainInfo(&ofont->olf_EEngine,
+ OT_GlyphMap8Bit,&glyph,
+ TAG_END) == 0)
{
- if(EObtainInfo(&ofont->olf_EEngine,
- OT_GlyphMap8Bit,&glyph,
- TAG_END) == 0)
+ if(*utf16 == 0x0020)
{
- if(*utf16 == 0x0020)
- {
- *actual_x = tx;
- co = i;
- }
-
- if(x<tx+glyph->glm_X1)
- {
- i = length+1;
- }
-
- tx+= glyph->glm_X1;
-
- EReleaseInfo(&ofont->olf_EEngine,
- OT_GlyphMap8Bit,glyph,
- TAG_END);
+ *actual_x = tx;
+ co = i;
}
- }
- if (*utf16 < 0xD800 || 0xDFFF < *utf16)
- utf16++;
- else
- utf16 += 2;
- }
-
- charp = string+co;
- while(((*charp != ' ')) && (charp > string))
- {
- charp--;
- co--;
- }
- *char_offset = co;
- free(outf16);
- }
-
- return true;
-}
-
-struct TextFont *ami_open_font(struct css_style *style)
-{
- struct TextFont *tfont;
- struct TTextAttr tattr;
- struct TagItem tattrtags[2];
- char fontname[256];
-
- switch(style->font_family)
- {
- case CSS_FONT_FAMILY_SANS_SERIF:
- strcpy(fontname,option_font_sans);
- break;
-
- case CSS_FONT_FAMILY_SERIF:
- strcpy(fontname,option_font_serif);
- break;
-
- case CSS_FONT_FAMILY_MONOSPACE:
- strcpy(fontname,option_font_mono);
- break;
- case CSS_FONT_FAMILY_CURSIVE:
- strcpy(fontname,option_font_cursive);
- break;
-
- case CSS_FONT_FAMILY_FANTASY:
- strcpy(fontname,option_font_fantasy);
- break;
-
- default:
- strcpy(fontname,option_font_sans);
- break;
- }
-
- switch(style->font_style)
- {
- case CSS_FONT_STYLE_ITALIC:
- case CSS_FONT_STYLE_OBLIQUE:
- tattr.tta_Style = FSF_ITALIC;
- break;
+ if(x<tx+glyph->glm_X1)
+ {
+ i = length+1;
+ }
- default:
- tattr.tta_Style = FS_NORMAL;
- break;
- }
+ tx+= glyph->glm_X1;
- switch(style->font_weight)
- {
- case CSS_FONT_WEIGHT_BOLD:
- case CSS_FONT_WEIGHT_BOLDER:
- tattr.tta_Style |= FSF_BOLD;
- break;
+ EReleaseInfo(&ofont->olf_EEngine,
+ OT_GlyphMap8Bit,glyph,
+ TAG_END);
+ }
+ }
+ if (*utf16 < 0xD800 || 0xDFFF < *utf16)
+ utf16++;
+ else
+ utf16 += 2;
}
-/* not supported
- switch(style->font_variant)
+ charp = string+co;
+ while(((*charp != ' ')) && (charp > string))
{
- default:
- //printf("font variant: %ld\n",style->font_variant);
- break;
- }
-*/
-
- tattr.tta_YSize = css_len2px(&style->font_size.value.length, style);
-
- if(tattr.tta_YSize < option_font_min_size)
- tattr.tta_YSize = option_font_min_size;
-
- tattr.tta_Flags = 0;
-
-/* Uncommenting this changes the font's charset.
- 106 is UTF-8 but OS4 doesn't support it so this only results in a crash!
-
- tattrtags[0].ti_Tag = TA_CharSet;
- tattrtags[0].ti_Data = 106;
- tattrtags[1].ti_Tag = TAG_DONE;
-
- tattr.tta_Flags = FSB_TAGGED;
- tattr.tta_Tags = &tattrtags;
-*/
-
- strcat(fontname,".font");
- tattr.tta_Name = fontname;
-
- tfont = OpenDiskFont((struct TextAttr *)&tattr);
-
- if(tfont)
- {
- SetRPAttrs(currp,
- RPTAG_Font,tfont,
- TAG_DONE);
+ charp--;
+ co--;
}
+ *char_offset = co;
+ free(outf16);
- return tfont;
+ return true;
}
struct OutlineFont *ami_open_outline_font(struct css_style *style)
@@ -445,15 +295,6 @@ struct OutlineFont *ami_open_outline_font(struct css_style *style)
return NULL;
}
-void ami_close_font(struct TextFont *tfont)
-{
- SetRPAttrs(currp,
- RPTAG_Font,origrpfont,
- TAG_DONE);
-
- if(tfont) CloseFont(tfont);
-}
-
ULONG ami_unicode_text(struct RastPort *rp,char *string,ULONG length,struct css_style *style,ULONG dx, ULONG dy, ULONG c)
{
uint16 *utf16 = NULL, *outf16 = NULL;
@@ -531,46 +372,43 @@ void ami_init_fonts(void)
int i;
char *bname,*iname,*biname;
- if(!option_quick_text)
+ of[CSS_FONT_FAMILY_SANS_SERIF] = OpenOutlineFont(option_font_sans,NULL,OFF_OPEN);
+ of[CSS_FONT_FAMILY_SERIF] = OpenOutlineFont(option_font_serif,NULL,OFF_OPEN);
+ of[CSS_FONT_FAMILY_MONOSPACE] = OpenOutlineFont(option_font_mono,NULL,OFF_OPEN);
+ of[CSS_FONT_FAMILY_CURSIVE] = OpenOutlineFont(option_font_cursive,NULL,OFF_OPEN);
+ of[CSS_FONT_FAMILY_FANTASY] = OpenOutlineFont(option_font_fantasy,NULL,OFF_OPEN);
+ of[CSS_FONT_FAMILY_UNKNOWN] = OpenOutlineFont(option_font_sans,NULL,OFF_OPEN);
+ of[CSS_FONT_FAMILY_NOT_SET] = OpenOutlineFont(option_font_sans,NULL,OFF_OPEN);
+
+ for(i=CSS_FONT_FAMILY_SANS_SERIF;i<=CSS_FONT_FAMILY_NOT_SET;i++)
{
- of[CSS_FONT_FAMILY_SANS_SERIF] = OpenOutlineFont(option_font_sans,NULL,OFF_OPEN);
- of[CSS_FONT_FAMILY_SERIF] = OpenOutlineFont(option_font_serif,NULL,OFF_OPEN);
- of[CSS_FONT_FAMILY_MONOSPACE] = OpenOutlineFont(option_font_mono,NULL,OFF_OPEN);
- of[CSS_FONT_FAMILY_CURSIVE] = OpenOutlineFont(option_font_cursive,NULL,OFF_OPEN);
- of[CSS_FONT_FAMILY_FANTASY] = OpenOutlineFont(option_font_fantasy,NULL,OFF_OPEN);
- of[CSS_FONT_FAMILY_UNKNOWN] = OpenOutlineFont(option_font_sans,NULL,OFF_OPEN);
- of[CSS_FONT_FAMILY_NOT_SET] = OpenOutlineFont(option_font_sans,NULL,OFF_OPEN);
-
- for(i=CSS_FONT_FAMILY_SANS_SERIF;i<=CSS_FONT_FAMILY_NOT_SET;i++)
- {
- if(!of[i]) warn_user("FontError",""); // temporary error message
+ if(!of[i]) warn_user("FontError",""); // temporary error message
- if(bname = GetTagData(OT_BName,0,of[i]->olf_OTagList))
- {
- ofb[i] = OpenOutlineFont(bname,NULL,OFF_OPEN);
- }
- else
- {
- ofb[i] = NULL;
- }
+ if(bname = GetTagData(OT_BName,0,of[i]->olf_OTagList))
+ {
+ ofb[i] = OpenOutlineFont(bname,NULL,OFF_OPEN);
+ }
+ else
+ {
+ ofb[i] = NULL;
+ }
- if(iname = GetTagData(OT_IName,0,of[i]->olf_OTagList))
- {
- ofi[i] = OpenOutlineFont(iname,NULL,OFF_OPEN);
- }
- else
- {
- ofi[i] = NULL;
- }
+ if(iname = GetTagData(OT_IName,0,of[i]->olf_OTagList))
+ {
+ ofi[i] = OpenOutlineFont(iname,NULL,OFF_OPEN);
+ }
+ else
+ {
+ ofi[i] = NULL;
+ }
- if(biname = GetTagData(OT_BIName,0,of[i]->olf_OTagList))
- {
- ofbi[i] = OpenOutlineFont(biname,NULL,OFF_OPEN);
- }
- else
- {
- ofbi[i] = NULL;
- }
+ if(biname = GetTagData(OT_BIName,0,of[i]->olf_OTagList))
+ {
+ ofbi[i] = OpenOutlineFont(biname,NULL,OFF_OPEN);
+ }
+ else
+ {
+ ofbi[i] = NULL;
}
}
}
@@ -579,14 +417,11 @@ void ami_close_fonts(void)
{
int i=0;
- if(!option_quick_text)
+ for(i=CSS_FONT_FAMILY_SANS_SERIF;i<=CSS_FONT_FAMILY_NOT_SET;i++)
{
- for(i=CSS_FONT_FAMILY_SANS_SERIF;i<=CSS_FONT_FAMILY_NOT_SET;i++)
- {
- if(of[i]) CloseOutlineFont(of[i],NULL);
- if(ofb[i]) CloseOutlineFont(ofb[i],NULL);
- if(ofi[i]) CloseOutlineFont(ofi[i],NULL);
- if(ofbi[i]) CloseOutlineFont(ofbi[i],NULL);
- }
+ if(of[i]) CloseOutlineFont(of[i],NULL);
+ if(ofb[i]) CloseOutlineFont(ofb[i],NULL);
+ if(ofi[i]) CloseOutlineFont(ofi[i],NULL);
+ if(ofbi[i]) CloseOutlineFont(ofbi[i],NULL);
}
}
diff --git a/amiga/options.h b/amiga/options.h
index adba19c92..d5b72f57c 100644
--- a/amiga/options.h
+++ b/amiga/options.h
@@ -38,7 +38,6 @@ extern bool option_kiosk_mode;
extern char *option_recent_file;
extern char *option_arexx_dir;
extern char *option_download_dir;
-extern bool option_quick_text;
extern bool option_faster_scroll;
#define EXTRA_OPTION_DEFINE \
@@ -60,7 +59,6 @@ bool option_kiosk_mode = false; \
char *option_recent_file = 0; \
char *option_arexx_dir = 0; \
char *option_download_dir = 0; \
-bool option_quick_text = false; \
bool option_faster_scroll = false; \
#define EXTRA_OPTION_TABLE \
@@ -82,6 +80,5 @@ bool option_faster_scroll = false; \
{ "recent_file", OPTION_STRING, &option_recent_file }, \
{ "arexx_dir", OPTION_STRING, &option_arexx_dir }, \
{ "download_dir", OPTION_STRING, &option_download_dir }, \
-{ "quick_text", OPTION_BOOL, &option_quick_text}, \
{ "faster_scroll", OPTION_BOOL, &option_faster_scroll},
#endif
diff --git a/amiga/plotters.c b/amiga/plotters.c
index 50a13cd7b..f79337fbe 100755
--- a/amiga/plotters.c
+++ b/amiga/plotters.c
@@ -182,8 +182,8 @@ bool ami_line(int x0, int y0, int x1, int y1, int width,
width = 1;
cairo_set_line_width(glob.cr, width);
- cairo_move_to(glob.cr, x0, y0 - 0.5);
- cairo_line_to(glob.cr, x1, y1 - 0.5);
+ cairo_move_to(current_cr, x0 + 0.5, y0 + 0.5);
+ cairo_line_to(current_cr, x1 + 0.5, y1 + 0.5);
cairo_stroke(glob.cr);
#endif
return true;
@@ -283,42 +283,7 @@ bool ami_clip(int x0, int y0, int x1, int y1)
bool ami_text(int x, int y, const struct css_style *style,
const char *text, size_t length, colour bg, colour c)
{
- char *buffer = NULL;
- struct TextFont *tfont;
-
- if(option_quick_text)
- {
- tfont = ami_open_font(style);
-
- SetRPAttrs(currp,RPTAG_APenColor,p96EncodeColor(RGBFB_A8B8G8R8,c),
- RPTAG_BPenColor,p96EncodeColor(RGBFB_A8B8G8R8,bg),
-// RPTAG_Font,tfont,
- TAG_DONE);
-
- utf8_to_local_encoding(text,length,&buffer);
-
- if(!buffer) return true;
-
-/* Below function prints Unicode text direct to the RastPort.
- * This is commented out due to lack of SDK which allows me to perform blits
- * that respect the Alpha channel. The code below that (and above) convert to
- * system default charset and write the text using graphics.library functions.
- *
- * ami_unicode_text(currp,text,length,style,x,y,c);
- *
- * or, perhaps the ttengine.library version (far too slow):
- * ami_tte_text(currp,text,length);
- */
- Move(currp,x,y);
- Text(currp,buffer,strlen(buffer));
- ami_close_font(tfont);
- ami_utf8_free(buffer);
- }
- else
- {
- ami_unicode_text(currp,text,length,style,x,y,c);
- }
-
+ ami_unicode_text(currp,text,length,style,x,y,c);
return true;
}