Gitweb links:
...log
http://git.netsurf-browser.org/netsurf.git/shortlog/c5a84e17f78ff82d98af155c9d075e7b0f4978cf
...commit
http://git.netsurf-browser.org/netsurf.git/commit/c5a84e17f78ff82d98af155c9d075e7b0f4978cf
...tree
http://git.netsurf-browser.org/netsurf.git/tree/c5a84e17f78ff82d98af155c9d075e7b0f4978cf
The branch, master has been updated
via c5a84e17f78ff82d98af155c9d075e7b0f4978cf (commit)
from ff2f1f1836f4a3b33bbfaafbb2bbdc2c1dba4d63 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/netsurf.git/commitdiff/c5a84e17f78ff82d98af155c9d075e7b0f4978cf
commit c5a84e17f78ff82d98af155c9d075e7b0f4978cf
Author: Ole Loots <[email protected]>
Commit: Ole Loots <[email protected]>
Merged some features from framebuffer freetype impl.
- Set default font for font faces which failed to
load.
- Lookup more font faces (Cursive, Fantasy).
diff --git a/atari/plot/font_freetype.c b/atari/plot/font_freetype.c
index 8b526a7..8eb15e2 100755
--- a/atari/plot/font_freetype.c
+++ b/atari/plot/font_freetype.c
@@ -23,11 +23,16 @@
#include "desktop/options.h"
#include "atari/plot/plot.h"
-#include "atari/plot/font_freetype.h"
+#include "atari/plot/font_freetype.h"
+#include "atari/findfile.h"
+#define DEJAVU_PATH "/usr/share/fonts/truetype/ttf-dejavu/"
+#define CACHE_SIZE 2048
+#define CACHE_MIN_SIZE (100 * 1024)
+#define BOLD_WEIGHT 700
-#define DEJAVU_PATH "/usr/share/fonts/truetype/ttf-dejavu/"
-
+extern css_fixed nscss_screen_dpi;
+
extern unsigned long atari_plot_flags;
extern int atari_plot_vdi_handle;
@@ -123,50 +128,64 @@ ft_new_face(const char *option, const char *resname,
const char *fontfile)
newf = font_faces[FONT_FACE_DEFAULT]; /* use default */
}
return newf;
-}
-
-static void ft_fill_scalar(const plot_font_style_t *fstyle, FTC_Scaler srec)
-{
- int selected_face = FONT_FACE_DEFAULT;
-
- switch (fstyle->family) {
-/*
- case PLOT_FONT_FAMILY_CURSIVE:
- break;
- case PLOT_FONT_FAMILY_FANTASY:
- break;
-*/
- case PLOT_FONT_FAMILY_SERIF:
- if (fstyle->weight >= 700)
- selected_face = FONT_FACE_SERIF_BOLD;
- else
- selected_face = FONT_FACE_SERIF;
-
- break;
-
- case PLOT_FONT_FAMILY_MONOSPACE:
- selected_face = FONT_FACE_MONOSPACE;
- break;
-
- case PLOT_FONT_FAMILY_SANS_SERIF:
- default:
- if ((fstyle->flags & FONTF_ITALIC) || (fstyle->flags &
FONTF_OBLIQUE)) {
- if (fstyle->weight >= 700)
- selected_face =
FONT_FACE_SANS_SERIF_ITALIC_BOLD;
- else
- selected_face = FONT_FACE_SANS_SERIF_ITALIC;
- } else {
- if (fstyle->weight >= 700)
- selected_face = FONT_FACE_SANS_SERIF_BOLD;
- else
- selected_face = FONT_FACE_SANS_SERIF;
- }
- }
-
- srec->face_id = (FTC_FaceID)font_faces[selected_face];
- srec->width = srec->height = (fstyle->size * 64) / FONT_SIZE_SCALE;
- srec->pixel = 0;
- srec->x_res = srec->y_res = 72;
+}
+
+static void ft_fill_scalar(const plot_font_style_t *fstyle, FTC_Scaler srec)
+{
+ int selected_face = FONT_FACE_DEFAULT;
+
+ switch (fstyle->family) {
+
+ case PLOT_FONT_FAMILY_SERIF:
+ if (fstyle->weight >= BOLD_WEIGHT) {
+ selected_face = FONT_FACE_SERIF_BOLD;
+ } else {
+ selected_face = FONT_FACE_SERIF;
+ }
+ break;
+
+ case PLOT_FONT_FAMILY_MONOSPACE:
+ if (fstyle->weight >= BOLD_WEIGHT) {
+ selected_face = FONT_FACE_MONOSPACE_BOLD;
+ } else {
+ selected_face = FONT_FACE_MONOSPACE;
+ }
+ break;
+
+ case PLOT_FONT_FAMILY_CURSIVE:
+ selected_face = FONT_FACE_CURSIVE;
+ break;
+
+ case PLOT_FONT_FAMILY_FANTASY:
+ selected_face = FONT_FACE_FANTASY;
+ break;
+
+ case PLOT_FONT_FAMILY_SANS_SERIF:
+ default:
+ if ((fstyle->flags & FONTF_ITALIC) ||
+ (fstyle->flags & FONTF_OBLIQUE)) {
+ if (fstyle->weight >= BOLD_WEIGHT) {
+ selected_face =
FONT_FACE_SANS_SERIF_ITALIC_BOLD;
+ } else {
+ selected_face = FONT_FACE_SANS_SERIF_ITALIC;
+ }
+ } else {
+ if (fstyle->weight >= BOLD_WEIGHT) {
+ selected_face = FONT_FACE_SANS_SERIF_BOLD;
+ } else {
+ selected_face = FONT_FACE_SANS_SERIF;
+ }
+ }
+ }
+
+ srec->face_id = (FTC_FaceID)font_faces[selected_face];
+
+ srec->width = srec->height = (fstyle->size * 64) / FONT_SIZE_SCALE;
+ srec->pixel = 0;
+
+ /* calculate x/y resolution, when nscss_screen_dpi isn't available */
+ /* 72 is an good value. */
+ srec->x_res = srec->y_res = FIXTOINT(nscss_screen_dpi);
}
static FT_Glyph ft_getglyph(const plot_font_style_t *fstyle, uint32_t ucs4)
@@ -198,7 +217,8 @@ static bool ft_font_init(void)
{
FT_Error error;
FT_ULong max_cache_size;
- FT_UInt max_faces = 6;
+ FT_UInt max_faces = 6;
+ int i;
/* freetype library initialise */
error = FT_Init_FreeType( &library );
@@ -206,8 +226,12 @@ static bool ft_font_init(void)
LOG(("Freetype could not initialised (code %d)\n", error));
return false;
}
-
- max_cache_size = 2 * 1024 *1024; /* 2MB should be enough */
+
+ /* set the Glyph cache size up */
+ max_cache_size = CACHE_SIZE * 1024;
+ if (max_cache_size < CACHE_MIN_SIZE) {
+ max_cache_size = CACHE_MIN_SIZE;
+ }
/* cache manager initialise */
error = FTC_Manager_New(library,
@@ -225,7 +249,11 @@ static bool ft_font_init(void)
error = FTC_CMapCache_New(ft_cmanager, &ft_cmap_cache);
error = FTC_ImageCache_New(ft_cmanager, &ft_image_cache);
-
+
+ /* Optain font faces */
+
+
+ /* Default font, Sans Serif */
font_faces[FONT_FACE_SANS_SERIF] = NULL;
font_faces[FONT_FACE_SANS_SERIF] = ft_new_face(
nsoption_charp(atari_face_sans_serif),
@@ -234,55 +262,70 @@ static bool ft_font_init(void)
);
if (font_faces[FONT_FACE_SANS_SERIF] == NULL) {
LOG(("Could not find default font (code %d)\n", error));
- FTC_Manager_Done(ft_cmanager );
+ FTC_Manager_Done(ft_cmanager);
FT_Done_FreeType(library);
return false;
}
-
+
+ /* Sans Serif Bold*/
font_faces[FONT_FACE_SANS_SERIF_BOLD] =
ft_new_face(nsoption_charp(atari_face_sans_serif_bold),
"fonts/ssb.ttf",
- DEJAVU_PATH"DejaVuSans-Bold.ttf");
-
+ DEJAVU_PATH"DejaVuSans-Bold.ttf");
+
+ /* Sans Serif Italic */
font_faces[FONT_FACE_SANS_SERIF_ITALIC] =
ft_new_face(nsoption_charp(atari_face_sans_serif_italic),
"fonts/ssi.ttf",
DEJAVU_PATH"DejaVuSans-Oblique.ttf");
-
+
+ /* Sans Serif Italic Bold */
font_faces[FONT_FACE_SANS_SERIF_ITALIC_BOLD] =
ft_new_face(nsoption_charp(atari_face_sans_serif_italic_bold),
"fonts/ssib.ttf",
DEJAVU_PATH"DejaVuSans-BoldOblique.ttf");
-
+
+ /* Monospaced */
font_faces[FONT_FACE_MONOSPACE] =
ft_new_face(nsoption_charp(atari_face_monospace),
"fonts/mono.ttf",
DEJAVU_PATH"DejaVuSansMono.ttf");
-
+
+ /* Mospaced Bold */
font_faces[FONT_FACE_MONOSPACE_BOLD] =
ft_new_face(nsoption_charp(atari_face_monospace_bold),
"fonts/monob.ttf",
DEJAVU_PATH"DejaVuSansMono-Bold.ttf");
-
+
+ /* Serif */
font_faces[FONT_FACE_SERIF] =
ft_new_face(nsoption_charp(atari_face_serif),
"fonts/s.ttf",
DEJAVU_PATH"DejaVuSerif.ttf");
-
+
+ /* Serif Bold */
font_faces[FONT_FACE_SERIF_BOLD] =
ft_new_face(nsoption_charp(atari_face_serif_bold),
"fonts/sb.ttf",
DEJAVU_PATH"DejaVuSerif-Bold.ttf");
-
+
+ /* Cursive */
font_faces[FONT_FACE_CURSIVE] =
ft_new_face(nsoption_charp(atari_face_cursive),
"fonts/cursive.ttf",
DEJAVU_PATH"DejaVuSansMono-Oblique.ttf");
-
+
+ /* Fantasy */
font_faces[FONT_FACE_FANTASY] =
ft_new_face(nsoption_charp(atari_face_fantasy),
"fonts/fantasy.ttf",
DEJAVU_PATH"DejaVuSerifCondensed-Bold.ttf");
+
+ for (i=1; i<FONT_FACE_COUNT; i++) {
+ if (font_faces[i] == NULL){
+ font_faces[i] = font_faces[FONT_FACE_SANS_SERIF];
+ }
+ }
return true;
}
diff --git a/atari/plot/font_freetype.h b/atari/plot/font_freetype.h
index bca6d99..1e64ebc 100755
--- a/atari/plot/font_freetype.h
+++ b/atari/plot/font_freetype.h
@@ -48,4 +48,4 @@ struct font_desc {
/* extern int ft_load_type; */
int ctor_font_plotter_freetype( FONT_PLOTTER self );
-#endif
\ No newline at end of file
+#endif
-----------------------------------------------------------------------
Summary of changes:
atari/plot/font_freetype.c | 167 +++++++++++++++++++++++++++----------------
atari/plot/font_freetype.h | 2 +-
2 files changed, 106 insertions(+), 63 deletions(-)
diff --git a/atari/plot/font_freetype.c b/atari/plot/font_freetype.c
index 8b526a7..8eb15e2 100755
--- a/atari/plot/font_freetype.c
+++ b/atari/plot/font_freetype.c
@@ -23,11 +23,16 @@
#include "desktop/options.h"
#include "atari/plot/plot.h"
-#include "atari/plot/font_freetype.h"
+#include "atari/plot/font_freetype.h"
+#include "atari/findfile.h"
+#define DEJAVU_PATH "/usr/share/fonts/truetype/ttf-dejavu/"
+#define CACHE_SIZE 2048
+#define CACHE_MIN_SIZE (100 * 1024)
+#define BOLD_WEIGHT 700
-#define DEJAVU_PATH "/usr/share/fonts/truetype/ttf-dejavu/"
-
+extern css_fixed nscss_screen_dpi;
+
extern unsigned long atari_plot_flags;
extern int atari_plot_vdi_handle;
@@ -123,50 +128,64 @@ ft_new_face(const char *option, const char *resname,
const char *fontfile)
newf = font_faces[FONT_FACE_DEFAULT]; /* use default */
}
return newf;
-}
-
-static void ft_fill_scalar(const plot_font_style_t *fstyle, FTC_Scaler srec)
-{
- int selected_face = FONT_FACE_DEFAULT;
-
- switch (fstyle->family) {
-/*
- case PLOT_FONT_FAMILY_CURSIVE:
- break;
- case PLOT_FONT_FAMILY_FANTASY:
- break;
-*/
- case PLOT_FONT_FAMILY_SERIF:
- if (fstyle->weight >= 700)
- selected_face = FONT_FACE_SERIF_BOLD;
- else
- selected_face = FONT_FACE_SERIF;
-
- break;
-
- case PLOT_FONT_FAMILY_MONOSPACE:
- selected_face = FONT_FACE_MONOSPACE;
- break;
-
- case PLOT_FONT_FAMILY_SANS_SERIF:
- default:
- if ((fstyle->flags & FONTF_ITALIC) || (fstyle->flags &
FONTF_OBLIQUE)) {
- if (fstyle->weight >= 700)
- selected_face =
FONT_FACE_SANS_SERIF_ITALIC_BOLD;
- else
- selected_face = FONT_FACE_SANS_SERIF_ITALIC;
- } else {
- if (fstyle->weight >= 700)
- selected_face = FONT_FACE_SANS_SERIF_BOLD;
- else
- selected_face = FONT_FACE_SANS_SERIF;
- }
- }
-
- srec->face_id = (FTC_FaceID)font_faces[selected_face];
- srec->width = srec->height = (fstyle->size * 64) / FONT_SIZE_SCALE;
- srec->pixel = 0;
- srec->x_res = srec->y_res = 72;
+}
+
+static void ft_fill_scalar(const plot_font_style_t *fstyle, FTC_Scaler srec)
+{
+ int selected_face = FONT_FACE_DEFAULT;
+
+ switch (fstyle->family) {
+
+ case PLOT_FONT_FAMILY_SERIF:
+ if (fstyle->weight >= BOLD_WEIGHT) {
+ selected_face = FONT_FACE_SERIF_BOLD;
+ } else {
+ selected_face = FONT_FACE_SERIF;
+ }
+ break;
+
+ case PLOT_FONT_FAMILY_MONOSPACE:
+ if (fstyle->weight >= BOLD_WEIGHT) {
+ selected_face = FONT_FACE_MONOSPACE_BOLD;
+ } else {
+ selected_face = FONT_FACE_MONOSPACE;
+ }
+ break;
+
+ case PLOT_FONT_FAMILY_CURSIVE:
+ selected_face = FONT_FACE_CURSIVE;
+ break;
+
+ case PLOT_FONT_FAMILY_FANTASY:
+ selected_face = FONT_FACE_FANTASY;
+ break;
+
+ case PLOT_FONT_FAMILY_SANS_SERIF:
+ default:
+ if ((fstyle->flags & FONTF_ITALIC) ||
+ (fstyle->flags & FONTF_OBLIQUE)) {
+ if (fstyle->weight >= BOLD_WEIGHT) {
+ selected_face =
FONT_FACE_SANS_SERIF_ITALIC_BOLD;
+ } else {
+ selected_face = FONT_FACE_SANS_SERIF_ITALIC;
+ }
+ } else {
+ if (fstyle->weight >= BOLD_WEIGHT) {
+ selected_face = FONT_FACE_SANS_SERIF_BOLD;
+ } else {
+ selected_face = FONT_FACE_SANS_SERIF;
+ }
+ }
+ }
+
+ srec->face_id = (FTC_FaceID)font_faces[selected_face];
+
+ srec->width = srec->height = (fstyle->size * 64) / FONT_SIZE_SCALE;
+ srec->pixel = 0;
+
+ /* calculate x/y resolution, when nscss_screen_dpi isn't available */
+ /* 72 is an good value. */
+ srec->x_res = srec->y_res = FIXTOINT(nscss_screen_dpi);
}
static FT_Glyph ft_getglyph(const plot_font_style_t *fstyle, uint32_t ucs4)
@@ -198,7 +217,8 @@ static bool ft_font_init(void)
{
FT_Error error;
FT_ULong max_cache_size;
- FT_UInt max_faces = 6;
+ FT_UInt max_faces = 6;
+ int i;
/* freetype library initialise */
error = FT_Init_FreeType( &library );
@@ -206,8 +226,12 @@ static bool ft_font_init(void)
LOG(("Freetype could not initialised (code %d)\n", error));
return false;
}
-
- max_cache_size = 2 * 1024 *1024; /* 2MB should be enough */
+
+ /* set the Glyph cache size up */
+ max_cache_size = CACHE_SIZE * 1024;
+ if (max_cache_size < CACHE_MIN_SIZE) {
+ max_cache_size = CACHE_MIN_SIZE;
+ }
/* cache manager initialise */
error = FTC_Manager_New(library,
@@ -225,7 +249,11 @@ static bool ft_font_init(void)
error = FTC_CMapCache_New(ft_cmanager, &ft_cmap_cache);
error = FTC_ImageCache_New(ft_cmanager, &ft_image_cache);
-
+
+ /* Optain font faces */
+
+
+ /* Default font, Sans Serif */
font_faces[FONT_FACE_SANS_SERIF] = NULL;
font_faces[FONT_FACE_SANS_SERIF] = ft_new_face(
nsoption_charp(atari_face_sans_serif),
@@ -234,55 +262,70 @@ static bool ft_font_init(void)
);
if (font_faces[FONT_FACE_SANS_SERIF] == NULL) {
LOG(("Could not find default font (code %d)\n", error));
- FTC_Manager_Done(ft_cmanager );
+ FTC_Manager_Done(ft_cmanager);
FT_Done_FreeType(library);
return false;
}
-
+
+ /* Sans Serif Bold*/
font_faces[FONT_FACE_SANS_SERIF_BOLD] =
ft_new_face(nsoption_charp(atari_face_sans_serif_bold),
"fonts/ssb.ttf",
- DEJAVU_PATH"DejaVuSans-Bold.ttf");
-
+ DEJAVU_PATH"DejaVuSans-Bold.ttf");
+
+ /* Sans Serif Italic */
font_faces[FONT_FACE_SANS_SERIF_ITALIC] =
ft_new_face(nsoption_charp(atari_face_sans_serif_italic),
"fonts/ssi.ttf",
DEJAVU_PATH"DejaVuSans-Oblique.ttf");
-
+
+ /* Sans Serif Italic Bold */
font_faces[FONT_FACE_SANS_SERIF_ITALIC_BOLD] =
ft_new_face(nsoption_charp(atari_face_sans_serif_italic_bold),
"fonts/ssib.ttf",
DEJAVU_PATH"DejaVuSans-BoldOblique.ttf");
-
+
+ /* Monospaced */
font_faces[FONT_FACE_MONOSPACE] =
ft_new_face(nsoption_charp(atari_face_monospace),
"fonts/mono.ttf",
DEJAVU_PATH"DejaVuSansMono.ttf");
-
+
+ /* Mospaced Bold */
font_faces[FONT_FACE_MONOSPACE_BOLD] =
ft_new_face(nsoption_charp(atari_face_monospace_bold),
"fonts/monob.ttf",
DEJAVU_PATH"DejaVuSansMono-Bold.ttf");
-
+
+ /* Serif */
font_faces[FONT_FACE_SERIF] =
ft_new_face(nsoption_charp(atari_face_serif),
"fonts/s.ttf",
DEJAVU_PATH"DejaVuSerif.ttf");
-
+
+ /* Serif Bold */
font_faces[FONT_FACE_SERIF_BOLD] =
ft_new_face(nsoption_charp(atari_face_serif_bold),
"fonts/sb.ttf",
DEJAVU_PATH"DejaVuSerif-Bold.ttf");
-
+
+ /* Cursive */
font_faces[FONT_FACE_CURSIVE] =
ft_new_face(nsoption_charp(atari_face_cursive),
"fonts/cursive.ttf",
DEJAVU_PATH"DejaVuSansMono-Oblique.ttf");
-
+
+ /* Fantasy */
font_faces[FONT_FACE_FANTASY] =
ft_new_face(nsoption_charp(atari_face_fantasy),
"fonts/fantasy.ttf",
DEJAVU_PATH"DejaVuSerifCondensed-Bold.ttf");
+
+ for (i=1; i<FONT_FACE_COUNT; i++) {
+ if (font_faces[i] == NULL){
+ font_faces[i] = font_faces[FONT_FACE_SANS_SERIF];
+ }
+ }
return true;
}
diff --git a/atari/plot/font_freetype.h b/atari/plot/font_freetype.h
index bca6d99..1e64ebc 100755
--- a/atari/plot/font_freetype.h
+++ b/atari/plot/font_freetype.h
@@ -48,4 +48,4 @@ struct font_desc {
/* extern int ft_load_type; */
int ctor_font_plotter_freetype( FONT_PLOTTER self );
-#endif
\ No newline at end of file
+#endif
--
NetSurf Browser
_______________________________________________
netsurf-commits mailing list
[email protected]
http://vlists.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org