Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 | |
| 2 /* | 1 /* |
| 3 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
| 4 * | 3 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 7 */ | 6 */ |
| 8 | 7 |
| 9 | |
| 10 #ifndef SkCanvas_DEFINED | 8 #ifndef SkCanvas_DEFINED |
| 11 #define SkCanvas_DEFINED | 9 #define SkCanvas_DEFINED |
| 12 | 10 |
| 13 #include "SkTypes.h" | 11 #include "SkTypes.h" |
| 14 #include "SkBitmap.h" | 12 #include "SkBitmap.h" |
| 15 #include "SkDeque.h" | 13 #include "SkDeque.h" |
| 16 #include "SkClipStack.h" | 14 #include "SkClipStack.h" |
| 17 #include "SkPaint.h" | 15 #include "SkPaint.h" |
| 18 #include "SkRefCnt.h" | 16 #include "SkRefCnt.h" |
| 19 #include "SkPath.h" | 17 #include "SkPath.h" |
| 20 #include "SkRegion.h" | 18 #include "SkRegion.h" |
| 21 #include "SkXfermode.h" | 19 #include "SkXfermode.h" |
| 22 | 20 |
| 21 //#define SK_SUPPORT_LEGACY_CANVAS_CREATECOMPATIBLEDEVICE | |
| 22 | |
| 23 class SkBounder; | 23 class SkBounder; |
| 24 class SkBaseDevice; | 24 class SkBaseDevice; |
| 25 class SkDraw; | 25 class SkDraw; |
| 26 class SkDrawFilter; | 26 class SkDrawFilter; |
| 27 class SkMetaData; | 27 class SkMetaData; |
| 28 class SkPicture; | 28 class SkPicture; |
| 29 class SkRRect; | 29 class SkRRect; |
| 30 class SkSurface; | |
| 30 class SkSurface_Base; | 31 class SkSurface_Base; |
| 31 class GrContext; | 32 class GrContext; |
| 32 | 33 |
| 33 /** \class SkCanvas | 34 /** \class SkCanvas |
| 34 | 35 |
| 35 A Canvas encapsulates all of the state about drawing into a device (bitmap). | 36 A Canvas encapsulates all of the state about drawing into a device (bitmap). |
| 36 This includes a reference to the device itself, and a stack of matrix/clip | 37 This includes a reference to the device itself, and a stack of matrix/clip |
| 37 values. For any given draw call (e.g. drawRect), the geometry of the object | 38 values. For any given draw call (e.g. drawRect), the geometry of the object |
| 38 being drawn is transformed by the concatenation of all the matrices in the | 39 being drawn is transformed by the concatenation of all the matrices in the |
| 39 stack. The transformed geometry is clipped by the intersection of all of | 40 stack. The transformed geometry is clipped by the intersection of all of |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 105 * The reference count of the device is not changed. | 106 * The reference count of the device is not changed. |
| 106 * | 107 * |
| 107 * @param updateMatrixClip If this is true, then before the device is | 108 * @param updateMatrixClip If this is true, then before the device is |
| 108 * returned, we ensure that its has been notified about the current | 109 * returned, we ensure that its has been notified about the current |
| 109 * matrix and clip. Note: this happens automatically when the device | 110 * matrix and clip. Note: this happens automatically when the device |
| 110 * is drawn to, but is optional here, as there is a small perf hit | 111 * is drawn to, but is optional here, as there is a small perf hit |
| 111 * sometimes. | 112 * sometimes. |
| 112 */ | 113 */ |
| 113 SkBaseDevice* getTopDevice(bool updateMatrixClip = false) const; | 114 SkBaseDevice* getTopDevice(bool updateMatrixClip = false) const; |
| 114 | 115 |
| 116 #ifdef SK_SUPPORT_LEGACY_CANVAS_CREATECOMPATIBLEDEVICE | |
| 115 /** | 117 /** |
| 116 * Shortcut for getDevice()->createCompatibleDevice(...). | 118 * Shortcut for getDevice()->createCompatibleDevice(...). |
| 117 * If getDevice() == NULL, this method does nothing, and returns NULL. | 119 * If getDevice() == NULL, this method does nothing, and returns NULL. |
| 118 */ | 120 */ |
| 119 SkBaseDevice* createCompatibleDevice(SkBitmap::Config config, | 121 SkBaseDevice* createCompatibleDevice(SkBitmap::Config config, |
| 120 int width, int height, | 122 int width, int height, |
| 121 bool isOpaque); | 123 bool isOpaque); |
| 124 #endif | |
| 125 | |
| 126 /** | |
| 127 * Create a new surface matching the specified info, one that attempts to | |
| 128 * be maximally compatible when used with this canvas. | |
|
scroggo
2014/02/05 16:41:12
What does it mean to be used with this canvas? Dra
| |
| 129 */ | |
| 130 SkSurface* newSurface(const SkImageInfo&); | |
| 122 | 131 |
| 123 /** | 132 /** |
| 124 * Return the GPU context of the device that is associated with the canvas. | 133 * Return the GPU context of the device that is associated with the canvas. |
| 125 * For a canvas with non-GPU device, NULL is returned. | 134 * For a canvas with non-GPU device, NULL is returned. |
| 126 */ | 135 */ |
| 127 GrContext* getGrContext(); | 136 GrContext* getGrContext(); |
| 128 | 137 |
| 129 /////////////////////////////////////////////////////////////////////////// | 138 /////////////////////////////////////////////////////////////////////////// |
| 130 | 139 |
| 131 /** | 140 /** |
| (...skipping 880 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1012 // in our constructor to ensure that fStorage is large enough | 1021 // in our constructor to ensure that fStorage is large enough |
| 1013 // (though needs to be a compile-time-assert!). We use intptr_t to work | 1022 // (though needs to be a compile-time-assert!). We use intptr_t to work |
| 1014 // safely with 32 and 64 bit machines (to ensure the storage is enough) | 1023 // safely with 32 and 64 bit machines (to ensure the storage is enough) |
| 1015 intptr_t fStorage[32]; | 1024 intptr_t fStorage[32]; |
| 1016 class SkDrawIter* fImpl; // this points at fStorage | 1025 class SkDrawIter* fImpl; // this points at fStorage |
| 1017 SkPaint fDefaultPaint; | 1026 SkPaint fDefaultPaint; |
| 1018 bool fDone; | 1027 bool fDone; |
| 1019 }; | 1028 }; |
| 1020 | 1029 |
| 1021 protected: | 1030 protected: |
| 1031 // default impl defers to getDevice()->newSurface(info) | |
| 1032 virtual SkSurface* onNewSurface(const SkImageInfo&); | |
| 1033 | |
| 1022 // Returns the canvas to be used by DrawIter. Default implementation | 1034 // Returns the canvas to be used by DrawIter. Default implementation |
| 1023 // returns this. Subclasses that encapsulate an indirect canvas may | 1035 // returns this. Subclasses that encapsulate an indirect canvas may |
| 1024 // need to overload this method. The impl must keep track of this, as it | 1036 // need to overload this method. The impl must keep track of this, as it |
| 1025 // is not released or deleted by the caller. | 1037 // is not released or deleted by the caller. |
| 1026 virtual SkCanvas* canvasForDrawIter(); | 1038 virtual SkCanvas* canvasForDrawIter(); |
| 1027 | 1039 |
| 1028 // Clip rectangle bounds. Called internally by saveLayer. | 1040 // Clip rectangle bounds. Called internally by saveLayer. |
| 1029 // returns false if the entire rectangle is entirely clipped out | 1041 // returns false if the entire rectangle is entirely clipped out |
| 1030 bool clipRectBounds(const SkRect* bounds, SaveFlags flags, | 1042 bool clipRectBounds(const SkRect* bounds, SaveFlags flags, |
| 1031 SkIRect* intersection); | 1043 SkIRect* intersection); |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1197 fCanvas->endCommentGroup(); | 1209 fCanvas->endCommentGroup(); |
| 1198 } | 1210 } |
| 1199 } | 1211 } |
| 1200 | 1212 |
| 1201 private: | 1213 private: |
| 1202 SkCanvas* fCanvas; | 1214 SkCanvas* fCanvas; |
| 1203 }; | 1215 }; |
| 1204 #define SkAutoCommentBlock(...) SK_REQUIRE_LOCAL_VAR(SkAutoCommentBlock) | 1216 #define SkAutoCommentBlock(...) SK_REQUIRE_LOCAL_VAR(SkAutoCommentBlock) |
| 1205 | 1217 |
| 1206 #endif | 1218 #endif |
| OLD | NEW |