blob: e9eab94de12435bc3d77f3a84a7a3b974aec15d7 [file] [log] [blame]
bungeman51daa252014-06-05 13:38:45 -07001/*
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
18struct SkGlyph;
19class SkDescriptor;
20
21class SkScalerContext_DW : public SkScalerContext {
22public:
23 SkScalerContext_DW(DWriteFontTypeface*, const SkDescriptor* desc);
24 virtual ~SkScalerContext_DW();
25
26protected:
27 virtual unsigned generateGlyphCount() SK_OVERRIDE;
28 virtual uint16_t generateCharToGlyph(SkUnichar uni) SK_OVERRIDE;
29 virtual void generateAdvance(SkGlyph* glyph) SK_OVERRIDE;
30 virtual void generateMetrics(SkGlyph* glyph) SK_OVERRIDE;
31 virtual void generateImage(const SkGlyph& glyph) SK_OVERRIDE;
32 virtual void generatePath(const SkGlyph& glyph, SkPath* path) SK_OVERRIDE;
bungeman41078062014-07-07 08:16:37 -070033 virtual void generateFontMetrics(SkPaint::FontMetrics*) SK_OVERRIDE;
bungeman51daa252014-06-05 13:38:45 -070034
35private:
Ben Wagnerb2f7fce2014-08-27 19:17:41 -040036 const void* drawDWMask(const SkGlyph& glyph,
37 DWRITE_RENDERING_MODE renderingMode,
38 DWRITE_TEXTURE_TYPE textureType);
39
40 void getBoundingBox(SkGlyph* glyph,
41 DWRITE_RENDERING_MODE renderingMode,
42 DWRITE_TEXTURE_TYPE textureType,
43 RECT* bbox);
bungeman51daa252014-06-05 13:38:45 -070044
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