From 8223a229cdaaf1bf0c9411482d9af8c2c7f6fc86 Mon Sep 17 00:00:00 2001 From: Jonathan Kew Date: Thu, 9 Jun 2011 15:26:30 +1200 Subject: [PATCH] Bug 661471. Part 7: Let gfxDWriteFonts know whether we are honouring 'GDI classic' overrides. r=roc --- gfx/cairo/cairo/src/cairo-dwrite-font.cpp | 6 ++++++ gfx/cairo/cairo/src/cairo-dwrite-private.h | 15 ++++++++++++--- gfx/cairo/cairo/src/cairo-win32.h | 3 +++ gfx/thebes/gfxDWriteFonts.cpp | 3 ++- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/gfx/cairo/cairo/src/cairo-dwrite-font.cpp b/gfx/cairo/cairo/src/cairo-dwrite-font.cpp index 720e52ebf1f..23b5e2d7560 100644 --- a/gfx/cairo/cairo/src/cairo-dwrite-font.cpp +++ b/gfx/cairo/cairo/src/cairo-dwrite-font.cpp @@ -1107,6 +1107,12 @@ cairo_dwrite_set_cleartype_params(FLOAT gamma, FLOAT contrast, FLOAT level, DWriteFactory::SetRenderingParams(gamma, contrast, level, geometry, mode); } +int +cairo_dwrite_get_cleartype_rendering_mode() +{ + return DWriteFactory::GetClearTypeRenderingMode(); +} + cairo_int_status_t _dwrite_draw_glyphs_to_gdi_surface_gdi(cairo_win32_surface_t *surface, DWRITE_MATRIX *transform, diff --git a/gfx/cairo/cairo/src/cairo-dwrite-private.h b/gfx/cairo/cairo/src/cairo-dwrite-private.h index 6c21d32a65e..25b003a7282 100644 --- a/gfx/cairo/cairo/src/cairo-dwrite-private.h +++ b/gfx/cairo/cairo/src/cairo-dwrite-private.h @@ -110,9 +110,14 @@ public: { CreateRenderingParams(); } - IDWriteRenderingParams *params = - mode == cairo_d2d_surface_t::TEXT_RENDERING_NORMAL ? mCustomClearTypeRenderingParams : - (mode == cairo_d2d_surface_t::TEXT_RENDERING_GDI_CLASSIC ? mForceGDIClassicRenderingParams : mDefaultRenderingParams); + IDWriteRenderingParams *params; + if (mode == cairo_d2d_surface_t::TEXT_RENDERING_NO_CLEARTYPE) { + params = mDefaultRenderingParams; + } else if (mode == cairo_d2d_surface_t::TEXT_RENDERING_GDI_CLASSIC && mRenderingMode < 0) { + params = mForceGDIClassicRenderingParams; + } else { + params = mCustomClearTypeRenderingParams; + } if (params) { params->AddRef(); } @@ -145,6 +150,10 @@ public: } } + static int GetClearTypeRenderingMode() { + return mRenderingMode; + } + private: static void CreateRenderingParams(); diff --git a/gfx/cairo/cairo/src/cairo-win32.h b/gfx/cairo/cairo/src/cairo-win32.h index b84352d7378..75c03d40c4e 100644 --- a/gfx/cairo/cairo/src/cairo-win32.h +++ b/gfx/cairo/cairo/src/cairo-win32.h @@ -137,6 +137,9 @@ cairo_dwrite_scaled_font_get_force_GDI_classic(cairo_scaled_font_t *dwrite_scale void cairo_dwrite_set_cleartype_params(FLOAT gamma, FLOAT contrast, FLOAT level, int geometry, int mode); +int +cairo_dwrite_get_cleartype_rendering_mode(); + #endif /* CAIRO_HAS_DWRITE_FONT */ #if CAIRO_HAS_D2D_SURFACE diff --git a/gfx/thebes/gfxDWriteFonts.cpp b/gfx/thebes/gfxDWriteFonts.cpp index 25316ad4f67..8b2bd0af42d 100644 --- a/gfx/thebes/gfxDWriteFonts.cpp +++ b/gfx/thebes/gfxDWriteFonts.cpp @@ -694,7 +694,8 @@ bool gfxDWriteFont::GetForceGDIClassic() { return static_cast(mFontEntry.get())->GetForceGDIClassic() && - GetAdjustedSize() <= + cairo_dwrite_get_cleartype_rendering_mode() < 0 && + GetAdjustedSize() <= gfxDWriteFontList::PlatformFontList()->GetForceGDIClassicMaxFontSize(); }