チェンジセット 1565
- コミット日時:
- 2008/10/10 17:16:12 (3 年前)
- ファイル:
-
- ruby/jsplash/trunk/client2/demo_20081001.xml (更新) (1 diff)
- ruby/jsplash/trunk/client2/index.xml (更新) (1 diff)
- ruby/jsplash/trunk/client2/jsplash/objects.js (更新) (11 diffs)
- ruby/jsplash/trunk/client2/jsplash/shaperenderer.js (更新) (3 diffs)
- ruby/jsplash/trunk/client2/jsplash/tags.js (更新) (2 diffs)
- ruby/jsplash/trunk/client2/rocket_demo.xml (更新) (1 diff)
- ruby/jsplash/trunk/jextract.rb (更新) (3 diffs)
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
ruby/jsplash/trunk/client2/demo_20081001.xml
r1561 r1565 56 56 <p id="statusout"> </p> 57 57 <p>playing on javascript with JSplash</p> 58 <p id="sout">starting <em>JSplash Player 0.4. 8</em>...<br />-------------------------------------<br /></p>58 <p id="sout">starting <em>JSplash Player 0.4.9</em>...<br />-------------------------------------<br /></p> 59 59 <svg id="svgrt" xmlns="http://www.w3.org/2000/svg" style="width: 100px; height: 100px;"> 60 60 </svg> ruby/jsplash/trunk/client2/index.xml
r1561 r1565 54 54 <div id="progbar"><div> </div></div> 55 55 <p id="statusout"> </p> 56 <p id="sout"><em>JSplash Player</em> 0.4. 8<br />-------------------------------------<br /></p>56 <p id="sout"><em>JSplash Player</em> 0.4.9<br />-------------------------------------<br /></p> 57 57 <svg id="svgrt" xmlns="http://www.w3.org/2000/svg" style="width: 100px; height: 100px;"> 58 58 </svg> ruby/jsplash/trunk/client2/jsplash/objects.js
r1561 r1565 45 45 this.appended = false; 46 46 this.shape_disposed = false; 47 this.overridden = false; 47 48 48 49 this.mousePos = {x:0, y:0}; … … 104 105 this.parent.removeForce(this); 105 106 delete this.g; 107 this.overridden = null; 106 108 return true; 107 109 } … … 188 190 }, 189 191 190 placeObject: function(depth, oid, iname, clip_depth, replace_flg, inherit_transform ) {192 placeObject: function(depth, oid, iname, clip_depth, replace_flg, inherit_transform, inherit_color_transform) { 191 193 this.clipMap[depth] = clip_depth || this.clipMap[depth]; 192 194 … … 201 203 if (po) { 202 204 po.resume(depth); 203 if (inherit_transform && this.depthMap[depth]) 204 po.copyTransformFrom(this.depthMap[depth]); 205 if (this.depthMap[depth]) { 206 if (inherit_transform) 207 po.copyTransformFrom(this.depthMap[depth]); 208 if (inherit_color_transform) 209 po.copyColorTransform(this.depthMap[depth]); 210 } 205 211 206 212 this.depthMap[depth] = po; 207 213 if (po.isExecutable() && oid /* new instance */ ) // This is needed to execute descendant tags! 208 214 this.executor.registerObject(po); 209 215 216 if (clip_depth) 217 po.hide(); 210 218 } 211 219 … … 227 235 inst.renderer = klass.renderer; 228 236 237 inst.render(); 229 238 /* when replace previous frame */ 230 239 var g_before = null; … … 232 241 if (inherit_transform) 233 242 inst.copyTransformFrom(replaced); 243 244 if (inherit_color_transform) { 245 inst.copyColorTransform(replaced); 246 } 247 234 248 g_before = replaced.getActiveViewElement(); /* to correct draw order*/ 235 249 } 236 250 237 inst.render();238 251 if (clip_depth) 239 252 inst.hide(); … … 295 308 // if (inst.taglist) 296 309 // console.log( " child has tags len="+inst.taglist.length ); 310 297 311 298 312 return inst; … … 365 379 } 366 380 367 if (!skip_visual_change) 381 if (!skip_visual_change) 382 { 368 383 this.applyClippers(); 384 this.applyColorOverriding(this.overridden); 385 } 369 386 370 387 if (this.g && this.g.childNodes.length > 0 && !this.klass.isShapeObject) … … 373 390 374 391 setAlpha: function(a) { 392 if (a > 0.99) a = 1; 375 393 this.g.style.opacity = a; 376 394 }, … … 408 426 */ 409 427 428 // TODO: cancel overriding 429 resetColorTransform: function() { 430 if (this.overridden == null) 431 return; 432 433 this.cancelColorOverriding(); 434 console.log(this); 435 }, 436 437 cancelColorOverriding: function() { 438 if (this.klass.isShapeObject) { 439 if (this.overridden == null) 440 return; 441 442 var list = this.g.childNodes; 443 var len = list.length; 444 for (var i = 0;i < len;i++) { 445 var ch = list[i]; 446 if (ch.original_fill) ch.setAttribute("fill" , ch.original_fill); 447 if (ch.original_stroke) ch.setAttribute("stroke", ch.original_stroke); 448 } 449 } 450 else { 451 for (var d in this.depthMap) 452 this.depthMap[d].cancelColorOverriding(); 453 } 454 455 this.overridden = null; 456 }, 457 458 overrideShapeColor: function(r, g, b) { 459 var clr = "rgb("+r+","+g+","+b+")"; 460 if (this.klass.isShapeObject) 461 this.applyColorOverriding(clr); 462 else 463 this.overridden = clr; 464 465 }, 466 467 applyColorOverriding: function(clr) { 468 if (!this.overridden && !clr) return; 469 if (this.klass.isShapeObject) { 470 if (this.overridden == clr) 471 return; 472 473 if (this.renderer.isPrimaryCache(this.g)) { 474 this.renderer.savePrimaryCache(); 475 } 476 477 var list = this.g.childNodes; 478 var len = list.length; 479 for (var i = 0;i < len;i++) { 480 var ch = list[i]; 481 var f = ch.getAttribute("fill"); 482 if (f && f != "none") { 483 if (!ch.original_fill) 484 ch.original_fill = f; 485 486 ch.setAttribute("fill", clr); 487 } 488 489 var st = ch.getAttribute("stroke"); 490 if (st && st != "none") { 491 if (!ch.original_stroke) 492 ch.original_stroke = st; 493 494 ch.setAttribute("stroke", clr); 495 } 496 497 } 498 } 499 else { 500 for (var d in this.depthMap) 501 this.depthMap[d].applyColorOverriding(clr); 502 } 503 504 this.overridden = clr; 505 }, 506 410 507 getActiveViewElement: function() { 411 508 return this.g; … … 557 654 toString: function() { 558 655 return "Inst@"+this.klass+" belongs to " +this.parent; 656 }, 657 658 copyColorTransform: function(src) { 659 if (src.overridden) { 660 this.applyColorOverriding(src.overridden); 661 } 559 662 }, 560 663 ruby/jsplash/trunk/client2/jsplash/shaperenderer.js
r1561 r1565 656 656 }, 657 657 658 isPrimaryCache: function(g) { 659 if (!this.pathCache) 660 return false; 661 662 return this.pathCache.primaryCache == g; 663 }, 664 665 savePrimaryCache: function() { 666 if (!this.pathCache) 667 return; 668 669 this.pathCache.savePrimaryCache(); 670 }, 671 658 672 buildSVG: function(g, force_cache) { 659 673 if (!this.pathCache && (this.hitCount == 2 || force_cache)) { 660 this.pathCache = new JSplash.ShapeRenderer.PathCache( );674 this.pathCache = new JSplash.ShapeRenderer.PathCache(g); 661 675 this.do_cache = true; 662 676 } … … 969 983 JSplash.ShapeRenderer.PathCache = Class.create(); 970 984 JSplash.ShapeRenderer.PathCache.prototype = { 971 initialize: function() { 985 initialize: function(prim) { 986 this.primaryCache = prim; 972 987 this.stocks = []; 973 988 }, 974 989 975 990 stock: function(elem) { 976 this.stocks.push(elem /* not clone! don't modify ... */ );991 this.stocks.push(elem /* not clone! don't modify children... */ ); 977 992 }, 978 993 … … 981 996 for (var i = 0;i < len;i++) 982 997 target.appendChild( this.stocks[i].cloneNode(false) ); 998 }, 999 1000 savePrimaryCache: function() { 1001 this.primaryCache = null; 1002 var new_list = []; 1003 var len = this.stocks.length; 1004 for (var i = 0;i < len;i++) 1005 new_list.push( this.stocks[i].cloneNode(false) ); 1006 1007 this.stocks = new_list; 983 1008 } 984 1009 } ruby/jsplash/trunk/client2/jsplash/tags.js
r1561 r1565 12 12 tPlaceObject2: function(data, owner) { 13 13 var has_trans = (data.mov || data.scl || data.skw); 14 var has_clrtrans = (data.cfct || data.cofs); 14 15 15 var inst = owner.placeObject(data.d, data.id, data.name, data.cl, data.r, (data.r && !has_trans) );16 var inst = owner.placeObject(data.d, data.id, data.name, data.cl, data.r, (data.r && !has_trans), (data.r && !has_clrtrans && !data.ctr)); 16 17 if (!inst) { 17 18 console.warn("WARNING: unregistered object id="+data.d); … … 44 45 } 45 46 46 if ( data.cfct || data.cofs) {47 if (has_clrtrans) { 47 48 /* Google Chrome does not support feColorMatrix now. */ 48 49 49 // ...but alpha transform is available with opacity style. 50 // but, when factor=0, ColorTransform can be represented as solid fill 51 if (data.cfct) { 52 if (data.cfct[0] < 0.1 && data.cfct[1] < 0.1 && data.cfct[2] < 0.1) { 53 var cr = 0; 54 var cg = 0; 55 var cb = 0; 56 if (data.cofs) { 57 cr = Math.floor(data.cofs[0]*255); 58 cg = Math.floor(data.cofs[1]*255); 59 cb = Math.floor(data.cofs[2]*255); 60 } 61 inst.overrideShapeColor(cr, cg, cb); 62 } 63 } 64 65 // in addition, alpha transform is available with opacity style. 50 66 var a = data.cfct ? data.cfct[3] : 1 51 67 a += data.cofs ? data.cofs[3] : 0; 52 68 53 if (a <= 0.99) 54 inst.setAlpha(a); 69 inst.setAlpha(a); 70 } 71 else if (data.ctr) { 72 inst.resetColorTransform(); 73 inst.setAlpha(1); 55 74 } 56 75 }, ruby/jsplash/trunk/client2/rocket_demo.xml
r1561 r1565 56 56 <p id="statusout"> </p> 57 57 <p>playing on javascript with JSplash</p> 58 <p id="sout">starting <em>JSplash Player 0.4. 8</em>...<br />-------------------------------------<br /></p>58 <p id="sout">starting <em>JSplash Player 0.4.9</em>...<br />-------------------------------------<br /></p> 59 59 <svg id="svgrt" xmlns="http://www.w3.org/2000/svg" style="width: 100px; height: 100px;"> 60 60 </svg> ruby/jsplash/trunk/jextract.rb
r1494 r1565 84 84 case ch.name 85 85 when 'LineStyle' 86 clra = ch.elements['./color/Color'].attributes 86 clra = nil 87 if ch.elements['./color/Color'] 88 clra = ch.elements['./color/Color'].attributes 89 else 90 clra = ch.elements['./fillColor/Color'].attributes # DefineShape5 91 end 92 87 93 alpha = nil 88 94 alpha = ",a:#{ clra['alpha'].to_f/255 }" if clra['alpha'] … … 145 151 end 146 152 153 def self.readDefineShape5(tg, nest, fi) 154 TagReaders.readDefineShape(tg, nest, fi, 5) 155 end 156 147 157 def self.readDefineShape3(tg, nest, fi) 148 158 TagReaders.readDefineShape(tg, nest, fi, 3) … … 210 220 cofs = ",cofs:[#{a['offsetRed'].to_f/255},#{a['offsetGreen'].to_f/255},#{a['offsetBlue'].to_f/255},#{a['offsetAlpha'].to_f/255}]" 211 221 end 222 223 cfct = ",ctr:true" if !cfct && !cofs # reset 212 224 end 213 225

