• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "content/renderer/render_view_impl.h"
6 
7 #include "content/public/common/renderer_preferences.h"
8 #include "third_party/WebKit/public/web/linux/WebFontRendering.h"
9 
10 using blink::WebFontRendering;
11 
12 namespace content {
13 
RendererPreferencesToSkiaHinting(const RendererPreferences & prefs)14 static SkPaint::Hinting RendererPreferencesToSkiaHinting(
15     const RendererPreferences& prefs) {
16   if (!prefs.should_antialias_text) {
17     // When anti-aliasing is off, GTK maps all non-zero hinting settings to
18     // 'Normal' hinting so we do the same. Otherwise, folks who have 'Slight'
19     // hinting selected will see readable text in everything expect Chromium.
20     switch (prefs.hinting) {
21       case RENDERER_PREFERENCES_HINTING_NONE:
22         return SkPaint::kNo_Hinting;
23       case RENDERER_PREFERENCES_HINTING_SYSTEM_DEFAULT:
24       case RENDERER_PREFERENCES_HINTING_SLIGHT:
25       case RENDERER_PREFERENCES_HINTING_MEDIUM:
26       case RENDERER_PREFERENCES_HINTING_FULL:
27         return SkPaint::kNormal_Hinting;
28       default:
29         NOTREACHED();
30         return SkPaint::kNormal_Hinting;
31     }
32   }
33 
34   switch (prefs.hinting) {
35   case RENDERER_PREFERENCES_HINTING_SYSTEM_DEFAULT:
36     return SkPaint::kNormal_Hinting;
37   case RENDERER_PREFERENCES_HINTING_NONE:
38     return SkPaint::kNo_Hinting;
39   case RENDERER_PREFERENCES_HINTING_SLIGHT:
40     return SkPaint::kSlight_Hinting;
41   case RENDERER_PREFERENCES_HINTING_MEDIUM:
42     return SkPaint::kNormal_Hinting;
43   case RENDERER_PREFERENCES_HINTING_FULL:
44     return SkPaint::kFull_Hinting;
45   default:
46     NOTREACHED();
47     return SkPaint::kNormal_Hinting;
48   }
49 }
50 
RendererPreferencesToSkiaLCDOrder(RendererPreferencesSubpixelRenderingEnum subpixel)51 static SkFontHost::LCDOrder RendererPreferencesToSkiaLCDOrder(
52     RendererPreferencesSubpixelRenderingEnum subpixel) {
53   switch (subpixel) {
54   case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_SYSTEM_DEFAULT:
55   case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_NONE:
56   case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_RGB:
57   case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VRGB:
58     return SkFontHost::kRGB_LCDOrder;
59   case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_BGR:
60   case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VBGR:
61     return SkFontHost::kBGR_LCDOrder;
62   default:
63     NOTREACHED();
64     return SkFontHost::kRGB_LCDOrder;
65   }
66 }
67 
68 static SkFontHost::LCDOrientation
RendererPreferencesToSkiaLCDOrientation(RendererPreferencesSubpixelRenderingEnum subpixel)69     RendererPreferencesToSkiaLCDOrientation(
70         RendererPreferencesSubpixelRenderingEnum subpixel) {
71   switch (subpixel) {
72   case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_SYSTEM_DEFAULT:
73   case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_NONE:
74   case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_RGB:
75   case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_BGR:
76     return SkFontHost::kHorizontal_LCDOrientation;
77   case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VRGB:
78   case RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VBGR:
79     return SkFontHost::kVertical_LCDOrientation;
80   default:
81     NOTREACHED();
82     return SkFontHost::kHorizontal_LCDOrientation;
83   }
84 }
85 
RendererPreferencesToAntiAliasFlag(const RendererPreferences & prefs)86 static bool RendererPreferencesToAntiAliasFlag(
87     const RendererPreferences& prefs) {
88   return prefs.should_antialias_text;
89 }
90 
RendererPreferencesToSubpixelRenderingFlag(const RendererPreferences & prefs)91 static bool RendererPreferencesToSubpixelRenderingFlag(
92     const RendererPreferences& prefs) {
93   if (prefs.subpixel_rendering !=
94         RENDERER_PREFERENCES_SUBPIXEL_RENDERING_SYSTEM_DEFAULT &&
95       prefs.subpixel_rendering !=
96         RENDERER_PREFERENCES_SUBPIXEL_RENDERING_NONE) {
97     return true;
98   }
99   return false;
100 }
101 
UpdateFontRenderingFromRendererPrefs()102 void RenderViewImpl::UpdateFontRenderingFromRendererPrefs() {
103   const RendererPreferences& prefs = renderer_preferences_;
104   WebFontRendering::setHinting(RendererPreferencesToSkiaHinting(prefs));
105   WebFontRendering::setAutoHint(prefs.use_autohinter);
106   WebFontRendering::setUseBitmaps(prefs.use_bitmaps);
107   WebFontRendering::setLCDOrder(
108       RendererPreferencesToSkiaLCDOrder(prefs.subpixel_rendering));
109   WebFontRendering::setLCDOrientation(
110       RendererPreferencesToSkiaLCDOrientation(prefs.subpixel_rendering));
111   WebFontRendering::setAntiAlias(RendererPreferencesToAntiAliasFlag(prefs));
112   WebFontRendering::setSubpixelRendering(
113       RendererPreferencesToSubpixelRenderingFlag(prefs));
114   WebFontRendering::setSubpixelPositioning(prefs.use_subpixel_positioning);
115 }
116 
117 }  // namespace content
118