Deprecate SaveFlags use in the public SkCanvas API.

Because we still have internal users for now (to support the deprecated
mode), this CL introduces an external-only variant of deprecation.

Chromium is no longer using the deprecated methods, but Android may need
to suppress SK_ATTR_EXTERNALLY_DEPRECATED warnings.

R=reed@google.com, robertphillips@google.com, scroggo@google.com, bungeman@google.com, mtklein@google.com

Author: fmalita@chromium.org

Review URL: https://codereview.chromium.org/246023008

git-svn-id: http://skia.googlecode.com/svn/trunk@14367 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
commit-bot@chromium.org 2014-04-24 21:51:58 +00:00
parent 0b27f2ec0f
commit d70fa2013a
5 changed files with 72 additions and 6 deletions

View File

@ -12,6 +12,7 @@
'target_defaults': {
'defines': [
'SK_INTERNAL',
'SK_GAMMA_SRGB',
'SK_GAMMA_APPLY_TO_A8',
'SK_SCALAR_TO_FLOAT_EXCLUDED', # temporary to allow Chrome to call SkFloatToScalar

View File

@ -309,6 +309,8 @@
'SK_SUPPORT_LEGACY_BLURDRAWLOOPERCONSTRUCTORS',
# Needed until we fix skbug.com/2440.
'SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG',
# Transitional, for deprecated SkCanvas::SaveFlags methods.
'SK_ATTR_DEPRECATED=SK_NOTHING_ARG1',
],
}],

View File

@ -330,6 +330,16 @@ public:
operate on this copy.
When the balancing call to restore() is made, the previous matrix, clip,
and drawFilter are restored.
@return The value to pass to restoreToCount() to balance this save()
*/
int save();
/** DEPRECATED - use save() instead.
This behaves the same as save(), but it allows fine-grained control of
which state bits to be saved (and subsequently restored).
@param flags The flags govern what portion of the Matrix/Clip/drawFilter
state the save (and matching restore) effect. For example,
if only kMatrix is specified, then only the matrix state
@ -338,12 +348,29 @@ public:
by calls to save/restore.
@return The value to pass to restoreToCount() to balance this save()
*/
int save(SaveFlags flags = kMatrixClip_SaveFlag);
SK_ATTR_EXTERNALLY_DEPRECATED("SaveFlags use is deprecated")
int save(SaveFlags flags);
/** This behaves the same as save(), but in addition it allocates an
offscreen bitmap. All drawing calls are directed there, and only when
the balancing call to restore() is made is that offscreen transfered to
the canvas (or the previous layer).
@param bounds (may be null) This rect, if non-null, is used as a hint to
limit the size of the offscreen, and thus drawing may be
clipped to it, though that clipping is not guaranteed to
happen. If exact clipping is desired, use clipRect().
@param paint (may be null) This is copied, and is applied to the
offscreen when restore() is called
@return The value to pass to restoreToCount() to balance this save()
*/
int saveLayer(const SkRect* bounds, const SkPaint* paint);
/** DEPRECATED - use saveLayer(const SkRect*, const SkPaint*) instead.
This behaves the same as saveLayer(const SkRect*, const SkPaint*),
but it allows fine-grained control of which state bits to be saved
(and subsequently restored).
@param bounds (may be null) This rect, if non-null, is used as a hint to
limit the size of the offscreen, and thus drawing may be
clipped to it, though that clipping is not guaranteed to
@ -353,13 +380,28 @@ public:
@param flags LayerFlags
@return The value to pass to restoreToCount() to balance this save()
*/
int saveLayer(const SkRect* bounds, const SkPaint* paint,
SaveFlags flags = kARGB_ClipLayer_SaveFlag);
SK_ATTR_EXTERNALLY_DEPRECATED("SaveFlags use is deprecated")
int saveLayer(const SkRect* bounds, const SkPaint* paint, SaveFlags flags);
/** This behaves the same as save(), but in addition it allocates an
offscreen bitmap. All drawing calls are directed there, and only when
the balancing call to restore() is made is that offscreen transfered to
the canvas (or the previous layer).
@param bounds (may be null) This rect, if non-null, is used as a hint to
limit the size of the offscreen, and thus drawing may be
clipped to it, though that clipping is not guaranteed to
happen. If exact clipping is desired, use clipRect().
@param alpha This is applied to the offscreen when restore() is called.
@return The value to pass to restoreToCount() to balance this save()
*/
int saveLayerAlpha(const SkRect* bounds, U8CPU alpha);
/** DEPRECATED - use saveLayerAlpha(const SkRect*, U8CPU) instead.
This behaves the same as saveLayerAlpha(const SkRect*, U8CPU),
but it allows fine-grained control of which state bits to be saved
(and subsequently restored).
@param bounds (may be null) This rect, if non-null, is used as a hint to
limit the size of the offscreen, and thus drawing may be
clipped to it, though that clipping is not guaranteed to
@ -368,8 +410,8 @@ public:
@param flags LayerFlags
@return The value to pass to restoreToCount() to balance this save()
*/
int saveLayerAlpha(const SkRect* bounds, U8CPU alpha,
SaveFlags flags = kARGB_ClipLayer_SaveFlag);
SK_ATTR_EXTERNALLY_DEPRECATED("SaveFlags use is deprecated")
int saveLayerAlpha(const SkRect* bounds, U8CPU alpha, SaveFlags flags);
/** This call balances a previous call to save(), and is used to remove all
modifications to the matrix/clip/drawFilter state since the last save

View File

@ -323,6 +323,14 @@
# define SK_ATTR_DEPRECATED(msg) SK_ATTRIBUTE(deprecated)
#endif
#if !defined(SK_ATTR_EXTERNALLY_DEPRECATED)
# if !defined(SK_INTERNAL)
# define SK_ATTR_EXTERNALLY_DEPRECATED(msg) SK_ATTR_DEPRECATED(msg)
# else
# define SK_ATTR_EXTERNALLY_DEPRECATED(msg)
# endif
#endif
/**
* If your judgment is better than the compiler's (i.e. you've profiled it),
* you can use SK_ALWAYS_INLINE to force inlining. E.g.

View File

@ -834,6 +834,11 @@ void SkCanvas::willSave(SaveFlags) {
// Do nothing. Subclasses may do something.
}
int SkCanvas::save() {
this->willSave(kMatrixClip_SaveFlag);
return this->internalSave(kMatrixClip_SaveFlag);
}
int SkCanvas::save(SaveFlags flags) {
this->willSave(flags);
// call shared impl
@ -898,9 +903,13 @@ SkCanvas::SaveLayerStrategy SkCanvas::willSaveLayer(const SkRect*, const SkPaint
return kFullLayer_SaveLayerStrategy;
}
int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint) {
SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, kARGB_ClipLayer_SaveFlag);
return this->internalSaveLayer(bounds, paint, kARGB_ClipLayer_SaveFlag, false, strategy);
}
int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint,
SaveFlags flags) {
// Overriding classes may return false to signal that we don't need to create a layer.
SaveLayerStrategy strategy = this->willSaveLayer(bounds, paint, flags);
return this->internalSaveLayer(bounds, paint, flags, false, strategy);
}
@ -975,6 +984,10 @@ int SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint, Save
return count;
}
int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha) {
return this->saveLayerAlpha(bounds, alpha, kARGB_ClipLayer_SaveFlag);
}
int SkCanvas::saveLayerAlpha(const SkRect* bounds, U8CPU alpha,
SaveFlags flags) {
if (0xFF == alpha) {