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 "SkDraw3D.h"
     11 #include "SkAnimateMaker.h"
     12 #include "SkCanvas.h"
     13 #include "SkTypedArray.h"
     14 
     15 #if SK_USE_CONDENSED_INFO == 0
     16 
     17 const SkMemberInfo Sk3D_Point::fInfo[] = {
     18     SK_MEMBER_ALIAS(x, fPoint.fX, Float),
     19     SK_MEMBER_ALIAS(y, fPoint.fY, Float),
     20     SK_MEMBER_ALIAS(z, fPoint.fZ, Float)
     21 };
     22 
     23 #endif
     24 
     25 DEFINE_NO_VIRTUALS_GET_MEMBER(Sk3D_Point);
     26 
     27 Sk3D_Point::Sk3D_Point() {
     28     fPoint.set(0, 0, 0);
     29 }
     30 
     31 #if SK_USE_CONDENSED_INFO == 0
     32 
     33 const SkMemberInfo Sk3D_Camera::fInfo[] = {
     34     SK_MEMBER_ALIAS(axis, fCamera.fAxis, 3D_Point),
     35     SK_MEMBER(hackHeight, Float),
     36     SK_MEMBER(hackWidth, Float),
     37     SK_MEMBER_ALIAS(location, fCamera.fLocation, 3D_Point),
     38     SK_MEMBER_ALIAS(observer, fCamera.fObserver, 3D_Point),
     39     SK_MEMBER(patch, 3D_Patch),
     40     SK_MEMBER_ALIAS(zenith, fCamera.fZenith, 3D_Point),
     41 };
     42 
     43 #endif
     44 
     45 DEFINE_GET_MEMBER(Sk3D_Camera);
     46 
     47 Sk3D_Camera::Sk3D_Camera() : hackWidth(0), hackHeight(0), patch(NULL) {
     48 }
     49 
     50 Sk3D_Camera::~Sk3D_Camera() {
     51 }
     52 
     53 bool Sk3D_Camera::draw(SkAnimateMaker& maker) {
     54     fCamera.update();
     55     SkMatrix matrix;
     56     fCamera.patchToMatrix(patch->fPatch, &matrix);
     57     matrix.preTranslate(hackWidth / 2, -hackHeight / 2);
     58     matrix.postTranslate(hackWidth / 2, hackHeight / 2);
     59     maker.fCanvas->concat(matrix);
     60     return false;
     61 }
     62 
     63 
     64 enum Sk3D_Patch_Functions {
     65     SK_FUNCTION(rotateDegrees)
     66 };
     67 
     68 const SkFunctionParamType Sk3D_Patch::fFunctionParameters[] = {
     69     (SkFunctionParamType) SkType_Float,
     70     (SkFunctionParamType) SkType_Float,
     71     (SkFunctionParamType) SkType_Float,
     72     (SkFunctionParamType) 0 // terminator for parameter list (there may be multiple parameter lists)
     73 };
     74 
     75 #if SK_USE_CONDENSED_INFO == 0
     76 
     77 const SkMemberInfo Sk3D_Patch::fInfo[] = {
     78     SK_MEMBER_ALIAS(origin, fPatch.fOrigin, 3D_Point),
     79     SK_MEMBER_FUNCTION(rotateDegrees, Float),
     80     SK_MEMBER_ALIAS(u, fPatch.fU, 3D_Point),
     81     SK_MEMBER_ALIAS(v, fPatch.fV, 3D_Point)
     82 };
     83 
     84 #endif
     85 
     86 DEFINE_GET_MEMBER(Sk3D_Patch);
     87 
     88 void Sk3D_Patch::executeFunction(SkDisplayable* target, int index,
     89         SkTDArray<SkScriptValue>& parameters, SkDisplayTypes type,
     90         SkScriptValue* ) {
     91     SkASSERT(target == this);
     92     switch (index) {
     93         case SK_FUNCTION(rotateDegrees):
     94             SkASSERT(parameters.count() == 3);
     95             SkASSERT(type == SkType_Float);
     96             fPatch.rotateDegrees(parameters[0].fOperand.fScalar,
     97                 parameters[1].fOperand.fScalar, parameters[2].fOperand.fScalar);
     98             break;
     99         default:
    100             SkASSERT(0);
    101     }
    102 }
    103 
    104 const SkFunctionParamType* Sk3D_Patch::getFunctionsParameters() {
    105     return fFunctionParameters;
    106 }
    107