5c13eab61568e9c1536a628c608f3a146d8050e6
[platform/upstream/libSkiaSharp.git] / src / ports / SkScalerContext_win_dw.h
1 /*
2  * Copyright 2014 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7
8 #ifndef SkScalarContext_win_dw_DEFINED
9 #define SkScalarContext_win_dw_DEFINED
10
11 #include "SkScalar.h"
12 #include "SkScalerContext.h"
13 #include "SkTypeface_win_dw.h"
14 #include "SkTypes.h"
15
16 #include <dwrite.h>
17
18 class SkGlyph;
19 class SkDescriptor;
20
21 class SkScalerContext_DW : public SkScalerContext {
22 public:
23     SkScalerContext_DW(DWriteFontTypeface*, const SkDescriptor* desc);
24     virtual ~SkScalerContext_DW();
25
26 protected:
27     unsigned generateGlyphCount() SK_OVERRIDE;
28     uint16_t generateCharToGlyph(SkUnichar uni) SK_OVERRIDE;
29     void generateAdvance(SkGlyph* glyph) SK_OVERRIDE;
30     void generateMetrics(SkGlyph* glyph) SK_OVERRIDE;
31     void generateImage(const SkGlyph& glyph) SK_OVERRIDE;
32     void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE;
33     void generateFontMetrics(SkPaint::FontMetrics*) SK_OVERRIDE;
34
35 private:
36     const void* drawDWMask(const SkGlyph& glyph,
37                            DWRITE_RENDERING_MODE renderingMode,
38                            DWRITE_TEXTURE_TYPE textureType);
39
40     HRESULT getBoundingBox(SkGlyph* glyph,
41                            DWRITE_RENDERING_MODE renderingMode,
42                            DWRITE_TEXTURE_TYPE textureType,
43                            RECT* bbox);
44
45     SkTDArray<uint8_t> fBits;
46     /** The total matrix without the text height scale. */
47     SkMatrix fSkXform;
48     /** The total matrix without the text height scale. */
49     DWRITE_MATRIX fXform;
50     /** The non-rotational part of total matrix without the text height scale.
51      *  This is used to find the magnitude of gdi compatible advances.
52      */
53     DWRITE_MATRIX fGsA;
54     /** The inverse of the rotational part of the total matrix.
55      *  This is used to find the direction of gdi compatible advances.
56      */
57     SkMatrix fG_inv;
58     /** The text size to render with. */
59     SkScalar fTextSizeRender;
60     /** The text size to measure with. */
61     SkScalar fTextSizeMeasure;
62     SkAutoTUnref<DWriteFontTypeface> fTypeface;
63     int fGlyphCount;
64     DWRITE_RENDERING_MODE fRenderingMode;
65     DWRITE_TEXTURE_TYPE fTextureType;
66     DWRITE_MEASURING_MODE fMeasuringMode;
67 };
68
69 #endif