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 |
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 bool writePixels(const SkImageInfo&, const void* pixels, size_t rowBytes, in
t x, int y); | 293 bool writePixels(const SkImageInfo&, const void* pixels, size_t rowBytes, in
t x, int y); |
294 | 294 |
295 /** | 295 /** |
296 * Helper for calling writePixels(info, ...) by passing its pixels and rowb
ytes. If the bitmap | 296 * Helper for calling writePixels(info, ...) by passing its pixels and rowb
ytes. If the bitmap |
297 * is just wrapping a texture, returns false and does nothing. | 297 * is just wrapping a texture, returns false and does nothing. |
298 */ | 298 */ |
299 bool writePixels(const SkBitmap& bitmap, int x, int y); | 299 bool writePixels(const SkBitmap& bitmap, int x, int y); |
300 | 300 |
301 /////////////////////////////////////////////////////////////////////////// | 301 /////////////////////////////////////////////////////////////////////////// |
302 | 302 |
| 303 #ifndef SK_SUPPORT_LEGACY_SAVEFLAGS |
| 304 protected: |
| 305 #endif |
303 enum SaveFlags { | 306 enum SaveFlags { |
304 /** save the matrix state, restoring it on restore() */ | 307 /** save the matrix state, restoring it on restore() */ |
305 kMatrix_SaveFlag = 0x01, | 308 kMatrix_SaveFlag = 0x01, |
306 /** save the clip state, restoring it on restore() */ | 309 /** save the clip state, restoring it on restore() */ |
307 kClip_SaveFlag = 0x02, | 310 kClip_SaveFlag = 0x02, |
308 /** the layer needs to support per-pixel alpha */ | 311 /** the layer needs to support per-pixel alpha */ |
309 kHasAlphaLayer_SaveFlag = 0x04, | 312 kHasAlphaLayer_SaveFlag = 0x04, |
310 /** the layer needs to support 8-bits per color component */ | 313 /** the layer needs to support 8-bits per color component */ |
311 kFullColorLayer_SaveFlag = 0x08, | 314 kFullColorLayer_SaveFlag = 0x08, |
312 /** | 315 /** |
313 * the layer should clip against the bounds argument | 316 * the layer should clip against the bounds argument |
314 * | 317 * |
315 * if SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG is undefined, this is treated a
s always on. | 318 * if SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG is undefined, this is treated a
s always on. |
316 */ | 319 */ |
317 kClipToLayer_SaveFlag = 0x10, | 320 kClipToLayer_SaveFlag = 0x10, |
318 | 321 |
319 // helper masks for common choices | 322 // helper masks for common choices |
320 kMatrixClip_SaveFlag = 0x03, | 323 kMatrixClip_SaveFlag = 0x03, |
321 #ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG | 324 #ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG |
322 kARGB_NoClipLayer_SaveFlag = 0x0F, | 325 kARGB_NoClipLayer_SaveFlag = 0x0F, |
323 #endif | 326 #endif |
324 kARGB_ClipLayer_SaveFlag = 0x1F | 327 kARGB_ClipLayer_SaveFlag = 0x1F |
325 }; | 328 }; |
| 329 public: |
326 | 330 |
327 /** This call saves the current matrix, clip, and drawFilter, and pushes a | 331 /** This call saves the current matrix, clip, and drawFilter, and pushes a |
328 copy onto a private stack. Subsequent calls to translate, scale, | 332 copy onto a private stack. Subsequent calls to translate, scale, |
329 rotate, skew, concat or clipRect, clipPath, and setDrawFilter all | 333 rotate, skew, concat or clipRect, clipPath, and setDrawFilter all |
330 operate on this copy. | 334 operate on this copy. |
331 When the balancing call to restore() is made, the previous matrix, clip, | 335 When the balancing call to restore() is made, the previous matrix, clip, |
332 and drawFilter are restored. | 336 and drawFilter are restored. |
333 @param flags The flags govern what portion of the Matrix/Clip/drawFilter | 337 @param flags (deprecated) The flags govern what portion of the Matrix/Cl
ip/drawFilter |
334 state the save (and matching restore) effect. For example, | 338 state the save (and matching restore) effect. For example, |
335 if only kMatrix is specified, then only the matrix state | 339 if only kMatrix is specified, then only the matrix state |
336 will be pushed and popped. Likewise for the clip if kClip | 340 will be pushed and popped. Likewise for the clip if kClip |
337 is specified. However, the drawFilter is always affected | 341 is specified. However, the drawFilter is always affected |
338 by calls to save/restore. | 342 by calls to save/restore. |
339 @return The value to pass to restoreToCount() to balance this save() | 343 @return The value to pass to restoreToCount() to balance this save() |
340 */ | 344 */ |
| 345 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS |
341 int save(SaveFlags flags = kMatrixClip_SaveFlag); | 346 int save(SaveFlags flags = kMatrixClip_SaveFlag); |
| 347 #else |
| 348 int save(); |
| 349 #endif |
342 | 350 |
343 /** This behaves the same as save(), but in addition it allocates an | 351 /** This behaves the same as save(), but in addition it allocates an |
344 offscreen bitmap. All drawing calls are directed there, and only when | 352 offscreen bitmap. All drawing calls are directed there, and only when |
345 the balancing call to restore() is made is that offscreen transfered to | 353 the balancing call to restore() is made is that offscreen transfered to |
346 the canvas (or the previous layer). | 354 the canvas (or the previous layer). |
347 @param bounds (may be null) This rect, if non-null, is used as a hint to | 355 @param bounds (may be null) This rect, if non-null, is used as a hint to |
348 limit the size of the offscreen, and thus drawing may be | 356 limit the size of the offscreen, and thus drawing may be |
349 clipped to it, though that clipping is not guaranteed to | 357 clipped to it, though that clipping is not guaranteed to |
350 happen. If exact clipping is desired, use clipRect(). | 358 happen. If exact clipping is desired, use clipRect(). |
351 @param paint (may be null) This is copied, and is applied to the | 359 @param paint (may be null) This is copied, and is applied to the |
352 offscreen when restore() is called | 360 offscreen when restore() is called |
353 @param flags LayerFlags | 361 @param flags (deprecated) LayerFlags |
354 @return The value to pass to restoreToCount() to balance this save() | 362 @return The value to pass to restoreToCount() to balance this save() |
355 */ | 363 */ |
| 364 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS |
356 int saveLayer(const SkRect* bounds, const SkPaint* paint, | 365 int saveLayer(const SkRect* bounds, const SkPaint* paint, |
357 SaveFlags flags = kARGB_ClipLayer_SaveFlag); | 366 SaveFlags flags = kARGB_ClipLayer_SaveFlag); |
| 367 #else |
| 368 int saveLayer(const SkRect* bounds, const SkPaint* paint); |
| 369 #endif |
358 | 370 |
359 /** This behaves the same as save(), but in addition it allocates an | 371 /** This behaves the same as save(), but in addition it allocates an |
360 offscreen bitmap. All drawing calls are directed there, and only when | 372 offscreen bitmap. All drawing calls are directed there, and only when |
361 the balancing call to restore() is made is that offscreen transfered to | 373 the balancing call to restore() is made is that offscreen transfered to |
362 the canvas (or the previous layer). | 374 the canvas (or the previous layer). |
363 @param bounds (may be null) This rect, if non-null, is used as a hint to | 375 @param bounds (may be null) This rect, if non-null, is used as a hint to |
364 limit the size of the offscreen, and thus drawing may be | 376 limit the size of the offscreen, and thus drawing may be |
365 clipped to it, though that clipping is not guaranteed to | 377 clipped to it, though that clipping is not guaranteed to |
366 happen. If exact clipping is desired, use clipRect(). | 378 happen. If exact clipping is desired, use clipRect(). |
367 @param alpha This is applied to the offscreen when restore() is called. | 379 @param alpha This is applied to the offscreen when restore() is called. |
368 @param flags LayerFlags | 380 @param flags (deprecated) LayerFlags |
369 @return The value to pass to restoreToCount() to balance this save() | 381 @return The value to pass to restoreToCount() to balance this save() |
370 */ | 382 */ |
| 383 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS |
371 int saveLayerAlpha(const SkRect* bounds, U8CPU alpha, | 384 int saveLayerAlpha(const SkRect* bounds, U8CPU alpha, |
372 SaveFlags flags = kARGB_ClipLayer_SaveFlag); | 385 SaveFlags flags = kARGB_ClipLayer_SaveFlag); |
| 386 #else |
| 387 int saveLayerAlpha(const SkRect* bounds, U8CPU alpha); |
| 388 #endif |
373 | 389 |
374 /** This call balances a previous call to save(), and is used to remove all | 390 /** This call balances a previous call to save(), and is used to remove all |
375 modifications to the matrix/clip/drawFilter state since the last save | 391 modifications to the matrix/clip/drawFilter state since the last save |
376 call. | 392 call. |
377 It is an error to call restore() more times than save() was called. | 393 It is an error to call restore() more times than save() was called. |
378 */ | 394 */ |
379 void restore(); | 395 void restore(); |
380 | 396 |
381 /** Returns the number of matrix/clip states on the SkCanvas' private stack. | 397 /** Returns the number of matrix/clip states on the SkCanvas' private stack. |
382 This will equal # save() calls - # restore() calls + 1. The save count o
n | 398 This will equal # save() calls - # restore() calls + 1. The save count o
n |
(...skipping 887 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1270 friend class SkSurface_Gpu; | 1286 friend class SkSurface_Gpu; |
1271 | 1287 |
1272 bool fDeviceCMDirty; // cleared by updateDeviceCMCache() | 1288 bool fDeviceCMDirty; // cleared by updateDeviceCMCache() |
1273 void updateDeviceCMCache(); | 1289 void updateDeviceCMCache(); |
1274 | 1290 |
1275 friend class SkDrawIter; // needs setupDrawForLayerDevice() | 1291 friend class SkDrawIter; // needs setupDrawForLayerDevice() |
1276 friend class AutoDrawLooper; | 1292 friend class AutoDrawLooper; |
1277 friend class SkLua; // needs top layer size and offset | 1293 friend class SkLua; // needs top layer size and offset |
1278 friend class SkDeferredDevice; // needs getTopDevice() | 1294 friend class SkDeferredDevice; // needs getTopDevice() |
1279 | 1295 |
| 1296 // These want to play with SaveFlags |
| 1297 friend class SkMatrixClipStateMgr; |
| 1298 friend class SkDrawCommand; |
| 1299 friend class SkObjectParser; |
| 1300 |
1280 SkBaseDevice* createLayerDevice(const SkImageInfo&); | 1301 SkBaseDevice* createLayerDevice(const SkImageInfo&); |
1281 | 1302 |
1282 SkBaseDevice* init(SkBaseDevice*); | 1303 SkBaseDevice* init(SkBaseDevice*); |
1283 | 1304 |
1284 /** | 1305 /** |
1285 * DEPRECATED | 1306 * DEPRECATED |
1286 * | 1307 * |
1287 * Specify a device for this canvas to draw into. If it is not null, its | 1308 * Specify a device for this canvas to draw into. If it is not null, its |
1288 * reference count is incremented. If the canvas was already holding a | 1309 * reference count is incremented. If the canvas was already holding a |
1289 * device, its reference count is decremented. The new device is returned. | 1310 * device, its reference count is decremented. The new device is returned. |
(...skipping 22 matching lines...) Expand all Loading... |
1312 | 1333 |
1313 // shared by save() and saveLayer() | 1334 // shared by save() and saveLayer() |
1314 int internalSave(SaveFlags flags); | 1335 int internalSave(SaveFlags flags); |
1315 void internalRestore(); | 1336 void internalRestore(); |
1316 static void DrawRect(const SkDraw& draw, const SkPaint& paint, | 1337 static void DrawRect(const SkDraw& draw, const SkPaint& paint, |
1317 const SkRect& r, SkScalar textSize); | 1338 const SkRect& r, SkScalar textSize); |
1318 static void DrawTextDecorations(const SkDraw& draw, const SkPaint& paint, | 1339 static void DrawTextDecorations(const SkDraw& draw, const SkPaint& paint, |
1319 const char text[], size_t byteLength, | 1340 const char text[], size_t byteLength, |
1320 SkScalar x, SkScalar y); | 1341 SkScalar x, SkScalar y); |
1321 | 1342 |
| 1343 static bool bounds_affects_clip(SaveFlags); |
| 1344 |
1322 /* These maintain a cache of the clip bounds in local coordinates, | 1345 /* These maintain a cache of the clip bounds in local coordinates, |
1323 (converted to 2s-compliment if floats are slow). | 1346 (converted to 2s-compliment if floats are slow). |
1324 */ | 1347 */ |
1325 mutable SkRect fCachedLocalClipBounds; | 1348 mutable SkRect fCachedLocalClipBounds; |
1326 mutable bool fCachedLocalClipBoundsDirty; | 1349 mutable bool fCachedLocalClipBoundsDirty; |
1327 bool fAllowSoftClip; | 1350 bool fAllowSoftClip; |
1328 bool fAllowSimplifyClip; | 1351 bool fAllowSimplifyClip; |
1329 | 1352 |
1330 const SkRect& getLocalClipBounds() const { | 1353 const SkRect& getLocalClipBounds() const { |
1331 if (fCachedLocalClipBoundsDirty) { | 1354 if (fCachedLocalClipBoundsDirty) { |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1456 bool asROBitmap(SkBitmap*) const; | 1479 bool asROBitmap(SkBitmap*) const; |
1457 | 1480 |
1458 private: | 1481 private: |
1459 SkBitmap fBitmap; // used if peekPixels() fails | 1482 SkBitmap fBitmap; // used if peekPixels() fails |
1460 const void* fAddr; // NULL on failure | 1483 const void* fAddr; // NULL on failure |
1461 SkImageInfo fInfo; | 1484 SkImageInfo fInfo; |
1462 size_t fRowBytes; | 1485 size_t fRowBytes; |
1463 }; | 1486 }; |
1464 | 1487 |
1465 #endif | 1488 #endif |
OLD | NEW |