| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
| 3 * | 3 * |
| 4 * 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 |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #ifndef SkCanvas_DEFINED | 8 #ifndef SkCanvas_DEFINED |
| 9 #define SkCanvas_DEFINED | 9 #define SkCanvas_DEFINED |
| 10 | 10 |
| 11 #include "SkTypes.h" | 11 #include "SkTypes.h" |
| 12 #include "SkBitmap.h" | 12 #include "SkBitmap.h" |
| 13 #include "SkDeque.h" | 13 #include "SkDeque.h" |
| 14 #include "SkClipStack.h" | 14 #include "SkClipStack.h" |
| 15 #include "SkPaint.h" | 15 #include "SkPaint.h" |
| 16 #include "SkRefCnt.h" | 16 #include "SkRefCnt.h" |
| 17 #include "SkPath.h" | 17 #include "SkPath.h" |
| 18 #include "SkRegion.h" | 18 #include "SkRegion.h" |
| 19 #include "SkXfermode.h" | 19 #include "SkXfermode.h" |
| 20 | 20 |
| 21 //#define SK_SUPPORT_LEGACY_READPIXELSCONFIG | |
| 22 | |
| 23 #ifdef SK_SUPPORT_LEGACY_READPIXELSCONFIG | |
| 24 #ifndef SK_SUPPORT_LEGACY_CONFIG8888 | |
| 25 #define SK_SUPPORT_LEGACY_CONFIG8888 | |
| 26 #endif | |
| 27 #endif | |
| 28 | |
| 29 // if not defined, we always assume ClipToLayer for saveLayer() | 21 // if not defined, we always assume ClipToLayer for saveLayer() |
| 30 //#define SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG | 22 //#define SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG |
| 31 | 23 |
| 32 | 24 |
| 33 //#define SK_SUPPORT_LEGACY_GETCLIPTYPE | 25 //#define SK_SUPPORT_LEGACY_GETCLIPTYPE |
| 34 //#define SK_SUPPORT_LEGACY_GETTOTALCLIP | 26 //#define SK_SUPPORT_LEGACY_GETTOTALCLIP |
| 35 //#define SK_SUPPORT_LEGACY_GETTOPDEVICE | 27 //#define SK_SUPPORT_LEGACY_GETTOPDEVICE |
| 36 | 28 |
| 37 class SkBounder; | 29 class SkBounder; |
| 38 class SkBaseDevice; | 30 class SkBaseDevice; |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 * return the ImageInfo and rowBytes. The returned address is only valid | 222 * return the ImageInfo and rowBytes. The returned address is only valid |
| 231 * while the canvas object is in scope and unchanged. Any API calls made on | 223 * while the canvas object is in scope and unchanged. Any API calls made on |
| 232 * canvas (or its parent surface if any) will invalidate the | 224 * canvas (or its parent surface if any) will invalidate the |
| 233 * returned address (and associated information). | 225 * returned address (and associated information). |
| 234 * | 226 * |
| 235 * On failure, returns NULL and the info and rowBytes parameters are | 227 * On failure, returns NULL and the info and rowBytes parameters are |
| 236 * ignored. | 228 * ignored. |
| 237 */ | 229 */ |
| 238 const void* peekPixels(SkImageInfo* info, size_t* rowBytes); | 230 const void* peekPixels(SkImageInfo* info, size_t* rowBytes); |
| 239 | 231 |
| 240 #ifdef SK_SUPPORT_LEGACY_CONFIG8888 | |
| 241 /** | |
| 242 * This enum can be used with read/writePixels to perform a pixel ops to or | |
| 243 * from an 8888 config other than Skia's native config (SkPMColor). There | |
| 244 * are three byte orders supported: native, BGRA, and RGBA. Each has a | |
| 245 * premultiplied and unpremultiplied variant. | |
| 246 * | |
| 247 * Components of a 8888 pixel can be packed/unpacked from a 32bit word using | |
| 248 * either byte offsets or shift values. Byte offsets are endian-invariant | |
| 249 * while shifts are not. BGRA and RGBA configs are defined by byte | |
| 250 * orderings. The native config is defined by shift values (SK_A32_SHIFT, | |
| 251 * ..., SK_B32_SHIFT). | |
| 252 */ | |
| 253 enum Config8888 { | |
| 254 /** | |
| 255 * Skia's native order specified by: | |
| 256 * SK_A32_SHIFT, SK_R32_SHIFT, SK_G32_SHIFT, and SK_B32_SHIFT | |
| 257 * | |
| 258 * kNative_Premul_Config8888 is equivalent to SkPMColor | |
| 259 * kNative_Unpremul_Config8888 has the same component order as SkPMColor | |
| 260 * but is not premultiplied. | |
| 261 */ | |
| 262 kNative_Premul_Config8888, | |
| 263 kNative_Unpremul_Config8888, | |
| 264 /** | |
| 265 * low byte to high byte: B, G, R, A. | |
| 266 */ | |
| 267 kBGRA_Premul_Config8888, | |
| 268 kBGRA_Unpremul_Config8888, | |
| 269 /** | |
| 270 * low byte to high byte: R, G, B, A. | |
| 271 */ | |
| 272 kRGBA_Premul_Config8888, | |
| 273 kRGBA_Unpremul_Config8888 | |
| 274 }; | |
| 275 #endif | |
| 276 | |
| 277 #ifdef SK_SUPPORT_LEGACY_READPIXELSCONFIG | |
| 278 /** | |
| 279 * On success (returns true), copy the canvas pixels into the bitmap. | |
| 280 * On failure, the bitmap parameter is left unchanged and false is | |
| 281 * returned. | |
| 282 * | |
| 283 * The canvas' pixels are converted to the bitmap's config. The only | |
| 284 * supported config is kARGB_8888_Config, though this is likely to be | |
| 285 * relaxed in the future. The meaning of config kARGB_8888_Config is | |
| 286 * modified by the enum param config8888. The default value interprets | |
| 287 * kARGB_8888_Config as SkPMColor | |
| 288 * | |
| 289 * If the bitmap has pixels already allocated, the canvas pixels will be | |
| 290 * written there. If not, bitmap->allocPixels() will be called | |
| 291 * automatically. If the bitmap is backed by a texture readPixels will | |
| 292 * fail. | |
| 293 * | |
| 294 * The actual pixels written is the intersection of the canvas' bounds, and | |
| 295 * the rectangle formed by the bitmap's width,height and the specified x,y. | |
| 296 * If bitmap pixels extend outside of that intersection, they will not be | |
| 297 * modified. | |
| 298 * | |
| 299 * Other failure conditions: | |
| 300 * * If the canvas is backed by a non-raster device (e.g. PDF) then | |
| 301 * readPixels will fail. | |
| 302 * * If bitmap is texture-backed then readPixels will fail. (This may be | |
| 303 * relaxed in the future.) | |
| 304 * | |
| 305 * Example that reads the entire canvas into a bitmap using the native | |
| 306 * SkPMColor: | |
| 307 * SkISize size = canvas->getDeviceSize(); | |
| 308 * bitmap->setConfig(SkBitmap::kARGB_8888_Config, size.fWidth, | |
| 309 * size.fHeight); | |
| 310 * if (canvas->readPixels(bitmap, 0, 0)) { | |
| 311 * // use the pixels | |
| 312 * } | |
| 313 */ | |
| 314 bool readPixels(SkBitmap* bitmap, int x, int y, Config8888 config8888); | |
| 315 #endif | |
| 316 | |
| 317 /** | 232 /** |
| 318 * Copy the pixels from the base-layer into the specified buffer (pixels +
rowBytes), | 233 * Copy the pixels from the base-layer into the specified buffer (pixels +
rowBytes), |
| 319 * converting them into the requested format (SkImageInfo). The base-layer
pixels are read | 234 * converting them into the requested format (SkImageInfo). The base-layer
pixels are read |
| 320 * starting at the specified (x,y) location in the coordinate system of the
base-layer. | 235 * starting at the specified (x,y) location in the coordinate system of the
base-layer. |
| 321 * | 236 * |
| 322 * The specified ImageInfo and (x,y) offset specifies a source rectangle | 237 * The specified ImageInfo and (x,y) offset specifies a source rectangle |
| 323 * | 238 * |
| 324 * srcR(x, y, info.width(), info.height()); | 239 * srcR(x, y, info.width(), info.height()); |
| 325 * | 240 * |
| 326 * SrcR is intersected with the bounds of the base-layer. If this intersect
ion is not empty, | 241 * SrcR is intersected with the bounds of the base-layer. If this intersect
ion is not empty, |
| (...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 839 virtual void drawPath(const SkPath& path, const SkPaint& paint); | 754 virtual void drawPath(const SkPath& path, const SkPaint& paint); |
| 840 | 755 |
| 841 /** Draw the specified bitmap, with its top/left corner at (x,y), using the | 756 /** Draw the specified bitmap, with its top/left corner at (x,y), using the |
| 842 specified paint, transformed by the current matrix. Note: if the paint | 757 specified paint, transformed by the current matrix. Note: if the paint |
| 843 contains a maskfilter that generates a mask which extends beyond the | 758 contains a maskfilter that generates a mask which extends beyond the |
| 844 bitmap's original width/height, then the bitmap will be drawn as if it | 759 bitmap's original width/height, then the bitmap will be drawn as if it |
| 845 were in a Shader with CLAMP mode. Thus the color outside of the original | 760 were in a Shader with CLAMP mode. Thus the color outside of the original |
| 846 width/height will be the edge color replicated. | 761 width/height will be the edge color replicated. |
| 847 | 762 |
| 848 If a shader is present on the paint it will be ignored, except in the | 763 If a shader is present on the paint it will be ignored, except in the |
| 849 case where the bitmap is kA8_Config. In that case, the color is | 764 case where the bitmap is kAlpha_8_SkColorType. In that case, the color i
s |
| 850 generated by the shader. | 765 generated by the shader. |
| 851 | 766 |
| 852 @param bitmap The bitmap to be drawn | 767 @param bitmap The bitmap to be drawn |
| 853 @param left The position of the left side of the bitmap being drawn | 768 @param left The position of the left side of the bitmap being drawn |
| 854 @param top The position of the top side of the bitmap being drawn | 769 @param top The position of the top side of the bitmap being drawn |
| 855 @param paint The paint used to draw the bitmap, or NULL | 770 @param paint The paint used to draw the bitmap, or NULL |
| 856 */ | 771 */ |
| 857 virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, | 772 virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top, |
| 858 const SkPaint* paint = NULL); | 773 const SkPaint* paint = NULL); |
| 859 | 774 |
| (...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1502 bool asROBitmap(SkBitmap*) const; | 1417 bool asROBitmap(SkBitmap*) const; |
| 1503 | 1418 |
| 1504 private: | 1419 private: |
| 1505 SkBitmap fBitmap; // used if peekPixels() fails | 1420 SkBitmap fBitmap; // used if peekPixels() fails |
| 1506 const void* fAddr; // NULL on failure | 1421 const void* fAddr; // NULL on failure |
| 1507 SkImageInfo fInfo; | 1422 SkImageInfo fInfo; |
| 1508 size_t fRowBytes; | 1423 size_t fRowBytes; |
| 1509 }; | 1424 }; |
| 1510 | 1425 |
| 1511 #endif | 1426 #endif |
| OLD | NEW |