Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: include/core/SkCanvas.h

Issue 1535993003: hide old SaveFlags (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/core/SkCanvas.cpp » ('j') | src/core/SkCanvas.cpp » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 19 matching lines...) Expand all
30 class SkMetaData; 30 class SkMetaData;
31 class SkPath; 31 class SkPath;
32 class SkPicture; 32 class SkPicture;
33 class SkPixmap; 33 class SkPixmap;
34 class SkRRect; 34 class SkRRect;
35 struct SkRSXform; 35 struct SkRSXform;
36 class SkSurface; 36 class SkSurface;
37 class SkSurface_Base; 37 class SkSurface_Base;
38 class SkTextBlob; 38 class SkTextBlob;
39 39
40 #ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
41 #define SK_SUPPORT_LEGACY_SAVEFLAGS
f(malita) 2015/12/19 18:20:21 Any danger to define multiple times (do we need a
reed1 2015/12/20 03:05:45 Done.
42 #endif
43
40 /** \class SkCanvas 44 /** \class SkCanvas
41 45
42 A Canvas encapsulates all of the state about drawing into a device (bitmap). 46 A Canvas encapsulates all of the state about drawing into a device (bitmap).
43 This includes a reference to the device itself, and a stack of matrix/clip 47 This includes a reference to the device itself, and a stack of matrix/clip
44 values. For any given draw call (e.g. drawRect), the geometry of the object 48 values. For any given draw call (e.g. drawRect), the geometry of the object
45 being drawn is transformed by the concatenation of all the matrices in the 49 being drawn is transformed by the concatenation of all the matrices in the
46 stack. The transformed geometry is clipped by the intersection of all of 50 stack. The transformed geometry is clipped by the intersection of all of
47 the clips in the stack. 51 the clips in the stack.
48 52
49 While the Canvas holds the state of the drawing device, the state (style) 53 While the Canvas holds the state of the drawing device, the state (style)
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 bool writePixels(const SkImageInfo&, const void* pixels, size_t rowBytes, in t x, int y); 278 bool writePixels(const SkImageInfo&, const void* pixels, size_t rowBytes, in t x, int y);
275 279
276 /** 280 /**
277 * Helper for calling writePixels(info, ...) by passing its pixels and rowb ytes. If the bitmap 281 * Helper for calling writePixels(info, ...) by passing its pixels and rowb ytes. If the bitmap
278 * is just wrapping a texture, returns false and does nothing. 282 * is just wrapping a texture, returns false and does nothing.
279 */ 283 */
280 bool writePixels(const SkBitmap& bitmap, int x, int y); 284 bool writePixels(const SkBitmap& bitmap, int x, int y);
281 285
282 /////////////////////////////////////////////////////////////////////////// 286 ///////////////////////////////////////////////////////////////////////////
283 287
288 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS
284 enum SaveFlags { 289 enum SaveFlags {
285 /** save the matrix state, restoring it on restore() */ 290 /** save the matrix state, restoring it on restore() */
286 // [deprecated] kMatrix_SaveFlag = 0x01, 291 // [deprecated] kMatrix_SaveFlag = 0x01,
287 kMatrix_SaveFlag = 0x01, 292 kMatrix_SaveFlag = 0x01,
288 /** save the clip state, restoring it on restore() */ 293 /** save the clip state, restoring it on restore() */
289 // [deprecated] kClip_SaveFlag = 0x02, 294 // [deprecated] kClip_SaveFlag = 0x02,
290 kClip_SaveFlag = 0x02, 295 kClip_SaveFlag = 0x02,
291 /** the layer needs to support per-pixel alpha */ 296 /** the layer needs to support per-pixel alpha */
292 kHasAlphaLayer_SaveFlag = 0x04, 297 kHasAlphaLayer_SaveFlag = 0x04,
293 /** the layer needs to support 8-bits per color component */ 298 /** the layer needs to support 8-bits per color component */
294 kFullColorLayer_SaveFlag = 0x08, 299 kFullColorLayer_SaveFlag = 0x08,
295 /** 300 /**
296 * the layer should clip against the bounds argument 301 * the layer should clip against the bounds argument
297 * 302 *
298 * if SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG is undefined, this is treated a s always on. 303 * if SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG is undefined, this is treated a s always on.
299 */ 304 */
300 kClipToLayer_SaveFlag = 0x10, 305 kClipToLayer_SaveFlag = 0x10,
301 306
302 // helper masks for common choices 307 // helper masks for common choices
303 // [deprecated] kMatrixClip_SaveFlag = 0x03, 308 // [deprecated] kMatrixClip_SaveFlag = 0x03,
304 kMatrixClip_SaveFlag = 0x03, 309 kMatrixClip_SaveFlag = 0x03,
305 #ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG 310 #ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
306 kARGB_NoClipLayer_SaveFlag = 0x0F, 311 kARGB_NoClipLayer_SaveFlag = 0x0F,
307 #endif 312 #endif
308 kARGB_ClipLayer_SaveFlag = 0x1F 313 kARGB_ClipLayer_SaveFlag = 0x1F
309 }; 314 };
315 #endif
310 316
311 /** This call saves the current matrix, clip, and drawFilter, and pushes a 317 /** This call saves the current matrix, clip, and drawFilter, and pushes a
312 copy onto a private stack. Subsequent calls to translate, scale, 318 copy onto a private stack. Subsequent calls to translate, scale,
313 rotate, skew, concat or clipRect, clipPath, and setDrawFilter all 319 rotate, skew, concat or clipRect, clipPath, and setDrawFilter all
314 operate on this copy. 320 operate on this copy.
315 When the balancing call to restore() is made, the previous matrix, clip, 321 When the balancing call to restore() is made, the previous matrix, clip,
316 and drawFilter are restored. 322 and drawFilter are restored.
317 323
318 @return The value to pass to restoreToCount() to balance this save() 324 @return The value to pass to restoreToCount() to balance this save()
319 */ 325 */
(...skipping 16 matching lines...) Expand all
336 return this->saveLayer(&bounds, paint); 342 return this->saveLayer(&bounds, paint);
337 } 343 }
338 344
339 /** 345 /**
340 * Temporary name. 346 * Temporary name.
341 * Will allow any requests for LCD text to be respected, so the caller must be careful to 347 * Will allow any requests for LCD text to be respected, so the caller must be careful to
342 * only draw on top of opaque sections of the layer to get good results. 348 * only draw on top of opaque sections of the layer to get good results.
343 */ 349 */
344 int saveLayerPreserveLCDTextRequests(const SkRect* bounds, const SkPaint* pa int); 350 int saveLayerPreserveLCDTextRequests(const SkRect* bounds, const SkPaint* pa int);
345 351
352 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS
346 /** DEPRECATED - use saveLayer(const SkRect*, const SkPaint*) instead. 353 /** DEPRECATED - use saveLayer(const SkRect*, const SkPaint*) instead.
347 354
348 This behaves the same as saveLayer(const SkRect*, const SkPaint*), 355 This behaves the same as saveLayer(const SkRect*, const SkPaint*),
349 but it allows fine-grained control of which state bits to be saved 356 but it allows fine-grained control of which state bits to be saved
350 (and subsequently restored). 357 (and subsequently restored).
351 358
352 @param bounds (may be null) This rect, if non-null, is used as a hint to 359 @param bounds (may be null) This rect, if non-null, is used as a hint to
353 limit the size of the offscreen, and thus drawing may be 360 limit the size of the offscreen, and thus drawing may be
354 clipped to it, though that clipping is not guaranteed to 361 clipped to it, though that clipping is not guaranteed to
355 happen. If exact clipping is desired, use clipRect(). 362 happen. If exact clipping is desired, use clipRect().
356 @param paint (may be null) This is copied, and is applied to the 363 @param paint (may be null) This is copied, and is applied to the
357 offscreen when restore() is called 364 offscreen when restore() is called
358 @param flags LayerFlags 365 @param flags LayerFlags
359 @return The value to pass to restoreToCount() to balance this save() 366 @return The value to pass to restoreToCount() to balance this save()
360 */ 367 */
361 SK_ATTR_EXTERNALLY_DEPRECATED("SaveFlags use is deprecated") 368 SK_ATTR_EXTERNALLY_DEPRECATED("SaveFlags use is deprecated")
362 int saveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags flags); 369 int saveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags flags);
370 #endif
363 371
364 /** This behaves the same as save(), but in addition it allocates an 372 /** This behaves the same as save(), but in addition it allocates an
365 offscreen bitmap. All drawing calls are directed there, and only when 373 offscreen bitmap. All drawing calls are directed there, and only when
366 the balancing call to restore() is made is that offscreen transfered to 374 the balancing call to restore() is made is that offscreen transfered to
367 the canvas (or the previous layer). 375 the canvas (or the previous layer).
368 @param bounds (may be null) This rect, if non-null, is used as a hint to 376 @param bounds (may be null) This rect, if non-null, is used as a hint to
369 limit the size of the offscreen, and thus drawing may be 377 limit the size of the offscreen, and thus drawing may be
370 clipped to it, though that clipping is not guaranteed to 378 clipped to it, though that clipping is not guaranteed to
371 happen. If exact clipping is desired, use clipRect(). 379 happen. If exact clipping is desired, use clipRect().
372 @param alpha This is applied to the offscreen when restore() is called. 380 @param alpha This is applied to the offscreen when restore() is called.
373 @return The value to pass to restoreToCount() to balance this save() 381 @return The value to pass to restoreToCount() to balance this save()
374 */ 382 */
375 int saveLayerAlpha(const SkRect* bounds, U8CPU alpha); 383 int saveLayerAlpha(const SkRect* bounds, U8CPU alpha);
376 384
385 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS
377 /** DEPRECATED - use saveLayerAlpha(const SkRect*, U8CPU) instead. 386 /** DEPRECATED - use saveLayerAlpha(const SkRect*, U8CPU) instead.
378 387
379 This behaves the same as saveLayerAlpha(const SkRect*, U8CPU), 388 This behaves the same as saveLayerAlpha(const SkRect*, U8CPU),
380 but it allows fine-grained control of which state bits to be saved 389 but it allows fine-grained control of which state bits to be saved
381 (and subsequently restored). 390 (and subsequently restored).
382 391
383 @param bounds (may be null) This rect, if non-null, is used as a hint to 392 @param bounds (may be null) This rect, if non-null, is used as a hint to
384 limit the size of the offscreen, and thus drawing may be 393 limit the size of the offscreen, and thus drawing may be
385 clipped to it, though that clipping is not guaranteed to 394 clipped to it, though that clipping is not guaranteed to
386 happen. If exact clipping is desired, use clipRect(). 395 happen. If exact clipping is desired, use clipRect().
387 @param alpha This is applied to the offscreen when restore() is called. 396 @param alpha This is applied to the offscreen when restore() is called.
388 @param flags LayerFlags 397 @param flags LayerFlags
389 @return The value to pass to restoreToCount() to balance this save() 398 @return The value to pass to restoreToCount() to balance this save()
390 */ 399 */
391 SK_ATTR_EXTERNALLY_DEPRECATED("SaveFlags use is deprecated") 400 SK_ATTR_EXTERNALLY_DEPRECATED("SaveFlags use is deprecated")
392 int saveLayerAlpha(const SkRect* bounds, U8CPU alpha, SaveFlags flags); 401 int saveLayerAlpha(const SkRect* bounds, U8CPU alpha, SaveFlags flags);
402 #endif
393 403
394 enum { 404 enum {
395 kIsOpaque_SaveLayerFlag = 1 << 0, 405 kIsOpaque_SaveLayerFlag = 1 << 0,
396 kPreserveLCDText_SaveLayerFlag = 1 << 1, 406 kPreserveLCDText_SaveLayerFlag = 1 << 1,
397 }; 407 };
398 typedef uint32_t SaveLayerFlags; 408 typedef uint32_t SaveLayerFlags;
399 409
400 struct SaveLayerRec { 410 struct SaveLayerRec {
401 SaveLayerRec() : fBounds(nullptr), fPaint(nullptr), fSaveLayerFlags(0) { } 411 SaveLayerRec() : fBounds(nullptr), fPaint(nullptr), fSaveLayerFlags(0) { }
402 SaveLayerRec(const SkRect* bounds, const SkPaint* paint, SaveLayerFlags saveLayerFlags = 0) 412 SaveLayerRec(const SkRect* bounds, const SkPaint* paint, SaveLayerFlags saveLayerFlags = 0)
(...skipping 925 matching lines...) Expand 10 before | Expand all | Expand 10 after
1328 // and offscreen bounds for any margin required by the filter DAG. 1338 // and offscreen bounds for any margin required by the filter DAG.
1329 bool clipRectBounds(const SkRect* bounds, SaveLayerFlags, SkIRect* intersect ion, 1339 bool clipRectBounds(const SkRect* bounds, SaveLayerFlags, SkIRect* intersect ion,
1330 const SkImageFilter* imageFilter = NULL); 1340 const SkImageFilter* imageFilter = NULL);
1331 1341
1332 private: 1342 private:
1333 enum PrivateSaveLayerFlags { 1343 enum PrivateSaveLayerFlags {
1334 kDontClipToLayer_PrivateSaveLayerFlag = 1 << 31, 1344 kDontClipToLayer_PrivateSaveLayerFlag = 1 << 31,
1335 }; 1345 };
1336 1346
1337 static bool BoundsAffectsClip(SaveLayerFlags); 1347 static bool BoundsAffectsClip(SaveLayerFlags);
1348 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS
1338 static uint32_t SaveFlagsToSaveLayerFlags(SaveFlags); 1349 static uint32_t SaveFlagsToSaveLayerFlags(SaveFlags);
1350 #endif
1351 static SaveLayerFlags LegacySaveFlagsToSaveLayerFlags(uint32_t legacySaveFla gs);
1339 1352
1340 enum ShaderOverrideOpacity { 1353 enum ShaderOverrideOpacity {
1341 kNone_ShaderOverrideOpacity, //!< there is no overriding shader ( bitmap or image) 1354 kNone_ShaderOverrideOpacity, //!< there is no overriding shader ( bitmap or image)
1342 kOpaque_ShaderOverrideOpacity, //!< the overriding shader is opaque 1355 kOpaque_ShaderOverrideOpacity, //!< the overriding shader is opaque
1343 kNotOpaque_ShaderOverrideOpacity, //!< the overriding shader may not b e opaque 1356 kNotOpaque_ShaderOverrideOpacity, //!< the overriding shader may not b e opaque
1344 }; 1357 };
1345 1358
1346 // notify our surface (if we have one) that we are about to draw, so it 1359 // notify our surface (if we have one) that we are about to draw, so it
1347 // can perform copy-on-write or invalidate any cached images 1360 // can perform copy-on-write or invalidate any cached images
1348 void predrawNotify(bool willOverwritesEntireSurface = false); 1361 void predrawNotify(bool willOverwritesEntireSurface = false);
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
1567 // the caller must respect the restrictions associated with peekPixels(). 1580 // the caller must respect the restrictions associated with peekPixels().
1568 bool asROBitmap(SkBitmap*) const; 1581 bool asROBitmap(SkBitmap*) const;
1569 1582
1570 private: 1583 private:
1571 SkBitmap fBitmap; // used if peekPixels() fails 1584 SkBitmap fBitmap; // used if peekPixels() fails
1572 const void* fAddr; // NULL on failure 1585 const void* fAddr; // NULL on failure
1573 SkImageInfo fInfo; 1586 SkImageInfo fInfo;
1574 size_t fRowBytes; 1587 size_t fRowBytes;
1575 }; 1588 };
1576 1589
1590 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS
1577 static inline SkCanvas::SaveFlags operator|(const SkCanvas::SaveFlags lhs, 1591 static inline SkCanvas::SaveFlags operator|(const SkCanvas::SaveFlags lhs,
1578 const SkCanvas::SaveFlags rhs) { 1592 const SkCanvas::SaveFlags rhs) {
1579 return static_cast<SkCanvas::SaveFlags>(static_cast<int>(lhs) | static_cast< int>(rhs)); 1593 return static_cast<SkCanvas::SaveFlags>(static_cast<int>(lhs) | static_cast< int>(rhs));
1580 } 1594 }
1581 1595
1582 static inline SkCanvas::SaveFlags& operator|=(SkCanvas::SaveFlags& lhs, 1596 static inline SkCanvas::SaveFlags& operator|=(SkCanvas::SaveFlags& lhs,
1583 const SkCanvas::SaveFlags rhs) { 1597 const SkCanvas::SaveFlags rhs) {
1584 lhs = lhs | rhs; 1598 lhs = lhs | rhs;
1585 return lhs; 1599 return lhs;
1586 } 1600 }
1601 #endif
1587 1602
1588 class SkCanvasClipVisitor { 1603 class SkCanvasClipVisitor {
1589 public: 1604 public:
1590 virtual ~SkCanvasClipVisitor(); 1605 virtual ~SkCanvasClipVisitor();
1591 virtual void clipRect(const SkRect&, SkRegion::Op, bool antialias) = 0; 1606 virtual void clipRect(const SkRect&, SkRegion::Op, bool antialias) = 0;
1592 virtual void clipRRect(const SkRRect&, SkRegion::Op, bool antialias) = 0; 1607 virtual void clipRRect(const SkRRect&, SkRegion::Op, bool antialias) = 0;
1593 virtual void clipPath(const SkPath&, SkRegion::Op, bool antialias) = 0; 1608 virtual void clipPath(const SkPath&, SkRegion::Op, bool antialias) = 0;
1594 }; 1609 };
1595 1610
1596 #endif 1611 #endif
OLDNEW
« no previous file with comments | « no previous file | src/core/SkCanvas.cpp » ('j') | src/core/SkCanvas.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698