more layers extracted from webkit



git-svn-id: http://skia.googlecode.com/svn/trunk@503 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/utils/SkLayer.cpp b/src/utils/SkLayer.cpp
index fc1f5e5..603cdd1 100644
--- a/src/utils/SkLayer.cpp
+++ b/src/utils/SkLayer.cpp
@@ -2,44 +2,20 @@
 #include "SkCanvas.h"
 
 SkLayer::SkLayer() {
-    m_doRotation = false;
-    m_isFixed = false;
-    m_backgroundColorSet = false;
-
-    m_angleTransform = 0;
     m_opacity = 1;
-
     m_size.set(0, 0);
     m_position.set(0, 0);
-    m_translation.set(0, 0);
     m_anchorPoint.set(0.5, 0.5);
-    m_scale.set(1, 1);
-
-    m_backgroundColor = 0;
 
     fMatrix.reset();
     fChildrenMatrix.reset();
 }
 
 SkLayer::SkLayer(const SkLayer& src) {
-    m_doRotation = src.m_doRotation;
-    m_isFixed = src.m_isFixed;
-    m_backgroundColorSet = src.m_backgroundColorSet;
-
-    m_angleTransform = src.m_angleTransform;
     m_opacity = src.m_opacity;
     m_size = src.m_size;
     m_position = src.m_position;
-    m_translation = src.m_translation;
     m_anchorPoint = src.m_anchorPoint;
-    m_scale = src.m_scale;
-
-    m_fixedLeft = src.m_fixedLeft;
-    m_fixedTop = src.m_fixedTop;
-    m_fixedRight = src.m_fixedRight;
-    m_fixedBottom = src.m_fixedBottom;
-
-    m_backgroundColor = src.m_backgroundColor;
 
     fMatrix = src.fMatrix;
     fChildrenMatrix = src.fChildrenMatrix;
@@ -83,43 +59,54 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-void SkLayer::onSetupCanvas(SkCanvas* canvas, SkScalar, const SkRect*) {
-    SkScalar tx = m_position.fX;
-    SkScalar ty = m_position.fY;
-    canvas->translate(tx, ty);
-
-    // now apply our matrix about the anchorPoint
-    tx = SkScalarMul(m_anchorPoint.fX, m_size.width());
-    ty = SkScalarMul(m_anchorPoint.fY, m_size.height());
-    canvas->translate(tx, ty);
-    canvas->concat(this->getMatrix());
-    canvas->translate(-tx, -ty);
+void SkLayer::onDraw(SkCanvas*, SkScalar opacity) {
+//    SkDebugf("----- no onDraw for %p\n", this);
 }
 
-void SkLayer::onDraw(SkCanvas*, SkScalar opacity, const SkRect* viewport) {}
+#include "SkString.h"
 
-void SkLayer::draw(SkCanvas* canvas, SkScalar opacity, const SkRect* viewport) {
+void SkLayer::draw(SkCanvas* canvas, SkScalar opacity) {
 #if 0
-    SkDebugf("--- drawlayer %p anchor [%g %g] scale [%g %g]\n", this, m_anchorPoint.fX, m_anchorPoint.fY,
-             m_scale.fX, m_scale.fY);
+    SkString str1, str2;
+ //   this->getMatrix().toDumpString(&str1);
+ //   this->getChildrenMatrix().toDumpString(&str2);
+    SkDebugf("--- drawlayer %p opacity %g size [%g %g] pos [%g %g] matrix %s children %s\n",
+             this, opacity * this->getOpacity(), m_size.width(), m_size.height(),
+             m_position.fX, m_position.fY, str1.c_str(), str2.c_str());
 #endif
 
     opacity = SkScalarMul(opacity, this->getOpacity());
     if (opacity <= 0 || this->getSize().isEmpty()) {
+#if 0
+        SkDebugf("---- abort drawing %p opacity %g size [%g %g]\n",
+                 this, opacity, m_size.width(), m_size.height());
+#endif
         return;
     }
 
-    SkAutoCanvasRestore acr(canvas, false);
-    canvas->save(SkCanvas::kMatrix_SaveFlag);
+    SkAutoCanvasRestore acr(canvas, true);
 
-    this->onSetupCanvas(canvas, opacity, viewport);
-    this->onDraw(canvas, opacity, viewport);
+    // update the matrix
+    {
+        SkScalar tx = m_position.fX;
+        SkScalar ty = m_position.fY;
+        canvas->translate(tx, ty);
+        
+        // now apply our matrix about the anchorPoint
+        tx = SkScalarMul(m_anchorPoint.fX, m_size.width());
+        ty = SkScalarMul(m_anchorPoint.fY, m_size.height());
+        canvas->translate(tx, ty);
+        canvas->concat(this->getMatrix());
+        canvas->translate(-tx, -ty);
+    }
+
+    this->onDraw(canvas, opacity);
 
     int count = this->countChildren();
     if (count > 0) {
         canvas->concat(this->getChildrenMatrix());
         for (int i = 0; i < count; i++) {
-            this->getChild(i)->draw(canvas, opacity, viewport);
+            this->getChild(i)->draw(canvas, opacity);
         }
     }
 }