// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_GFX_FONT_RENDER_PARAMS_H_ #define UI_GFX_FONT_RENDER_PARAMS_H_ #include #include #include "build/build_config.h" #include "device/vr/buildflags/buildflags.h" #include "third_party/skia/include/core/SkSurfaceProps.h" #include "ui/gfx/font.h" #include "ui/gfx/gfx_export.h" namespace gfx { // A collection of parameters describing how text should be rendered on Linux. struct GFX_EXPORT FontRenderParams { bool operator==(const FontRenderParams& other) const { return antialiasing == other.antialiasing && subpixel_positioning == other.subpixel_positioning && autohinter == other.autohinter && use_bitmaps == other.use_bitmaps && hinting == other.hinting && subpixel_rendering == other.subpixel_rendering; } // Level of hinting to be applied. enum Hinting { HINTING_NONE = 0, HINTING_SLIGHT, HINTING_MEDIUM, HINTING_FULL, HINTING_MAX = HINTING_FULL, }; // Different subpixel orders to be used for subpixel rendering. enum SubpixelRendering { SUBPIXEL_RENDERING_NONE = 0, SUBPIXEL_RENDERING_RGB, SUBPIXEL_RENDERING_BGR, SUBPIXEL_RENDERING_VRGB, SUBPIXEL_RENDERING_VBGR, SUBPIXEL_RENDERING_MAX = SUBPIXEL_RENDERING_VBGR, }; // Antialiasing (grayscale if |subpixel_rendering| is SUBPIXEL_RENDERING_NONE // and RGBA otherwise). bool antialiasing = true; // Should subpixel positioning (i.e. fractional X positions for glyphs) be // used? // TODO(derat): Remove this; we don't set it in the browser and mostly ignore // it in Blink: http://crbug.com/396659 bool subpixel_positioning = true; // Should FreeType's autohinter be used (as opposed to Freetype's bytecode // interpreter, which uses fonts' own hinting instructions)? bool autohinter = false; // Should embedded bitmaps in fonts should be used? bool use_bitmaps = false; // Hinting level. Hinting hinting = HINTING_MEDIUM; // Whether subpixel rendering should be used or not, and if so, the display's // subpixel order. SubpixelRendering subpixel_rendering = SUBPIXEL_RENDERING_NONE; static SkPixelGeometry SubpixelRenderingToSkiaPixelGeometry( SubpixelRendering subpixel_rendering); }; // A query used to determine the appropriate FontRenderParams. struct GFX_EXPORT FontRenderParamsQuery { FontRenderParamsQuery(); FontRenderParamsQuery(const FontRenderParamsQuery& other); ~FontRenderParamsQuery(); bool is_empty() const { return families.empty() && pixel_size <= 0 && point_size <= 0 && style < 0; } // Requested font families, or empty if unset. std::vector families; // Font size in pixels or points, or 0 if unset. int pixel_size; int point_size; // Font::FontStyle bit field, or -1 if unset. int style; // Weight of the font. Weight::NORMAL by default. Font::Weight weight; // The device scale factor of the display, or 0 if unset. float device_scale_factor; }; // Returns the appropriate parameters for rendering the font described by // |query|. If |family_out| is non-NULL, it will be updated to contain the // recommended font family from |query.families|. GFX_EXPORT FontRenderParams GetFontRenderParams( const FontRenderParamsQuery& query, std::string* family_out); #if defined(OS_LINUX) || defined(OS_CHROMEOS) // Clears GetFontRenderParams()'s cache. Intended to be called by tests that are // changing Fontconfig's configuration. GFX_EXPORT void ClearFontRenderParamsCacheForTest(); #endif // Gets the device scale factor to query the FontRenderParams. GFX_EXPORT float GetFontRenderParamsDeviceScaleFactor(); #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS) || \ defined(OS_ANDROID) || defined(OS_FUCHSIA) // Sets the device scale factor for FontRenderParams to decide // if it should enable subpixel positioning. GFX_EXPORT void SetFontRenderParamsDeviceScaleFactor( float device_scale_factor); #endif } // namespace gfx #endif // UI_GFX_FONT_RENDER_PARAMS_H_