1 // Copyright 2014 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 #ifndef UI_GFX_FONT_RENDER_PARAMS_H_ 6 #define UI_GFX_FONT_RENDER_PARAMS_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "ui/gfx/gfx_export.h" 12 13 namespace gfx { 14 15 // A collection of parameters describing how text should be rendered on Linux. 16 struct GFX_EXPORT FontRenderParams { 17 FontRenderParams(); 18 ~FontRenderParams(); 19 20 // Level of hinting to be applied. 21 enum Hinting { 22 HINTING_NONE = 0, 23 HINTING_SLIGHT, 24 HINTING_MEDIUM, 25 HINTING_FULL, 26 }; 27 28 // Different subpixel orders to be used for subpixel rendering. 29 enum SubpixelRendering { 30 SUBPIXEL_RENDERING_NONE = 0, 31 SUBPIXEL_RENDERING_RGB, 32 SUBPIXEL_RENDERING_BGR, 33 SUBPIXEL_RENDERING_VRGB, 34 SUBPIXEL_RENDERING_VBGR, 35 }; 36 37 // Antialiasing (grayscale if |subpixel_rendering| is SUBPIXEL_RENDERING_NONE 38 // and RGBA otherwise). 39 bool antialiasing; 40 41 // Should subpixel positioning (i.e. fractional X positions for glyphs) be 42 // used? 43 // TODO(derat): Remove this; we don't set it in the browser and mostly ignore 44 // it in Blink: http://crbug.com/396659 45 bool subpixel_positioning; 46 47 // Should FreeType's autohinter be used (as opposed to Freetype's bytecode 48 // interpreter, which uses fonts' own hinting instructions)? 49 bool autohinter; 50 51 // Should embedded bitmaps in fonts should be used? 52 bool use_bitmaps; 53 54 // Hinting level. 55 Hinting hinting; 56 57 // Whether subpixel rendering should be used or not, and if so, the display's 58 // subpixel order. 59 SubpixelRendering subpixel_rendering; 60 }; 61 62 // A query used to determine the appropriate FontRenderParams. 63 struct GFX_EXPORT FontRenderParamsQuery { 64 explicit FontRenderParamsQuery(bool for_web_contents); 65 ~FontRenderParamsQuery(); 66 is_emptyFontRenderParamsQuery67 bool is_empty() const { 68 return families.empty() && pixel_size <= 0 && point_size <= 0 && style < 0; 69 } 70 71 // True if rendering text for the web. 72 // TODO(derat): Remove this once FontRenderParams::subpixel_positioning is 73 // gone: http://crbug.com/396659 74 bool for_web_contents; 75 76 // Requested font families, or empty if unset. 77 std::vector<std::string> families; 78 79 // Font size in pixels or points, or 0 if unset. 80 int pixel_size; 81 int point_size; 82 83 // gfx::Font::FontStyle bit field, or -1 if unset. 84 int style; 85 }; 86 87 // Returns the appropriate parameters for rendering the font described by 88 // |query|. If |family_out| is non-NULL, it will be updated to contain the 89 // recommended font family from |query.families|. 90 GFX_EXPORT FontRenderParams GetFontRenderParams( 91 const FontRenderParamsQuery& query, 92 std::string* family_out); 93 94 // Clears GetFontRenderParams()'s cache. Intended to be called by tests that are 95 // changing Fontconfig's configuration. 96 // TODO(derat): This is only defined for Linux, but OS_LINUX doesn't seem to be 97 // set when font_render_params_linux_unittest.cc includes this header. Figure 98 // out what's going on here. 99 GFX_EXPORT void ClearFontRenderParamsCacheForTest(); 100 101 #if defined(OS_CHROMEOS) 102 // Sets the device scale factor for FontRenderParams to decide 103 // if it should enable subpixel positioning. 104 GFX_EXPORT void SetFontRenderParamsDeviceScaleFactor( 105 float device_scale_factor); 106 #endif 107 108 } // namespace gfx 109 110 #endif // UI_GFX_FONT_RENDER_PARAMS_H_ 111