OLD | NEW |
| (Empty) |
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 #ifndef UI_GFX_PLATFORM_FONT_PANGO_H_ | |
6 #define UI_GFX_PLATFORM_FONT_PANGO_H_ | |
7 | |
8 #include <string> | |
9 | |
10 #include "base/compiler_specific.h" | |
11 #include "base/memory/scoped_ptr.h" | |
12 #include "skia/ext/refptr.h" | |
13 #include "third_party/skia/include/core/SkRefCnt.h" | |
14 #include "ui/gfx/font_render_params.h" | |
15 #include "ui/gfx/platform_font.h" | |
16 | |
17 class SkTypeface; | |
18 class SkPaint; | |
19 | |
20 namespace gfx { | |
21 | |
22 class GFX_EXPORT PlatformFontPango : public PlatformFont { | |
23 public: | |
24 PlatformFontPango(); | |
25 explicit PlatformFontPango(NativeFont native_font); | |
26 PlatformFontPango(const std::string& font_name, int font_size_pixels); | |
27 | |
28 // Converts |gfx_font| to a new pango font. Free the returned font with | |
29 // pango_font_description_free(). | |
30 static PangoFontDescription* PangoFontFromGfxFont(const gfx::Font& gfx_font); | |
31 | |
32 // Resets and reloads the cached system font used by the default constructor. | |
33 // This function is useful when the system font has changed, for example, when | |
34 // the locale has changed. | |
35 static void ReloadDefaultFont(); | |
36 | |
37 #if defined(OS_CHROMEOS) | |
38 // Sets the default font. |font_description| is a Pango font description that | |
39 // will be passed to pango_font_description_from_string(). | |
40 static void SetDefaultFontDescription(const std::string& font_description); | |
41 #endif | |
42 | |
43 // Overridden from PlatformFont: | |
44 virtual Font DeriveFont(int size_delta, int style) const override; | |
45 virtual int GetHeight() const override; | |
46 virtual int GetBaseline() const override; | |
47 virtual int GetCapHeight() const override; | |
48 virtual int GetExpectedTextWidth(int length) const override; | |
49 virtual int GetStyle() const override; | |
50 virtual std::string GetFontName() const override; | |
51 virtual std::string GetActualFontNameForTesting() const override; | |
52 virtual int GetFontSize() const override; | |
53 virtual const FontRenderParams& GetFontRenderParams() const override; | |
54 virtual NativeFont GetNativeFont() const override; | |
55 | |
56 private: | |
57 // Create a new instance of this object with the specified properties. Called | |
58 // from DeriveFont. | |
59 PlatformFontPango(const skia::RefPtr<SkTypeface>& typeface, | |
60 const std::string& name, | |
61 int size_pixels, | |
62 int style, | |
63 const FontRenderParams& params); | |
64 virtual ~PlatformFontPango(); | |
65 | |
66 // Initializes this object based on the passed-in details. If |typeface| is | |
67 // empty, a new typeface will be loaded. | |
68 void InitFromDetails( | |
69 const skia::RefPtr<SkTypeface>& typeface, | |
70 const std::string& font_family, | |
71 int font_size_pixels, | |
72 int style, | |
73 const FontRenderParams& params); | |
74 | |
75 // Initializes this object as a copy of another PlatformFontPango. | |
76 void InitFromPlatformFont(const PlatformFontPango* other); | |
77 | |
78 // Potentially slow call to get pango metrics (average width). | |
79 void InitPangoMetrics(); | |
80 | |
81 // Setup a Skia context to use the current typeface. | |
82 void PaintSetup(SkPaint* paint) const; | |
83 | |
84 // Make |this| a copy of |other|. | |
85 void CopyFont(const Font& other); | |
86 | |
87 // The average width of a character, initialized and cached if needed. | |
88 double GetAverageWidth() const; | |
89 | |
90 skia::RefPtr<SkTypeface> typeface_; | |
91 | |
92 // Additional information about the face. | |
93 // Skia actually expects a family name and not a font name. | |
94 std::string font_family_; | |
95 int font_size_pixels_; | |
96 int style_; | |
97 | |
98 // Information describing how the font should be rendered. | |
99 FontRenderParams font_render_params_; | |
100 | |
101 // Cached metrics, generated at construction. | |
102 int ascent_pixels_; | |
103 int height_pixels_; | |
104 int cap_height_pixels_; | |
105 | |
106 // The pango metrics are much more expensive so we wait until we need them | |
107 // to compute them. | |
108 bool pango_metrics_inited_; | |
109 double average_width_pixels_; | |
110 | |
111 // The default font, used for the default constructor. | |
112 static Font* default_font_; | |
113 | |
114 #if defined(OS_CHROMEOS) | |
115 // A Pango font description. | |
116 static std::string* default_font_description_; | |
117 #endif | |
118 | |
119 DISALLOW_COPY_AND_ASSIGN(PlatformFontPango); | |
120 }; | |
121 | |
122 } // namespace gfx | |
123 | |
124 #endif // UI_GFX_PLATFORM_FONT_PANGO_H_ | |
OLD | NEW |