Home | History | Annotate | Download | only in gfx
      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 
     67   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