OLD | NEW |
| (Empty) |
1 | |
2 /* | |
3 * Copyright 2006 The Android Open Source Project | |
4 * | |
5 * Use of this source code is governed by a BSD-style license that can be | |
6 * found in the LICENSE file. | |
7 */ | |
8 | |
9 | |
10 #ifndef SkBounder_DEFINED | |
11 #define SkBounder_DEFINED | |
12 | |
13 #include "SkTypes.h" | |
14 #include "SkRefCnt.h" | |
15 #include "SkPoint.h" | |
16 | |
17 struct SkGlyph; | |
18 struct SkIRect; | |
19 struct SkPoint; | |
20 struct SkRect; | |
21 class SkPaint; | |
22 class SkPath; | |
23 class SkRegion; | |
24 | |
25 /** \class SkBounder | |
26 | |
27 Base class for intercepting the device bounds of shapes before they are draw
n. | |
28 Install a subclass of this in your canvas. | |
29 */ | |
30 class SkBounder : public SkRefCnt { | |
31 public: | |
32 SK_DECLARE_INST_COUNT(SkBounder) | |
33 | |
34 SkBounder(); | |
35 | |
36 /* Call to perform a clip test before calling onIRect. | |
37 Returns the result from onIRect. | |
38 */ | |
39 bool doIRect(const SkIRect&); | |
40 bool doIRectGlyph(const SkIRect& , int x, int y, const SkGlyph&); | |
41 | |
42 protected: | |
43 /** Override in your subclass. This is called with the device bounds of an | |
44 object (text, geometry, image) just before it is drawn. If your method | |
45 returns false, the drawing for that shape is aborted. If your method | |
46 returns true, drawing continues. The bounds your method receives have al
ready | |
47 been transformed in to device coordinates, and clipped to the current cl
ip. | |
48 */ | |
49 virtual bool onIRect(const SkIRect&) { | |
50 return false; | |
51 } | |
52 | |
53 /** Passed to onIRectGlyph with the information about the current glyph. | |
54 LSB and RSB are fixed-point (16.16) coordinates of the start and end | |
55 of the glyph's advance | |
56 */ | |
57 struct GlyphRec { | |
58 SkIPoint fLSB; //!< fixed-point left-side-bearing of the glyph | |
59 SkIPoint fRSB; //!< fixed-point right-side-bearing of the glyph | |
60 uint16_t fGlyphID; | |
61 uint16_t fFlags; //!< currently set to 0 | |
62 }; | |
63 | |
64 /** Optionally, override in your subclass to receive the glyph ID when | |
65 text drawing supplies the device bounds of the object. | |
66 */ | |
67 virtual bool onIRectGlyph(const SkIRect& r, const GlyphRec&) { | |
68 return onIRect(r); | |
69 } | |
70 | |
71 /** Called after each shape has been drawn. The default implementation does | |
72 nothing, but your override could use this notification to signal itself | |
73 that the offscreen being rendered into needs to be updated to the screen
. | |
74 */ | |
75 virtual void commit(); | |
76 | |
77 private: | |
78 bool doHairline(const SkPoint&, const SkPoint&, const SkPaint&); | |
79 bool doRect(const SkRect&, const SkPaint&); | |
80 bool doPath(const SkPath&, const SkPaint&, bool doFill); | |
81 void setClip(const SkRegion* clip) { fClip = clip; } | |
82 | |
83 const SkRegion* fClip; | |
84 friend class SkAutoBounderCommit; | |
85 friend class SkDraw; | |
86 friend class SkDrawIter; | |
87 friend struct Draw1Glyph; | |
88 friend class SkMaskFilter; | |
89 | |
90 typedef SkRefCnt INHERITED; | |
91 }; | |
92 | |
93 #endif | |
OLD | NEW |