[gtk/glyphy2: 66/69] glyphy: Update for api changes in glyphy
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/glyphy2: 66/69] glyphy: Update for api changes in glyphy
- Date: Thu, 7 Apr 2022 04:00:04 +0000 (UTC)
commit 0d52772f68772e0243226a7b42aa25e7f6a4e99a
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Apr 4 20:38:04 2022 -0400
glyphy: Update for api changes in glyphy
With this, synthetic bold fonts work as well
as the do with freetype.
gsk/gl/gskglglyphylibrary.c | 32 ++++++++++++++++++++------------
gsk/gl/gskglrenderjob.c | 6 +++++-
gsk/gl/resources/glyphy.fs.glsl | 2 +-
3 files changed, 26 insertions(+), 14 deletions(-)
---
diff --git a/gsk/gl/gskglglyphylibrary.c b/gsk/gl/gskglglyphylibrary.c
index fd5d1d503a..3a0ec8b3a1 100644
--- a/gsk/gl/gskglglyphylibrary.c
+++ b/gsk/gl/gskglglyphylibrary.c
@@ -54,7 +54,10 @@
#include <glyphy.h>
#define TOLERANCE (1/2048.)
-#define MIN_FONT_SIZE 10
+#define MIN_FONT_SIZE 14
+#define GRID_SIZE 20 /* Per EM */
+#define ENLIGHTEN_MAX .01 /* Per EM */
+#define EMBOLDEN_MAX .024 /* Per EM */
#define ITEM_W 64
#define ITEM_H_QUANTUM 8
@@ -349,6 +352,9 @@ encode_glyph (GskGLGlyphyLibrary *self,
guint upem = hb_face_get_upem (face);
double tolerance = upem * tolerance_per_em;
double faraway = (double)upem / (MIN_FONT_SIZE * M_SQRT2);
+ double unit_size = (double) upem / GRID_SIZE;
+ double enlighten_max = (double) upem * ENLIGHTEN_MAX;
+ double embolden_max = (double) upem * EMBOLDEN_MAX;
double avg_fetch_achieved;
GskPathBuilder *builder;
GskPath *path, *simplified;
@@ -380,17 +386,19 @@ encode_glyph (GskGLGlyphyLibrary *self,
self->acc_endpoints->len,
FALSE);
- if (!glyphy_arc_list_encode_blob ((gpointer)self->acc_endpoints->data,
- self->acc_endpoints->len,
- buffer,
- buffer_len,
- faraway,
- 4, /* UNUSED */
- &avg_fetch_achieved,
- output_len,
- nominal_width,
- nominal_height,
- extents))
+ if (!glyphy_arc_list_encode_blob2 ((gpointer)self->acc_endpoints->data,
+ self->acc_endpoints->len,
+ buffer,
+ buffer_len,
+ faraway,
+ unit_size,
+ enlighten_max,
+ embolden_max,
+ &avg_fetch_achieved,
+ output_len,
+ nominal_width,
+ nominal_height,
+ extents))
return FALSE;
glyphy_extents_scale (extents, 1./upem, 1./upem);
diff --git a/gsk/gl/gskglrenderjob.c b/gsk/gl/gskglrenderjob.c
index 6f6f45772e..4fe13b2791 100644
--- a/gsk/gl/gskglrenderjob.c
+++ b/gsk/gl/gskglrenderjob.c
@@ -3164,6 +3164,8 @@ gsk_gl_render_job_visit_text_node_glyphy (GskGLRenderJob *job,
float font_scale;
gboolean synthetic_bold;
+#define GRID_SIZE 20
+
g_assert (!gsk_text_node_has_color_glyphs (node));
if (!(num_glyphs = gsk_text_node_get_num_glyphs (node)))
@@ -3237,9 +3239,11 @@ gsk_gl_render_job_visit_text_node_glyphy (GskGLRenderJob *job,
gsk_gl_program_set_uniform1f (job->current_program,
UNIFORM_GLYPHY_CONTRAST, 0,
1.0);
+
+ /* 0.0208 is the value used by freetype for synthetic emboldening */
gsk_gl_program_set_uniform1f (job->current_program,
UNIFORM_GLYPHY_BOLDNESS, 0,
- synthetic_bold ? 0.1 : 0.0);
+ synthetic_bold ? 0.0208 * GRID_SIZE : 0.0);
#if 0
gsk_gl_program_set_uniform1f (job->current_program,
diff --git a/gsk/gl/resources/glyphy.fs.glsl b/gsk/gl/resources/glyphy.fs.glsl
index 48f26f6302..0eb7ffef0d 100644
--- a/gsk/gl/resources/glyphy.fs.glsl
+++ b/gsk/gl/resources/glyphy.fs.glsl
@@ -27,7 +27,6 @@ glyph_info_decode (vec4 v)
return gi;
}
-
float
antialias (float d)
{
@@ -46,6 +45,7 @@ main()
float m = length (vec2 (length (dpdx), length (dpdy))) * SQRT2_INV;
float gsdist = glyphy_sdf (p, gi.nominal_size GLYPHY_DEMO_EXTRA_ARGS);
+ gsdist -= u_boldness;
float sdist = gsdist / m * u_contrast;
if (u_outline)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]