| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #ifndef SkCanvas_DEFINED | 10 #ifndef SkCanvas_DEFINED |
| 11 #define SkCanvas_DEFINED | 11 #define SkCanvas_DEFINED |
| 12 | 12 |
| 13 #include "SkTypes.h" | 13 #include "SkTypes.h" |
| 14 #include "SkBitmap.h" | 14 #include "SkBitmap.h" |
| 15 #include "SkDeque.h" | 15 #include "SkDeque.h" |
| 16 #include "SkClipStack.h" | 16 #include "SkClipStack.h" |
| 17 #include "SkPaint.h" | 17 #include "SkPaint.h" |
| 18 #include "SkRefCnt.h" | 18 #include "SkRefCnt.h" |
| 19 #include "SkPath.h" | 19 #include "SkPath.h" |
| 20 #include "SkRegion.h" | 20 #include "SkRegion.h" |
| 21 #include "SkScalarCompare.h" | 21 #include "SkScalarCompare.h" |
| 22 #include "SkXfermode.h" | 22 #include "SkXfermode.h" |
| 23 | 23 |
| 24 class SkBounder; | 24 class SkBounder; |
| 25 class SkDevice; | 25 class SkBaseDevice; |
| 26 class SkDraw; | 26 class SkDraw; |
| 27 class SkDrawFilter; | 27 class SkDrawFilter; |
| 28 class SkMetaData; | 28 class SkMetaData; |
| 29 class SkPicture; | 29 class SkPicture; |
| 30 class SkRRect; | 30 class SkRRect; |
| 31 class SkSurface_Base; | 31 class SkSurface_Base; |
| 32 | 32 |
| 33 /** \class SkCanvas | 33 /** \class SkCanvas |
| 34 | 34 |
| 35 A Canvas encapsulates all of the state about drawing into a device (bitmap). | 35 A Canvas encapsulates all of the state about drawing into a device (bitmap). |
| (...skipping 12 matching lines...) Expand all Loading... |
| 48 class SK_API SkCanvas : public SkRefCnt { | 48 class SK_API SkCanvas : public SkRefCnt { |
| 49 public: | 49 public: |
| 50 SK_DECLARE_INST_COUNT(SkCanvas) | 50 SK_DECLARE_INST_COUNT(SkCanvas) |
| 51 | 51 |
| 52 SkCanvas(); | 52 SkCanvas(); |
| 53 | 53 |
| 54 /** Construct a canvas with the specified device to draw into. | 54 /** Construct a canvas with the specified device to draw into. |
| 55 | 55 |
| 56 @param device Specifies a device for the canvas to draw into. | 56 @param device Specifies a device for the canvas to draw into. |
| 57 */ | 57 */ |
| 58 explicit SkCanvas(SkDevice* device); | 58 explicit SkCanvas(SkBaseDevice* device); |
| 59 | 59 |
| 60 /** Deprecated - Construct a canvas with the specified bitmap to draw into. | 60 /** Deprecated - Construct a canvas with the specified bitmap to draw into. |
| 61 @param bitmap Specifies a bitmap for the canvas to draw into. Its | 61 @param bitmap Specifies a bitmap for the canvas to draw into. Its |
| 62 structure are copied to the canvas. | 62 structure are copied to the canvas. |
| 63 */ | 63 */ |
| 64 explicit SkCanvas(const SkBitmap& bitmap); | 64 explicit SkCanvas(const SkBitmap& bitmap); |
| 65 virtual ~SkCanvas(); | 65 virtual ~SkCanvas(); |
| 66 | 66 |
| 67 SkMetaData& getMetaData(); | 67 SkMetaData& getMetaData(); |
| 68 | 68 |
| 69 /////////////////////////////////////////////////////////////////////////// | 69 /////////////////////////////////////////////////////////////////////////// |
| 70 | 70 |
| 71 /** | 71 /** |
| 72 * Trigger the immediate execution of all pending draw operations. | 72 * Trigger the immediate execution of all pending draw operations. |
| 73 */ | 73 */ |
| 74 void flush(); | 74 void flush(); |
| 75 | 75 |
| 76 /** | 76 /** |
| 77 * Return the width/height of the underlying device. The current drawable | 77 * Return the width/height of the underlying device. The current drawable |
| 78 * area may be small (due to clipping or saveLayer). For a canvas with | 78 * area may be small (due to clipping or saveLayer). For a canvas with |
| 79 * no device, 0,0 will be returned. | 79 * no device, 0,0 will be returned. |
| 80 */ | 80 */ |
| 81 SkISize getDeviceSize() const; | 81 SkISize getDeviceSize() const; |
| 82 | 82 |
| 83 /** Return the canvas' device object, which may be null. The device holds | 83 /** Return the canvas' device object, which may be null. The device holds |
| 84 the bitmap of the pixels that the canvas draws into. The reference count | 84 the bitmap of the pixels that the canvas draws into. The reference count |
| 85 of the returned device is not changed by this call. | 85 of the returned device is not changed by this call. |
| 86 */ | 86 */ |
| 87 SkDevice* getDevice() const; | 87 SkBaseDevice* getDevice() const; |
| 88 | 88 |
| 89 /** | 89 /** |
| 90 * saveLayer() can create another device (which is later drawn onto | 90 * saveLayer() can create another device (which is later drawn onto |
| 91 * the previous device). getTopDevice() returns the top-most device current | 91 * the previous device). getTopDevice() returns the top-most device current |
| 92 * installed. Note that this can change on other calls like save/restore, | 92 * installed. Note that this can change on other calls like save/restore, |
| 93 * so do not access this device after subsequent canvas calls. | 93 * so do not access this device after subsequent canvas calls. |
| 94 * The reference count of the device is not changed. | 94 * The reference count of the device is not changed. |
| 95 * | 95 * |
| 96 * @param updateMatrixClip If this is true, then before the device is | 96 * @param updateMatrixClip If this is true, then before the device is |
| 97 * returned, we ensure that its has been notified about the current | 97 * returned, we ensure that its has been notified about the current |
| 98 * matrix and clip. Note: this happens automatically when the device | 98 * matrix and clip. Note: this happens automatically when the device |
| 99 * is drawn to, but is optional here, as there is a small perf hit | 99 * is drawn to, but is optional here, as there is a small perf hit |
| 100 * sometimes. | 100 * sometimes. |
| 101 */ | 101 */ |
| 102 SkDevice* getTopDevice(bool updateMatrixClip = false) const; | 102 SkBaseDevice* getTopDevice(bool updateMatrixClip = false) const; |
| 103 | 103 |
| 104 /** | 104 /** |
| 105 * Shortcut for getDevice()->createCompatibleDevice(...). | 105 * Shortcut for getDevice()->createCompatibleDevice(...). |
| 106 * If getDevice() == NULL, this method does nothing, and returns NULL. | 106 * If getDevice() == NULL, this method does nothing, and returns NULL. |
| 107 */ | 107 */ |
| 108 SkDevice* createCompatibleDevice(SkBitmap::Config config, | 108 SkBaseDevice* createCompatibleDevice(SkBitmap::Config config, |
| 109 int width, int height, | 109 int width, int height, |
| 110 bool isOpaque); | 110 bool isOpaque); |
| 111 | 111 |
| 112 /////////////////////////////////////////////////////////////////////////// | 112 /////////////////////////////////////////////////////////////////////////// |
| 113 | 113 |
| 114 /** | 114 /** |
| 115 * This enum can be used with read/writePixels to perform a pixel ops to or | 115 * This enum can be used with read/writePixels to perform a pixel ops to or |
| 116 * from an 8888 config other than Skia's native config (SkPMColor). There | 116 * from an 8888 config other than Skia's native config (SkPMColor). There |
| 117 * are three byte orders supported: native, BGRA, and RGBA. Each has a | 117 * are three byte orders supported: native, BGRA, and RGBA. Each has a |
| 118 * premultiplied and unpremultiplied variant. | 118 * premultiplied and unpremultiplied variant. |
| 119 * | 119 * |
| 120 * Components of a 8888 pixel can be packed/unpacked from a 32bit word using | 120 * Components of a 8888 pixel can be packed/unpacked from a 32bit word using |
| (...skipping 866 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 987 LayerIter(SkCanvas*, bool skipEmptyClips); | 987 LayerIter(SkCanvas*, bool skipEmptyClips); |
| 988 ~LayerIter(); | 988 ~LayerIter(); |
| 989 | 989 |
| 990 /** Return true if the iterator is done */ | 990 /** Return true if the iterator is done */ |
| 991 bool done() const { return fDone; } | 991 bool done() const { return fDone; } |
| 992 /** Cycle to the next device */ | 992 /** Cycle to the next device */ |
| 993 void next(); | 993 void next(); |
| 994 | 994 |
| 995 // These reflect the current device in the iterator | 995 // These reflect the current device in the iterator |
| 996 | 996 |
| 997 SkDevice* device() const; | 997 SkBaseDevice* device() const; |
| 998 const SkMatrix& matrix() const; | 998 const SkMatrix& matrix() const; |
| 999 const SkRegion& clip() const; | 999 const SkRegion& clip() const; |
| 1000 const SkPaint& paint() const; | 1000 const SkPaint& paint() const; |
| 1001 int x() const; | 1001 int x() const; |
| 1002 int y() const; | 1002 int y() const; |
| 1003 | 1003 |
| 1004 private: | 1004 private: |
| 1005 // used to embed the SkDrawIter object directly in our instance, w/o | 1005 // used to embed the SkDrawIter object directly in our instance, w/o |
| 1006 // having to expose that class def to the public. There is an assert | 1006 // having to expose that class def to the public. There is an assert |
| 1007 // in our constructor to ensure that fStorage is large enough | 1007 // in our constructor to ensure that fStorage is large enough |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1036 | 1036 |
| 1037 /** DEPRECATED -- use constructor(device) | 1037 /** DEPRECATED -- use constructor(device) |
| 1038 | 1038 |
| 1039 Marked as 'protected' to avoid new clients using this before we can | 1039 Marked as 'protected' to avoid new clients using this before we can |
| 1040 completely remove it. | 1040 completely remove it. |
| 1041 | 1041 |
| 1042 Specify a device for this canvas to draw into. If it is not null, its | 1042 Specify a device for this canvas to draw into. If it is not null, its |
| 1043 reference count is incremented. If the canvas was already holding a | 1043 reference count is incremented. If the canvas was already holding a |
| 1044 device, its reference count is decremented. The new device is returned. | 1044 device, its reference count is decremented. The new device is returned. |
| 1045 */ | 1045 */ |
| 1046 virtual SkDevice* setDevice(SkDevice* device); | 1046 virtual SkBaseDevice* setDevice(SkBaseDevice* device); |
| 1047 | 1047 |
| 1048 private: | 1048 private: |
| 1049 class MCRec; | 1049 class MCRec; |
| 1050 | 1050 |
| 1051 SkClipStack fClipStack; | 1051 SkClipStack fClipStack; |
| 1052 SkDeque fMCStack; | 1052 SkDeque fMCStack; |
| 1053 // points to top of stack | 1053 // points to top of stack |
| 1054 MCRec* fMCRec; | 1054 MCRec* fMCRec; |
| 1055 // the first N recs that can fit here mean we won't call malloc | 1055 // the first N recs that can fit here mean we won't call malloc |
| 1056 uint32_t fMCRecStorage[32]; | 1056 uint32_t fMCRecStorage[32]; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1067 } | 1067 } |
| 1068 friend class SkSurface_Base; | 1068 friend class SkSurface_Base; |
| 1069 friend class SkSurface_Gpu; | 1069 friend class SkSurface_Gpu; |
| 1070 | 1070 |
| 1071 bool fDeviceCMDirty; // cleared by updateDeviceCMCache() | 1071 bool fDeviceCMDirty; // cleared by updateDeviceCMCache() |
| 1072 void updateDeviceCMCache(); | 1072 void updateDeviceCMCache(); |
| 1073 | 1073 |
| 1074 friend class SkDrawIter; // needs setupDrawForLayerDevice() | 1074 friend class SkDrawIter; // needs setupDrawForLayerDevice() |
| 1075 friend class AutoDrawLooper; | 1075 friend class AutoDrawLooper; |
| 1076 | 1076 |
| 1077 SkDevice* createLayerDevice(SkBitmap::Config, int width, int height, | 1077 SkBaseDevice* createLayerDevice(SkBitmap::Config, int width, int height, |
| 1078 bool isOpaque); | 1078 bool isOpaque); |
| 1079 | 1079 |
| 1080 SkDevice* init(SkDevice*); | 1080 SkBaseDevice* init(SkBaseDevice*); |
| 1081 | 1081 |
| 1082 // internal methods are not virtual, so they can safely be called by other | 1082 // internal methods are not virtual, so they can safely be called by other |
| 1083 // canvas apis, without confusing subclasses (like SkPictureRecording) | 1083 // canvas apis, without confusing subclasses (like SkPictureRecording) |
| 1084 void internalDrawBitmap(const SkBitmap&, const SkMatrix& m, const SkPaint* p
aint); | 1084 void internalDrawBitmap(const SkBitmap&, const SkMatrix& m, const SkPaint* p
aint); |
| 1085 void internalDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, | 1085 void internalDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, |
| 1086 const SkRect& dst, const SkPaint* paint, | 1086 const SkRect& dst, const SkPaint* paint, |
| 1087 DrawBitmapRectFlags flags); | 1087 DrawBitmapRectFlags flags); |
| 1088 void internalDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, | 1088 void internalDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, |
| 1089 const SkRect& dst, const SkPaint* paint); | 1089 const SkRect& dst, const SkPaint* paint); |
| 1090 void internalDrawPaint(const SkPaint& paint); | 1090 void internalDrawPaint(const SkPaint& paint); |
| 1091 int internalSaveLayer(const SkRect* bounds, const SkPaint* paint, | 1091 int internalSaveLayer(const SkRect* bounds, const SkPaint* paint, |
| 1092 SaveFlags, bool justForImageFilter); | 1092 SaveFlags, bool justForImageFilter); |
| 1093 void internalDrawDevice(SkDevice*, int x, int y, const SkPaint*); | 1093 void internalDrawDevice(SkBaseDevice*, int x, int y, const SkPaint*); |
| 1094 | 1094 |
| 1095 // shared by save() and saveLayer() | 1095 // shared by save() and saveLayer() |
| 1096 int internalSave(SaveFlags flags); | 1096 int internalSave(SaveFlags flags); |
| 1097 void internalRestore(); | 1097 void internalRestore(); |
| 1098 static void DrawRect(const SkDraw& draw, const SkPaint& paint, | 1098 static void DrawRect(const SkDraw& draw, const SkPaint& paint, |
| 1099 const SkRect& r, SkScalar textSize); | 1099 const SkRect& r, SkScalar textSize); |
| 1100 static void DrawTextDecorations(const SkDraw& draw, const SkPaint& paint, | 1100 static void DrawTextDecorations(const SkDraw& draw, const SkPaint& paint, |
| 1101 const char text[], size_t byteLength, | 1101 const char text[], size_t byteLength, |
| 1102 SkScalar x, SkScalar y); | 1102 SkScalar x, SkScalar y); |
| 1103 | 1103 |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1189 if (NULL != fCanvas) { | 1189 if (NULL != fCanvas) { |
| 1190 fCanvas->endCommentGroup(); | 1190 fCanvas->endCommentGroup(); |
| 1191 } | 1191 } |
| 1192 } | 1192 } |
| 1193 | 1193 |
| 1194 private: | 1194 private: |
| 1195 SkCanvas* fCanvas; | 1195 SkCanvas* fCanvas; |
| 1196 }; | 1196 }; |
| 1197 | 1197 |
| 1198 #endif | 1198 #endif |
| OLD | NEW |