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

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

Issue 1648773002: SaveFlags begone! (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: Created 4 years, 10 months 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') | no next file with comments »
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 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 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);
279 279
280 /** 280 /**
281 * 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
282 * is just wrapping a texture, returns false and does nothing. 282 * is just wrapping a texture, returns false and does nothing.
283 */ 283 */
284 bool writePixels(const SkBitmap& bitmap, int x, int y); 284 bool writePixels(const SkBitmap& bitmap, int x, int y);
285 285
286 /////////////////////////////////////////////////////////////////////////// 286 ///////////////////////////////////////////////////////////////////////////
287 287
288 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS
289 enum SaveFlags {
290 /** save the matrix state, restoring it on restore() */
291 // [deprecated] kMatrix_SaveFlag = 0x01,
292 kMatrix_SaveFlag = 0x01,
293 /** save the clip state, restoring it on restore() */
294 // [deprecated] kClip_SaveFlag = 0x02,
295 kClip_SaveFlag = 0x02,
296 /** the layer needs to support per-pixel alpha */
297 kHasAlphaLayer_SaveFlag = 0x04,
298 /** the layer needs to support 8-bits per color component */
299 kFullColorLayer_SaveFlag = 0x08,
300 /**
301 * the layer should clip against the bounds argument
302 *
303 * if SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG is undefined, this is treated a s always on.
304 */
305 kClipToLayer_SaveFlag = 0x10,
306
307 // helper masks for common choices
308 // [deprecated] kMatrixClip_SaveFlag = 0x03,
309 kMatrixClip_SaveFlag = 0x03,
310 #ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
311 kARGB_NoClipLayer_SaveFlag = 0x0F,
312 #endif
313 kARGB_ClipLayer_SaveFlag = 0x1F
314 };
315 #endif
316
317 /** This call saves the current matrix, clip, and drawFilter, and pushes a 288 /** This call saves the current matrix, clip, and drawFilter, and pushes a
318 copy onto a private stack. Subsequent calls to translate, scale, 289 copy onto a private stack. Subsequent calls to translate, scale,
319 rotate, skew, concat or clipRect, clipPath, and setDrawFilter all 290 rotate, skew, concat or clipRect, clipPath, and setDrawFilter all
320 operate on this copy. 291 operate on this copy.
321 When the balancing call to restore() is made, the previous matrix, clip, 292 When the balancing call to restore() is made, the previous matrix, clip,
322 and drawFilter are restored. 293 and drawFilter are restored.
323 294
324 @return The value to pass to restoreToCount() to balance this save() 295 @return The value to pass to restoreToCount() to balance this save()
325 */ 296 */
326 int save(); 297 int save();
(...skipping 15 matching lines...) Expand all
342 return this->saveLayer(&bounds, paint); 313 return this->saveLayer(&bounds, paint);
343 } 314 }
344 315
345 /** 316 /**
346 * Temporary name. 317 * Temporary name.
347 * Will allow any requests for LCD text to be respected, so the caller must be careful to 318 * Will allow any requests for LCD text to be respected, so the caller must be careful to
348 * only draw on top of opaque sections of the layer to get good results. 319 * only draw on top of opaque sections of the layer to get good results.
349 */ 320 */
350 int saveLayerPreserveLCDTextRequests(const SkRect* bounds, const SkPaint* pa int); 321 int saveLayerPreserveLCDTextRequests(const SkRect* bounds, const SkPaint* pa int);
351 322
352 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS
353 /** DEPRECATED - use saveLayer(const SkRect*, const SkPaint*) instead.
354
355 This behaves the same as saveLayer(const SkRect*, const SkPaint*),
356 but it allows fine-grained control of which state bits to be saved
357 (and subsequently restored).
358
359 @param bounds (may be null) This rect, if non-null, is used as a hint to
360 limit the size of the offscreen, and thus drawing may be
361 clipped to it, though that clipping is not guaranteed to
362 happen. If exact clipping is desired, use clipRect().
363 @param paint (may be null) This is copied, and is applied to the
364 offscreen when restore() is called
365 @param flags LayerFlags
366 @return The value to pass to restoreToCount() to balance this save()
367 */
368 SK_ATTR_EXTERNALLY_DEPRECATED("SaveFlags use is deprecated")
369 int saveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags flags);
370 #endif
371
372 /** This behaves the same as save(), but in addition it allocates an 323 /** This behaves the same as save(), but in addition it allocates an
373 offscreen bitmap. All drawing calls are directed there, and only when 324 offscreen bitmap. All drawing calls are directed there, and only when
374 the balancing call to restore() is made is that offscreen transfered to 325 the balancing call to restore() is made is that offscreen transfered to
375 the canvas (or the previous layer). 326 the canvas (or the previous layer).
376 @param bounds (may be null) This rect, if non-null, is used as a hint to 327 @param bounds (may be null) This rect, if non-null, is used as a hint to
377 limit the size of the offscreen, and thus drawing may be 328 limit the size of the offscreen, and thus drawing may be
378 clipped to it, though that clipping is not guaranteed to 329 clipped to it, though that clipping is not guaranteed to
379 happen. If exact clipping is desired, use clipRect(). 330 happen. If exact clipping is desired, use clipRect().
380 @param alpha This is applied to the offscreen when restore() is called. 331 @param alpha This is applied to the offscreen when restore() is called.
381 @return The value to pass to restoreToCount() to balance this save() 332 @return The value to pass to restoreToCount() to balance this save()
382 */ 333 */
383 int saveLayerAlpha(const SkRect* bounds, U8CPU alpha); 334 int saveLayerAlpha(const SkRect* bounds, U8CPU alpha);
384 335
385 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS
386 /** DEPRECATED - use saveLayerAlpha(const SkRect*, U8CPU) instead.
387
388 This behaves the same as saveLayerAlpha(const SkRect*, U8CPU),
389 but it allows fine-grained control of which state bits to be saved
390 (and subsequently restored).
391
392 @param bounds (may be null) This rect, if non-null, is used as a hint to
393 limit the size of the offscreen, and thus drawing may be
394 clipped to it, though that clipping is not guaranteed to
395 happen. If exact clipping is desired, use clipRect().
396 @param alpha This is applied to the offscreen when restore() is called.
397 @param flags LayerFlags
398 @return The value to pass to restoreToCount() to balance this save()
399 */
400 SK_ATTR_EXTERNALLY_DEPRECATED("SaveFlags use is deprecated")
401 int saveLayerAlpha(const SkRect* bounds, U8CPU alpha, SaveFlags flags);
402 #endif
403
404 enum { 336 enum {
405 kIsOpaque_SaveLayerFlag = 1 << 0, 337 kIsOpaque_SaveLayerFlag = 1 << 0,
406 kPreserveLCDText_SaveLayerFlag = 1 << 1, 338 kPreserveLCDText_SaveLayerFlag = 1 << 1,
407 339
408 #ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG 340 #ifdef SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG
409 kDontClipToLayer_Legacy_SaveLayerFlag = kDontClipToLayer_PrivateSaveLaye rFlag, 341 kDontClipToLayer_Legacy_SaveLayerFlag = kDontClipToLayer_PrivateSaveLaye rFlag,
410 #endif 342 #endif
411 }; 343 };
412 typedef uint32_t SaveLayerFlags; 344 typedef uint32_t SaveLayerFlags;
413 345
(...skipping 941 matching lines...) Expand 10 before | Expand all | Expand 10 after
1355 // is not released or deleted by the caller. 1287 // is not released or deleted by the caller.
1356 virtual SkCanvas* canvasForDrawIter(); 1288 virtual SkCanvas* canvasForDrawIter();
1357 1289
1358 // Clip rectangle bounds. Called internally by saveLayer. 1290 // Clip rectangle bounds. Called internally by saveLayer.
1359 // returns false if the entire rectangle is entirely clipped out 1291 // returns false if the entire rectangle is entirely clipped out
1360 // If non-NULL, The imageFilter parameter will be used to expand the clip 1292 // If non-NULL, The imageFilter parameter will be used to expand the clip
1361 // and offscreen bounds for any margin required by the filter DAG. 1293 // and offscreen bounds for any margin required by the filter DAG.
1362 bool clipRectBounds(const SkRect* bounds, SaveLayerFlags, SkIRect* intersect ion, 1294 bool clipRectBounds(const SkRect* bounds, SaveLayerFlags, SkIRect* intersect ion,
1363 const SkImageFilter* imageFilter = NULL); 1295 const SkImageFilter* imageFilter = NULL);
1364 1296
1365 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS
1366 // Needed by SkiaCanvasProxy in Android. Make sure that class is updated
1367 // before removing this method.
1368 static uint32_t SaveLayerFlagsToSaveFlags(SaveLayerFlags);
1369 #endif
1370 private: 1297 private:
1371 static bool BoundsAffectsClip(SaveLayerFlags); 1298 static bool BoundsAffectsClip(SaveLayerFlags);
1372 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS
1373 static uint32_t SaveFlagsToSaveLayerFlags(SaveFlags);
1374 #endif
1375 static SaveLayerFlags LegacySaveFlagsToSaveLayerFlags(uint32_t legacySaveFla gs); 1299 static SaveLayerFlags LegacySaveFlagsToSaveLayerFlags(uint32_t legacySaveFla gs);
f(malita) 2016/01/28 20:42:56 I think we can relocate this helper to SkPicturePl
1376 1300
1377 enum ShaderOverrideOpacity { 1301 enum ShaderOverrideOpacity {
1378 kNone_ShaderOverrideOpacity, //!< there is no overriding shader ( bitmap or image) 1302 kNone_ShaderOverrideOpacity, //!< there is no overriding shader ( bitmap or image)
1379 kOpaque_ShaderOverrideOpacity, //!< the overriding shader is opaque 1303 kOpaque_ShaderOverrideOpacity, //!< the overriding shader is opaque
1380 kNotOpaque_ShaderOverrideOpacity, //!< the overriding shader may not b e opaque 1304 kNotOpaque_ShaderOverrideOpacity, //!< the overriding shader may not b e opaque
1381 }; 1305 };
1382 1306
1383 // notify our surface (if we have one) that we are about to draw, so it 1307 // notify our surface (if we have one) that we are about to draw, so it
1384 // can perform copy-on-write or invalidate any cached images 1308 // can perform copy-on-write or invalidate any cached images
1385 void predrawNotify(bool willOverwritesEntireSurface = false); 1309 void predrawNotify(bool willOverwritesEntireSurface = false);
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1561 fCanvas = NULL; 1485 fCanvas = NULL;
1562 } 1486 }
1563 } 1487 }
1564 1488
1565 private: 1489 private:
1566 SkCanvas* fCanvas; 1490 SkCanvas* fCanvas;
1567 int fSaveCount; 1491 int fSaveCount;
1568 }; 1492 };
1569 #define SkAutoCanvasRestore(...) SK_REQUIRE_LOCAL_VAR(SkAutoCanvasRestore) 1493 #define SkAutoCanvasRestore(...) SK_REQUIRE_LOCAL_VAR(SkAutoCanvasRestore)
1570 1494
1571 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS
1572 static inline SkCanvas::SaveFlags operator|(const SkCanvas::SaveFlags lhs,
1573 const SkCanvas::SaveFlags rhs) {
1574 return static_cast<SkCanvas::SaveFlags>(static_cast<int>(lhs) | static_cast< int>(rhs));
1575 }
1576
1577 static inline SkCanvas::SaveFlags& operator|=(SkCanvas::SaveFlags& lhs,
1578 const SkCanvas::SaveFlags rhs) {
1579 lhs = lhs | rhs;
1580 return lhs;
1581 }
1582 #endif
1583
1584 class SkCanvasClipVisitor { 1495 class SkCanvasClipVisitor {
1585 public: 1496 public:
1586 virtual ~SkCanvasClipVisitor(); 1497 virtual ~SkCanvasClipVisitor();
1587 virtual void clipRect(const SkRect&, SkRegion::Op, bool antialias) = 0; 1498 virtual void clipRect(const SkRect&, SkRegion::Op, bool antialias) = 0;
1588 virtual void clipRRect(const SkRRect&, SkRegion::Op, bool antialias) = 0; 1499 virtual void clipRRect(const SkRRect&, SkRegion::Op, bool antialias) = 0;
1589 virtual void clipPath(const SkPath&, SkRegion::Op, bool antialias) = 0; 1500 virtual void clipPath(const SkPath&, SkRegion::Op, bool antialias) = 0;
1590 }; 1501 };
1591 1502
1592 #endif 1503 #endif
OLDNEW
« no previous file with comments | « no previous file | src/core/SkCanvas.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698