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 "SkDrawRectangle.h"
     11 #include "SkAnimateMaker.h"
     12 #include "SkCanvas.h"
     13 #include "SkMatrixParts.h"
     14 #include "SkPaint.h"
     15 #include "SkScript.h"
     16 
     17 enum SkRectangle_Properties {
     18     SK_PROPERTY(height),
     19     SK_PROPERTY(needsRedraw),
     20     SK_PROPERTY(width)
     21 };
     22 
     23 #if SK_USE_CONDENSED_INFO == 0
     24 
     25 const SkMemberInfo SkDrawRect::fInfo[] = {
     26     SK_MEMBER_ALIAS(bottom, fRect.fBottom, Float),
     27     SK_MEMBER_PROPERTY(height, Float),
     28     SK_MEMBER_ALIAS(left, fRect.fLeft, Float),
     29     SK_MEMBER_PROPERTY(needsRedraw, Boolean),
     30     SK_MEMBER_ALIAS(right, fRect.fRight, Float),
     31     SK_MEMBER_ALIAS(top, fRect.fTop, Float),
     32     SK_MEMBER_PROPERTY(width, Float)
     33 };
     34 
     35 #endif
     36 
     37 DEFINE_GET_MEMBER(SkDrawRect);
     38 
     39 SkDrawRect::SkDrawRect() : fParent(NULL) {
     40     fRect.setEmpty();
     41 }
     42 
     43 void SkDrawRect::dirty() {
     44     if (fParent)
     45         fParent->dirty();
     46 }
     47 
     48 bool SkDrawRect::draw(SkAnimateMaker& maker) {
     49     SkBoundableAuto boundable(this, maker);
     50     maker.fCanvas->drawRect(fRect, *maker.fPaint);
     51     return false;
     52 }
     53 
     54 #ifdef SK_DUMP_ENABLED
     55 void SkDrawRect::dump(SkAnimateMaker* maker) {
     56     dumpBase(maker);
     57     SkDebugf("left=\"%g\" top=\"%g\" right=\"%g\" bottom=\"%g\" />\n",
     58         SkScalarToFloat(fRect.fLeft), SkScalarToFloat(fRect.fTop), SkScalarToFloat(fRect.fRight),
     59         SkScalarToFloat(fRect.fBottom));
     60 }
     61 #endif
     62 
     63 SkDisplayable* SkDrawRect::getParent() const {
     64     return fParent;
     65 }
     66 
     67 bool SkDrawRect::getProperty(int index, SkScriptValue* value) const {
     68     SkScalar result;
     69     switch (index) {
     70         case SK_PROPERTY(height):
     71             result = fRect.height();
     72             break;
     73         case SK_PROPERTY(needsRedraw):
     74             value->fType = SkType_Boolean;
     75             value->fOperand.fS32 = fBounds.isEmpty() == false;
     76             return true;
     77         case SK_PROPERTY(width):
     78             result = fRect.width();
     79             break;
     80         default:
     81             SkASSERT(0);
     82             return false;
     83     }
     84     value->fType = SkType_Float;
     85     value->fOperand.fScalar = result;
     86     return true;
     87 }
     88 
     89 
     90 bool SkDrawRect::setParent(SkDisplayable* parent) {
     91     fParent = parent;
     92     return false;
     93 }
     94 
     95 bool SkDrawRect::setProperty(int index, SkScriptValue& value) {
     96     SkScalar scalar = value.fOperand.fScalar;
     97     switch (index) {
     98         case SK_PROPERTY(height):
     99             SkASSERT(value.fType == SkType_Float);
    100             fRect.fBottom = scalar + fRect.fTop;
    101             return true;
    102         case SK_PROPERTY(needsRedraw):
    103             return false;
    104         case SK_PROPERTY(width):
    105             SkASSERT(value.fType == SkType_Float);
    106             fRect.fRight = scalar + fRect.fLeft;
    107             return true;
    108         default:
    109             SkASSERT(0);
    110     }
    111     return false;
    112 }
    113 
    114 #if SK_USE_CONDENSED_INFO == 0
    115 
    116 const SkMemberInfo SkRoundRect::fInfo[] = {
    117     SK_MEMBER_INHERITED,
    118     SK_MEMBER(rx, Float),
    119     SK_MEMBER(ry, Float),
    120 };
    121 
    122 #endif
    123 
    124 DEFINE_GET_MEMBER(SkRoundRect);
    125 
    126 SkRoundRect::SkRoundRect() : rx(0), ry(0) {
    127 }
    128 
    129 bool SkRoundRect::draw(SkAnimateMaker& maker) {
    130     SkBoundableAuto boundable(this, maker);
    131     maker.fCanvas->drawRoundRect(fRect, rx, ry, *maker.fPaint);
    132     return false;
    133 }
    134 
    135 #ifdef SK_DUMP_ENABLED
    136 void SkRoundRect::dump(SkAnimateMaker* maker) {
    137     dumpBase(maker);
    138     SkDebugf("left=\"%g\" top=\"%g\" right=\"%g\" bottom=\"%g\" rx=\"%g\" ry=\"%g\" />\n",
    139             SkScalarToFloat(fRect.fLeft), SkScalarToFloat(fRect.fTop), SkScalarToFloat(fRect.fRight),
    140             SkScalarToFloat(fRect.fBottom), SkScalarToFloat(rx), SkScalarToFloat(ry));
    141 }
    142 #endif
    143 
    144 
    145 
    146