| // Copyright (c) 2012 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_PLATFORM_FONT_SKIA_H_ |
| #define UI_GFX_PLATFORM_FONT_SKIA_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/compiler_specific.h" |
| #include "base/macros.h" |
| #include "build/build_config.h" |
| #include "third_party/skia/include/core/SkTypeface.h" |
| #include "ui/gfx/font_render_params.h" |
| #include "ui/gfx/platform_font.h" |
| |
| namespace gfx { |
| |
| class GFX_EXPORT PlatformFontSkia : public PlatformFont { |
| public: |
| // TODO(derat): Get rid of the default constructor in favor of using |
| // FontList (which also has the concept of a default font but may contain |
| // multiple font families) everywhere. See http://crbug.com/398885#c16. |
| PlatformFontSkia(); |
| PlatformFontSkia(const std::string& font_name, int font_size_pixels); |
| |
| // Wraps the provided SkTypeface without triggering a font rematch. |
| PlatformFontSkia(sk_sp<SkTypeface> typeface, |
| int font_size_pixels, |
| const absl::optional<FontRenderParams>& params); |
| |
| PlatformFontSkia(const PlatformFontSkia&) = delete; |
| PlatformFontSkia& operator=(const PlatformFontSkia&) = delete; |
| |
| // Initials the default PlatformFont. Returns true if this is successful, or |
| // false if fonts resources are not available. If this returns false, the |
| // calling service should shut down. |
| static bool InitDefaultFont(); |
| |
| // Resets and reloads the cached system font used by the default constructor. |
| // This function is useful when the system font has changed, for example, when |
| // the locale has changed. |
| static void ReloadDefaultFont(); |
| |
| // Sets the default font. |font_description| is a FontList font description; |
| // only the first family will be used. |
| // TODO(sergeyu): Remove this function. Currently it is used only on ChromeOS |
| // to set the default font to the one loaded from resources. |
| // |
| static void SetDefaultFontDescription(const std::string& font_description); |
| |
| // Overridden from PlatformFont: |
| Font DeriveFont(int size_delta, |
| int style, |
| Font::Weight weight) const override; |
| int GetHeight() override; |
| Font::Weight GetWeight() const override; |
| int GetBaseline() override; |
| int GetCapHeight() override; |
| int GetExpectedTextWidth(int length) override; |
| int GetStyle() const override; |
| const std::string& GetFontName() const override; |
| std::string GetActualFontName() const override; |
| int GetFontSize() const override; |
| const FontRenderParams& GetFontRenderParams() override; |
| sk_sp<SkTypeface> GetNativeSkTypeface() const override; |
| |
| private: |
| // Create a new instance of this object with the specified properties. Called |
| // from DeriveFont. |
| PlatformFontSkia(sk_sp<SkTypeface> typeface, |
| const std::string& family, |
| int size_pixels, |
| int style, |
| Font::Weight weight, |
| const FontRenderParams& params); |
| ~PlatformFontSkia() override; |
| |
| // Initializes this object based on the passed-in details. If |typeface| is |
| // empty, a new typeface will be loaded. |
| void InitFromDetails(sk_sp<SkTypeface> typeface, |
| const std::string& font_family, |
| int font_size_pixels, |
| int style, |
| Font::Weight weight, |
| const FontRenderParams& params); |
| |
| // Initializes this object as a copy of another PlatformFontSkia. |
| void InitFromPlatformFont(const PlatformFontSkia* other); |
| |
| // Computes the metrics if they have not yet been computed. |
| void ComputeMetricsIfNecessary(); |
| |
| sk_sp<SkTypeface> typeface_; |
| |
| // Additional information about the face. |
| // Skia actually expects a family name and not a font name. |
| std::string font_family_; |
| int font_size_pixels_; |
| int style_; |
| float device_scale_factor_; |
| |
| // Information describing how the font should be rendered. |
| FontRenderParams font_render_params_; |
| |
| // Cached metrics, generated on demand. |
| bool metrics_need_computation_ = true; |
| int ascent_pixels_; |
| int height_pixels_; |
| int cap_height_pixels_; |
| double average_width_pixels_; |
| Font::Weight weight_; |
| |
| // A font description string of the format used by FontList. |
| static std::string* default_font_description_; |
| }; |
| |
| } // namespace gfx |
| |
| #endif // UI_GFX_PLATFORM_FONT_SKIA_H_ |