151daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman/* 251daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman * Copyright 2014 Google Inc. 351daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman * 451daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman * Use of this source code is governed by a BSD-style license that can be 551daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman * found in the LICENSE file. 651daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman */ 751daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman 851daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman#ifndef SkScalarContext_win_dw_DEFINED 951daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman#define SkScalarContext_win_dw_DEFINED 1051daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman 1151daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman#include "SkScalar.h" 1251daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman#include "SkScalerContext.h" 1351daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman#include "SkTypeface_win_dw.h" 1451daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman#include "SkTypes.h" 1551daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman 1651daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman#include <dwrite.h> 1773c7c3c2346033e0b5df123f1a6b488015443a55bungeman#include <dwrite_2.h> 1851daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman 19b69d0e0ac45e13f667bc11a937dcb547072bc93dherbclass SkGlyph; 2051daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungemanclass SkDescriptor; 2151daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman 2251daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungemanclass SkScalerContext_DW : public SkScalerContext { 2351daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungemanpublic: 247cfd46aebda7b7d2b88e73621ed0d1be7244c2cabungeman SkScalerContext_DW(sk_sp<DWriteFontTypeface>, 257cfd46aebda7b7d2b88e73621ed0d1be7244c2cabungeman const SkScalerContextEffects&, 267cfd46aebda7b7d2b88e73621ed0d1be7244c2cabungeman const SkDescriptor*); 271ef80942b3b2414c862eb1e9ae301442b447c089Chris Dalton ~SkScalerContext_DW() override; 2851daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman 2951daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungemanprotected: 3036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein unsigned generateGlyphCount() override; 3136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein uint16_t generateCharToGlyph(SkUnichar uni) override; 3236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void generateAdvance(SkGlyph* glyph) override; 3336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void generateMetrics(SkGlyph* glyph) override; 3436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void generateImage(const SkGlyph& glyph) override; 356e9ac12495f3b64b6ea8860bb9f99c43cd33aa08Ben Wagner void generatePath(SkGlyphID glyph, SkPath* path) override; 3636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void generateFontMetrics(SkPaint::FontMetrics*) override; 3751daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman 3851daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungemanprivate: 39b2f7fce9e034c3b6749e75a129e7836df3529706Ben Wagner const void* drawDWMask(const SkGlyph& glyph, 40b2f7fce9e034c3b6749e75a129e7836df3529706Ben Wagner DWRITE_RENDERING_MODE renderingMode, 41b2f7fce9e034c3b6749e75a129e7836df3529706Ben Wagner DWRITE_TEXTURE_TYPE textureType); 42b2f7fce9e034c3b6749e75a129e7836df3529706Ben Wagner 43683a37692bc67ef1144922b73a1e871e7e1e842ebungeman HRESULT getBoundingBox(SkGlyph* glyph, 44683a37692bc67ef1144922b73a1e871e7e1e842ebungeman DWRITE_RENDERING_MODE renderingMode, 45683a37692bc67ef1144922b73a1e871e7e1e842ebungeman DWRITE_TEXTURE_TYPE textureType, 46683a37692bc67ef1144922b73a1e871e7e1e842ebungeman RECT* bbox); 4751daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman 48c4b091543b4082fd1a2f356ef3b478073c5f9418kulshin bool isColorGlyph(const SkGlyph& glyph); 49c4b091543b4082fd1a2f356ef3b478073c5f9418kulshin 507cfd46aebda7b7d2b88e73621ed0d1be7244c2cabungeman DWriteFontTypeface* getDWriteTypeface() { 517cfd46aebda7b7d2b88e73621ed0d1be7244c2cabungeman return static_cast<DWriteFontTypeface*>(this->getTypeface()); 527cfd46aebda7b7d2b88e73621ed0d1be7244c2cabungeman } 537cfd46aebda7b7d2b88e73621ed0d1be7244c2cabungeman 54c4b091543b4082fd1a2f356ef3b478073c5f9418kulshin bool getColorGlyphRun(const SkGlyph& glyph, IDWriteColorGlyphRunEnumerator** colorGlyph); 55c4b091543b4082fd1a2f356ef3b478073c5f9418kulshin 56c4b091543b4082fd1a2f356ef3b478073c5f9418kulshin void generateColorGlyphImage(const SkGlyph& glyph); 57c4b091543b4082fd1a2f356ef3b478073c5f9418kulshin 5851daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman SkTDArray<uint8_t> fBits; 5951daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman /** The total matrix without the text height scale. */ 6051daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman SkMatrix fSkXform; 6151daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman /** The total matrix without the text height scale. */ 6251daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman DWRITE_MATRIX fXform; 6351daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman /** The text size to render with. */ 6451daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman SkScalar fTextSizeRender; 6551daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman /** The text size to measure with. */ 6651daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman SkScalar fTextSizeMeasure; 6751daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman int fGlyphCount; 6851daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman DWRITE_RENDERING_MODE fRenderingMode; 6951daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman DWRITE_TEXTURE_TYPE fTextureType; 7051daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman DWRITE_MEASURING_MODE fMeasuringMode; 7122253064ceee1dd9fcd26b7d6d69505cba76bb33Ben Wagner DWRITE_TEXT_ANTIALIAS_MODE fAntiAliasMode; 7222253064ceee1dd9fcd26b7d6d69505cba76bb33Ben Wagner DWRITE_GRID_FIT_MODE fGridFitMode; 73bd770d619553a88eeaa64ff29082f62db5c9b4d2bungeman bool fIsColorFont; 7451daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman}; 7551daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman 7651daa25a2b16bca578e78b7ea1e5815b9abb8b0bbungeman#endif 77