diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-13 16:43:03 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-13 16:43:03 +0000 |
commit | c6ac841f51c0b884b38e917ac30b1dfde0dc43a7 (patch) | |
tree | 2b490ffa6795f72e7232d658b766785f0de64e38 /gfx/platform_font_gtk.h | |
parent | 6b32b95cff99ee72fd7824237ae5070263e5c496 (diff) | |
download | chromium_src-c6ac841f51c0b884b38e917ac30b1dfde0dc43a7.zip chromium_src-c6ac841f51c0b884b38e917ac30b1dfde0dc43a7.tar.gz chromium_src-c6ac841f51c0b884b38e917ac30b1dfde0dc43a7.tar.bz2 |
Rework gfx::Font by moving platform-specific code into inner classes.
gfx::Font is a platform-neutral API shim that exists as a wrapper object to allow for the creation and lifetime of gfx::Font objects to remain consistent with past usage.
gfx::PlatformFont is an interface implemented by the platform-specific inner classes (gfx::PlatformFontWin,Mac,Gtk).
BUG=none
TEST=existing unittests
Review URL: http://codereview.chromium.org/3083022
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@56040 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gfx/platform_font_gtk.h')
-rw-r--r-- | gfx/platform_font_gtk.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/gfx/platform_font_gtk.h b/gfx/platform_font_gtk.h new file mode 100644 index 0000000..3c507fb --- /dev/null +++ b/gfx/platform_font_gtk.h @@ -0,0 +1,111 @@ +// Copyright (c) 2010 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 GFX_PLATFORM_FONT_GTK_ +#define GFX_PLATFORM_FONT_GTK_ +#pragma once + +#include "base/scoped_ptr.h" +#include "gfx/platform_font.h" +#include "third_party/skia/include/core/SkRefCnt.h" + +class SkTypeface; +class SkPaint; + +namespace gfx { + +class PlatformFontGtk : public PlatformFont { + public: + PlatformFontGtk(); + explicit PlatformFontGtk(const Font& other); + explicit PlatformFontGtk(NativeFont native_font); + PlatformFontGtk(const std::wstring& font_name, + int font_size); + + // Converts |gfx_font| to a new pango font. Free the returned font with + // pango_font_description_free(). + static PangoFontDescription* PangoFontFromGfxFont(const gfx::Font& gfx_font); + + // Position as an offset from the height of the drawn text, used to draw + // an underline. This is a negative number, so the underline would be + // drawn at y + height + underline_position; + double underline_position() const; + // The thickness to draw the underline. + double underline_thickness() const; + + // Overridden from PlatformFont: + virtual Font DeriveFont(int size_delta, int style) const; + virtual int GetHeight() const; + virtual int GetBaseline() const; + virtual int GetAverageCharacterWidth() const; + virtual int GetStringWidth(const std::wstring& text) const; + virtual int GetExpectedTextWidth(int length) const; + virtual int GetStyle() const; + virtual const std::wstring& GetFontName() const; + virtual int GetFontSize() const; + virtual NativeFont GetNativeFont() const; + + private: + // Create a new instance of this object with the specified properties. Called + // from DeriveFont. + PlatformFontGtk(SkTypeface* typeface, + const std::wstring& name, + int size, + int style); + virtual ~PlatformFontGtk() {} + + // Initialize this object. + void InitWithNameAndSize(const std::wstring& font_name, int font_size); + void InitWithTypefaceNameSizeAndStyle(SkTypeface* typeface, + const std::wstring& name, + int size, + int style); + void InitFromPlatformFont(const PlatformFontGtk* other); + + // Potentially slow call to get pango metrics (average width, underline info). + void InitPangoMetrics(); + + // Setup a Skia context to use the current typeface + void PaintSetup(SkPaint* paint) const; + + // Make |this| a copy of |other|. + void CopyFont(const Font& other); + + // Return the scale factor for fonts that account for DPI. + static float GetPangoScaleFactor(); + + // The average width of a character, initialized and cached if needed. + double GetAverageWidth() const; + + // These two both point to the same SkTypeface. We use the SkAutoUnref to + // handle the reference counting, but without @typeface_ we would have to + // cast the SkRefCnt from @typeface_helper_ every time. + scoped_ptr<SkAutoUnref> typeface_helper_; + SkTypeface *typeface_; + + // Additional information about the face + // Skia actually expects a family name and not a font name. + std::wstring font_family_; + int font_size_; + int style_; + + // Cached metrics, generated at construction + int height_; + int ascent_; + + // The pango metrics are much more expensive so we wait until we need them + // to compute them. + bool pango_metrics_inited_; + double average_width_; + double underline_position_; + double underline_thickness_; + + // The default font, used for the default constructor. + static Font* default_font_; +}; + +} // namespace gfx + +#endif // GFX_PLATFORM_FONT_GTK_ + |