OSDN Git Service

fillStyle の render code (実装途中)
authorYoshihiro Yamazaki <yoya@awm.jp>
Sat, 22 Dec 2012 10:22:55 +0000 (19:22 +0900)
committerYoshihiro Yamazaki <yoya@awm.jp>
Sat, 22 Dec 2012 10:22:55 +0000 (19:22 +0900)
src/shape.js

index 4b3e589..fcca172 100644 (file)
@@ -13,18 +13,84 @@ FlappShape = function(matrix, colorTransform) {
     this.canvas = document.createElement('canvas');
     this.canvas.width = 240; // XXX
     this.canvas.height = 240; // XXX
-    this.renderCode = "";
+    this.renderCode = ""; // new Function("ctx,dict", "ctx.line...")
 };
 
 FlappShape.prototype = {
     loadShapeTag: function(shape, dict) {
-        ;
+       var rca = []; // rca
+       var fillStyles = shape.fillStyles;
+       var lineStyles = shape.lineStyles;
+       var fillEdges = shape.edges.fillEdges;
+       var lineEdges = shape.edges.lineEdges;
+       for (var fillStyle in fillEdges) {
+           // style
+           var style = fillStyles[fillStyle - 1];
+           console.log('style');
+           console.log(style);
+           console.log(fillStyle);
+           console.log(fillStyles);
+           var styleCode = null;
+           switch (style.type) {
+           case 00:
+               styleCode = style.color.toCSS();
+               break;
+            case 0x40:
+            case 0x41:
+            case 0x42:
+            case 0x43:
+               if (style.bitmapId === 65535) {
+                   // nothing to do
+               } else {
+                   rca.push("var bitmap = dict.get(style.bitmapId);");
+                   rca.push("var image = bitmap.image;");
+                   rca.push("var c = createImage(image.width, image.height);");
+                   if ((style.type === 0x40) || (style.type ===  0x42)) {
+                        rca.push("var pattern = ctx.createPattern(c, 'repeat');");
+                    } else {
+                        rca.push("var pattern = ctx.createPattern(c, 'no-repeat');");
+                       ;
+                    }
+                   
+                   styleCode = "pattern;";
+               }
+               break;
+           }
+           if (styleCode !== null) {
+               rca.push("ctx.fillStyle = '"+styleCode+"';");
+           }
+           var edgeInfoList = fillEdges[fillStyle];
+           for (var i1 = 0, l1 = edgeInfoList.length ; i1 < l1 ; i1++) {
+               
+               var edges = edgeInfoList[i1].edges;
+               var edgesUsed = new Uint8Array(edges.length); // 0 initialize ?
+               if (edges.prev === null || edges.next === null) {
+                   console.warn("edges.prev === null || edges.next === null");
+                   continue;
+               }
+               for (var i2 = 0, l2 = edges.length ; i2 < l2; i2++) {
+                   var edge = edges[i2];
+                   if (edgesUsed[i2]) {
+                       continue;
+                   }
+               }
+               var edge = edges[i2];
+                rca.push("ctx.beginPath(edge[0], edge[1]);");
+               edgesUsed[i2] = 1; // used
+               rca.push("");
+           }
+       }
+       this.renderCode = rca.join("\n");
+       console.debug(this.renderCode);
+       // 
     },
-    render: function(canvas) {
-        
+    render: function(canvas, dict) {
+       console.debug("FlappShape::render");
+        var ret = new Function("ctx,dict", this.renderCode);
+       console.debug(ret);
+
     },
     destroy: function(canvas) {
-        ;
     }
 };