Home | History | Annotate | Download | only in animator
      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 
     27 SkSaveLayer::SkSaveLayer() : paint(NULL), bounds(NULL) {
     28 }
     29 
     30 SkSaveLayer::~SkSaveLayer(){
     31 }
     32 
     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
     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 
     71 void SkSaveLayer::onEndElement(SkAnimateMaker& maker)
     72 {
     73     if (!bounds)
     74         maker.setErrorCode(SkDisplayXMLParserError::kSaveLayerNeedsBounds);
     75     INHERITED::onEndElement(maker);
     76 }
     77