Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/js/xpconnect/tests/unit/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 2 kB image not shown  

Quelle  04-subpixel-aa-api.patch   Sprache: unbekannt

 
# HG changeset patch
# User Jonathan Kew <jkew@mozilla.com>
# Date 1713886888 -3600
#      Tue Apr 23 16:41:28 2024 +0100
# Node ID 5795122842a66df4f6217e4b5e9aac0e20b4389e
# Parent  a0271c8e8524b6a3a11f76fe5854b402c71926a3
Apply cairo/04-subpixel-aa-api.patch (with modification in cairo-quartz-surface.c)

diff --git a/gfx/cairo/cairo/src/cairo-compositor-private.h b/gfx/cairo/cairo/src/cairo-compositor-private.h
--- a/gfx/cairo/cairo/src/cairo-compositor-private.h
+++ b/gfx/cairo/cairo/src/cairo-compositor-private.h
@@ -85,7 +85,8 @@ struct cairo_compositor {
      cairo_scaled_font_t  *scaled_font,
      cairo_glyph_t   *glyphs,
      int     num_glyphs,
-     cairo_bool_t    overlap);
+     cairo_bool_t    overlap,
+     cairo_bool_t                    permit_subpixel_antialiasing);
 };
 
 struct cairo_mask_compositor {
diff --git a/gfx/cairo/cairo/src/cairo-compositor.c b/gfx/cairo/cairo/src/cairo-compositor.c
--- a/gfx/cairo/cairo/src/cairo-compositor.c
+++ b/gfx/cairo/cairo/src/cairo-compositor.c
@@ -290,7 +290,8 @@ cairo_int_status_t
      compositor = compositor->delegate;
 
  status = compositor->glyphs (compositor, &extents,
-         scaled_font, glyphs, num_glyphs, overlap);
+         scaled_font, glyphs, num_glyphs, overlap,
+         surface->permit_subpixel_antialiasing);
 
  compositor = compositor->delegate;
     } while (status == CAIRO_INT_STATUS_UNSUPPORTED);
diff --git a/gfx/cairo/cairo/src/cairo-no-compositor.c b/gfx/cairo/cairo/src/cairo-no-compositor.c
--- a/gfx/cairo/cairo/src/cairo-no-compositor.c
+++ b/gfx/cairo/cairo/src/cairo-no-compositor.c
@@ -91,7 +91,8 @@ static cairo_int_status_t
         cairo_scaled_font_t *scaled_font,
         cairo_glyph_t  *glyphs,
         int    num_glyphs,
-        cairo_bool_t overlap)
+        cairo_bool_t overlap,
+        cairo_bool_t permit_subpixel_antialiasing)
 {
     ASSERT_NOT_REACHED;
     return CAIRO_INT_STATUS_NOTHING_TO_DO;
diff --git a/gfx/cairo/cairo/src/cairo-quartz-surface.c b/gfx/cairo/cairo/src/cairo-quartz-surface.c
--- a/gfx/cairo/cairo/src/cairo-quartz-surface.c
+++ b/gfx/cairo/cairo/src/cairo-quartz-surface.c
@@ -1871,7 +1871,8 @@ static cairo_int_status_t
     cairo_scaled_font_t *scaled_font,
     cairo_glyph_t *glyphs,
     int num_glyphs,
-    cairo_bool_t overlap)
+    cairo_bool_t overlap,
+    cairo_bool_t permit_subpixel_antialiasing)
 {
     CGAffineTransform textTransform, invTextTransform;
     CGGlyph glyphs_static[CAIRO_STACK_ARRAY_LENGTH (CGPoint)];
@@ -1885,6 +1886,7 @@ static cairo_int_status_t
     CTFontRef ctFont = NULL;
 
     cairo_bool_t didForceFontSmoothing = FALSE;
+    cairo_antialias_t effective_antialiasing;
 
     if (cairo_scaled_font_get_type (scaled_font) != CAIRO_FONT_TYPE_QUARTZ)
  return CAIRO_INT_STATUS_UNSUPPORTED;
@@ -1904,6 +1906,14 @@ static cairo_int_status_t
     ctFont = _cairo_quartz_scaled_font_get_ct_font (scaled_font);
     _cairo_quartz_set_antialiasing (state.cgMaskContext, scaled_font->options.antialias);
 
+    effective_antialiasing = scaled_font->options.antialias;
+    if (effective_antialiasing == CAIRO_ANTIALIAS_SUBPIXEL &&
+        !permit_subpixel_antialiasing) {
+        effective_antialiasing = CAIRO_ANTIALIAS_GRAY;
+    }
+
+    _cairo_quartz_set_antialiasing (state.cgMaskContext, effective_antialiasing);
+
     if (num_glyphs > ARRAY_LENGTH (glyphs_static)) {
  cg_glyphs = (CGGlyph*) _cairo_malloc_ab (num_glyphs, sizeof (CGGlyph) + sizeof (CGPoint));
  if (unlikely (cg_glyphs == NULL)) {
diff --git a/gfx/cairo/cairo/src/cairo-surface-private.h b/gfx/cairo/cairo/src/cairo-surface-private.h
--- a/gfx/cairo/cairo/src/cairo-surface-private.h
+++ b/gfx/cairo/cairo/src/cairo-surface-private.h
@@ -71,6 +71,7 @@ struct _cairo_surface {
     unsigned has_font_options : 1;
     unsigned owns_device : 1;
     unsigned is_vector : 1;
+    unsigned permit_subpixel_antialiasing : 1;
 
     cairo_user_data_array_t user_data;
     cairo_user_data_array_t mime_data;
diff --git a/gfx/cairo/cairo/src/cairo-surface.c b/gfx/cairo/cairo/src/cairo-surface.c
--- a/gfx/cairo/cairo/src/cairo-surface.c
+++ b/gfx/cairo/cairo/src/cairo-surface.c
@@ -114,6 +114,7 @@ const cairo_surface_t name = {     \
     FALSE,    /* has_font_options */ \
     FALSE,    /* owns_device */ \
     FALSE,                              /* is_vector */ \
+    FALSE,                              /* permit_subpixel_antialiasing */ \
     { 0, 0, 0, NULL, },   /* user_data */  \
     { 0, 0, 0, NULL, },   /* mime_data */         \
     { 1.0, 0.0, 0.0, 1.0, 0.0, 0.0 },   /* device_transform */ \
@@ -426,6 +427,7 @@ void
     surface->serial = 0;
     surface->damage = NULL;
     surface->owns_device = (device != NULL);
+    surface->permit_subpixel_antialiasing = TRUE;
 
     _cairo_user_data_array_init (&surface->user_data);
     _cairo_user_data_array_init (&surface->mime_data);
@@ -461,6 +463,8 @@ static void
  _cairo_font_options_fini (&options);
     }
 
+    surface->permit_subpixel_antialiasing = other->permit_subpixel_antialiasing;
+
     cairo_surface_set_fallback_resolution (surface,
         other->x_fallback_resolution,
         other->y_fallback_resolution);
@@ -1626,6 +1630,51 @@ cairo_surface_get_font_options (cairo_su
     _cairo_font_options_init_copy (options, &surface->font_options);
 }
 
+/**
+ * cairo_surface_set_subpixel_antialiasing:
+ * @surface: a #cairo_surface_t
+ *
+ * Sets whether the surface permits subpixel antialiasing. By default,
+ * surfaces permit subpixel antialiasing.
+ *
+ * Enabling subpixel antialiasing for CONTENT_COLOR_ALPHA surfaces generally
+ * requires that the pixels in the areas under a subpixel antialiasing
+ * operation already be opaque.
+ **/
+void
+cairo_surface_set_subpixel_antialiasing (cairo_surface_t *surface,
+                                         cairo_subpixel_antialiasing_t enabled)
+{
+    if (surface->status)
+        return;
+
+    if (surface->finished) {
+        _cairo_surface_set_error (surface, CAIRO_STATUS_SURFACE_FINISHED);
+        return;
+    }
+
+    surface->permit_subpixel_antialiasing =
+        enabled == CAIRO_SUBPIXEL_ANTIALIASING_ENABLED;
+}
+
+/**
+ * cairo_surface_get_subpixel_antialiasing:
+ * @surface: a #cairo_surface_t
+ *
+ * Gets whether the surface supports subpixel antialiasing. By default,
+ * CAIRO_CONTENT_COLOR surfaces support subpixel antialiasing but other
+ * surfaces do not.
+ **/
+cairo_subpixel_antialiasing_t
+cairo_surface_get_subpixel_antialiasing (cairo_surface_t *surface)
+{
+    if (surface->status)
+        return CAIRO_SUBPIXEL_ANTIALIASING_DISABLED;
+
+    return surface->permit_subpixel_antialiasing ?
+        CAIRO_SUBPIXEL_ANTIALIASING_ENABLED : CAIRO_SUBPIXEL_ANTIALIASING_DISABLED;
+}
+
 cairo_status_t
 _cairo_surface_flush (cairo_surface_t *surface, unsigned flags)
 {
diff --git a/gfx/cairo/cairo/src/cairo-xcb-private.h b/gfx/cairo/cairo/src/cairo-xcb-private.h
--- a/gfx/cairo/cairo/src/cairo-xcb-private.h
+++ b/gfx/cairo/cairo/src/cairo-xcb-private.h
@@ -443,7 +443,8 @@ cairo_private cairo_int_status_t
          cairo_scaled_font_t          *scaled_font,
          cairo_glyph_t                *glyphs,
          int                           num_glyphs,
-         cairo_bool_t                  overlap);
+         cairo_bool_t                  overlap,
+         cairo_bool_t                  permit_subpixel_antialiasing);
 cairo_private void
 _cairo_xcb_surface_scaled_font_fini (cairo_scaled_font_t *scaled_font);
 
diff --git a/gfx/cairo/cairo/src/cairo-xcb-surface-render.c b/gfx/cairo/cairo/src/cairo-xcb-surface-render.c
--- a/gfx/cairo/cairo/src/cairo-xcb-surface-render.c
+++ b/gfx/cairo/cairo/src/cairo-xcb-surface-render.c
@@ -4814,7 +4814,8 @@ cairo_int_status_t
          cairo_scaled_font_t          *scaled_font,
          cairo_glyph_t                *glyphs,
          int                           num_glyphs,
-         cairo_bool_t                  overlap)
+         cairo_bool_t                  overlap,
+         cairo_bool_t                  permit_subpixel_antialiasing)
 {
     cairo_xcb_surface_t *surface = (cairo_xcb_surface_t *) composite->surface;
     cairo_operator_t op = composite->op;
diff --git a/gfx/cairo/cairo/src/cairo-xcb-surface.c b/gfx/cairo/cairo/src/cairo-xcb-surface.c
--- a/gfx/cairo/cairo/src/cairo-xcb-surface.c
+++ b/gfx/cairo/cairo/src/cairo-xcb-surface.c
@@ -906,7 +906,8 @@ static cairo_int_status_t
            cairo_scaled_font_t          *scaled_font,
            cairo_glyph_t                *glyphs,
            int                           num_glyphs,
-           cairo_bool_t                  overlap)
+           cairo_bool_t                  overlap,
+           cairo_bool_t                  permit_subpixel_antialiasing)
 {
     cairo_xcb_surface_t *surface = (cairo_xcb_surface_t *) extents->surface;
     cairo_surface_t *fallback = _cairo_xcb_surface_fallback (surface, extents);
diff --git a/gfx/cairo/cairo/src/cairo.h b/gfx/cairo/cairo/src/cairo.h
--- a/gfx/cairo/cairo/src/cairo.h
+++ b/gfx/cairo/cairo/src/cairo.h
@@ -2737,6 +2737,26 @@ cairo_surface_show_page (cairo_surface_t
 cairo_public cairo_bool_t
 cairo_surface_has_show_text_glyphs (cairo_surface_t *surface);
 
+/**
+ * _cairo_subpixel_antialiasing_t:
+ * @CAIRO_SUBPIXEL_ANTIALIASING_ENABLED: subpixel antialiasing is enabled
+ * for this surface.
+ * @CAIRO_SUBPIXEL_ANTIALIASING_DISABLED: subpixel antialiasing is disabled
+ * for this surface.
+ */
+typedef enum _cairo_subpixel_antialiasing_t {
+    CAIRO_SUBPIXEL_ANTIALIASING_ENABLED,
+    CAIRO_SUBPIXEL_ANTIALIASING_DISABLED
+} cairo_subpixel_antialiasing_t;
+
+cairo_public void
+cairo_surface_set_subpixel_antialiasing (cairo_surface_t *surface,
+                                         cairo_subpixel_antialiasing_t enabled);
+
+cairo_public cairo_subpixel_antialiasing_t
+cairo_surface_get_subpixel_antialiasing (cairo_surface_t *surface);
+
+
 /* Image-surface functions */
 
 cairo_public cairo_surface_t *

[ Dauer der Verarbeitung: 0.23 Sekunden  (vorverarbeitet)  ]