• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /*
3  * Copyright 2006 The Android Open Source Project
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 
10 #include "SkDrawSaveLayer.h"
11 #include "SkAnimateMaker.h"
12 #include "SkCanvas.h"
13 #include "SkDrawPaint.h"
14 #include "SkDrawRectangle.h"
15 
16 #if SK_USE_CONDENSED_INFO == 0
17 
18 const SkMemberInfo SkSaveLayer::fInfo[] = {
19     SK_MEMBER(bounds, Rect),
20     SK_MEMBER(paint, Paint)
21 };
22 
23 #endif
24 
25 DEFINE_GET_MEMBER(SkSaveLayer);
26 
SkSaveLayer()27 SkSaveLayer::SkSaveLayer() : paint(NULL), bounds(NULL) {
28 }
29 
~SkSaveLayer()30 SkSaveLayer::~SkSaveLayer(){
31 }
32 
draw(SkAnimateMaker & maker)33 bool SkSaveLayer::draw(SkAnimateMaker& maker)
34 {
35     if (!bounds) {
36         return false;
37     }
38     SkPaint* save = maker.fPaint;
39     //paint is an SkDrawPaint
40     if (paint)
41     {
42         SkPaint realPaint;
43         paint->setupPaint(&realPaint);
44         maker.fCanvas->saveLayer(&bounds->fRect, &realPaint, SkCanvas::kHasAlphaLayer_SaveFlag);
45     }
46     else
47         maker.fCanvas->saveLayer(&bounds->fRect, save, SkCanvas::kHasAlphaLayer_SaveFlag);
48     SkPaint local = SkPaint(*maker.fPaint);
49     maker.fPaint = &local;
50     bool result = INHERITED::draw(maker);
51     maker.fPaint = save;
52     maker.fCanvas->restore();
53     return result;
54 }
55 
56 #ifdef SK_DUMP_ENABLED
dump(SkAnimateMaker * maker)57 void SkSaveLayer::dump(SkAnimateMaker* maker)
58 {
59     dumpBase(maker);
60     //would dump enabled be defined but not debug?
61 #ifdef SK_DEBUG
62     if (paint)
63         SkDebugf("paint=\"%s\" ", paint->id);
64     if (bounds)
65         SkDebugf("bounds=\"%s\" ", bounds->id);
66 #endif
67     dumpDrawables(maker);
68 }
69 #endif
70 
onEndElement(SkAnimateMaker & maker)71 void SkSaveLayer::onEndElement(SkAnimateMaker& maker)
72 {
73     if (!bounds)
74         maker.setErrorCode(SkDisplayXMLParserError::kSaveLayerNeedsBounds);
75     INHERITED::onEndElement(maker);
76 }
77