From ed7c6d687306a69cb31154e9251c6b1d8af62de5 Mon Sep 17 00:00:00 2001 From: Po Lu Date: Wed, 5 Jan 2022 12:02:32 +0000 Subject: [PATCH] Enable subpixel antialiasing on the Cairo font driver on Haiku * src/ftcrfont.c (ftcrfont_open): Manually enable subpixel antialiasing on Haiku. * src/haiku_support.cc (get_subpixel_antialiasing): New function declaration. (be_use_subpixel_antialising): * src/haiku_support.h (be_use_subpixel_antialising): New functions. --- src/ftcrfont.c | 4 ++++ src/haiku_support.cc | 15 +++++++++++++++ src/haiku_support.h | 3 +++ 3 files changed, 22 insertions(+) diff --git a/src/ftcrfont.c b/src/ftcrfont.c index 337e804b895..558e44d5b91 100644 --- a/src/ftcrfont.c +++ b/src/ftcrfont.c @@ -169,6 +169,10 @@ ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size) cairo_matrix_init_scale (&font_matrix, pixel_size, pixel_size); cairo_matrix_init_identity (&ctm); cairo_font_options_t *options = cairo_font_options_create (); +#ifdef USE_BE_CAIRO + if (be_use_subpixel_antialiasing ()) + cairo_font_options_set_antialias (options, CAIRO_ANTIALIAS_SUBPIXEL); +#endif cairo_scaled_font_t *scaled_font = cairo_scaled_font_create (font_face, &font_matrix, &ctm, options); cairo_font_face_destroy (font_face); diff --git a/src/haiku_support.cc b/src/haiku_support.cc index 40f37d577e1..2e9eff40676 100644 --- a/src/haiku_support.cc +++ b/src/haiku_support.cc @@ -112,6 +112,10 @@ static BLocker child_frame_lock; static BLocker movement_locker; +/* This could be a private API, but it's used by (at least) the Qt + port, so it's probably here to stay. */ +extern status_t get_subpixel_antialiasing (bool *); + extern "C" { extern _Noreturn void emacs_abort (void); @@ -3043,3 +3047,14 @@ BWindow_is_active (void *window) BWindow *w = (BWindow *) window; return w->IsActive (); } + +bool +be_use_subpixel_antialiasing (void) +{ + bool current_subpixel_antialiasing; + + if (get_subpixel_antialiasing (¤t_subpixel_antialiasing) != B_OK) + return false; + + return current_subpixel_antialiasing; +} diff --git a/src/haiku_support.h b/src/haiku_support.h index 550ebd00505..6a99eb245dc 100644 --- a/src/haiku_support.h +++ b/src/haiku_support.h @@ -853,6 +853,9 @@ extern "C" extern bool BWindow_is_active (void *window); + extern bool + be_use_subpixel_antialiasing (void); + #ifdef __cplusplus extern void * find_appropriate_view_for_draw (void *vw); -- 2.39.2