tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ScaledFontFontconfig.h (2764B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef MOZILLA_GFX_SCALEDFONTFONTCONFIG_H_
      8 #define MOZILLA_GFX_SCALEDFONTFONTCONFIG_H_
      9 
     10 #include "ScaledFontBase.h"
     11 
     12 #include <cairo-ft.h>
     13 
     14 namespace mozilla {
     15 namespace gfx {
     16 
     17 class NativeFontResourceFontconfig;
     18 class UnscaledFontFontconfig;
     19 
     20 class ScaledFontFontconfig : public ScaledFontBase {
     21 public:
     22  MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(ScaledFontFontconfig, override)
     23  ScaledFontFontconfig(RefPtr<SharedFTFace>&& aFace, FcPattern* aPattern,
     24                       const RefPtr<UnscaledFont>& aUnscaledFont, Float aSize);
     25 
     26  FontType GetType() const override { return FontType::FONTCONFIG; }
     27 
     28  SkTypeface* CreateSkTypeface() override;
     29  void SetupSkFontDrawOptions(SkFont& aFont) override;
     30 
     31  AntialiasMode GetDefaultAAMode() override;
     32 
     33  bool UseSubpixelPosition() const override;
     34 
     35  bool CanSerialize() override { return true; }
     36 
     37  bool MayUseBitmaps() override;
     38 
     39  bool GetFontInstanceData(FontInstanceDataOutput aCb, void* aBaton) override;
     40 
     41  bool GetWRFontInstanceOptions(
     42      Maybe<wr::FontInstanceOptions>* aOutOptions,
     43      Maybe<wr::FontInstancePlatformOptions>* aOutPlatformOptions,
     44      std::vector<FontVariation>* aOutVariations) override;
     45 
     46  bool HasVariationSettings() override;
     47 
     48 protected:
     49  cairo_font_face_t* CreateCairoFontFace(
     50      cairo_font_options_t* aFontOptions) override;
     51 
     52 private:
     53  friend class NativeFontResourceFontconfig;
     54  friend class UnscaledFontFontconfig;
     55 
     56  struct InstanceData {
     57    enum {
     58      AUTOHINT = 1 << 0,
     59      EMBEDDED_BITMAP = 1 << 1,
     60      EMBOLDEN = 1 << 2,
     61      HINT_METRICS = 1 << 3,
     62      LCD_VERTICAL = 1 << 4,
     63      SUBPIXEL_BGR = 1 << 5,
     64    };
     65 
     66    explicit InstanceData(FcPattern* aPattern);
     67    InstanceData(const wr::FontInstanceOptions* aOptions,
     68                 const wr::FontInstancePlatformOptions* aPlatformOptions);
     69 
     70    void SetupFontOptions(cairo_font_options_t* aFontOptions,
     71                          int* aOutLoadFlags,
     72                          unsigned int* aOutSynthFlags) const;
     73 
     74    uint8_t mFlags;
     75    AntialiasMode mAntialias;
     76    FontHinting mHinting;
     77    uint8_t mLcdFilter;
     78  };
     79 
     80  ScaledFontFontconfig(RefPtr<SharedFTFace>&& aFace,
     81                       const InstanceData& aInstanceData,
     82                       const RefPtr<UnscaledFont>& aUnscaledFont, Float aSize);
     83 
     84  RefPtr<SharedFTFace> mFace;
     85  InstanceData mInstanceData;
     86 };
     87 
     88 }  // namespace gfx
     89 }  // namespace mozilla
     90 
     91 #endif /* MOZILLA_GFX_SCALEDFONTFONTCONFIG_H_ */