Changeset 15862 for lang/actionscript
- Timestamp:
- 07/15/08 23:58:44 (4 months ago)
- Location:
- lang/actionscript/ascss/src
- Files:
-
- 6 modified
-
KyotoDemo.as (modified) (8 diffs)
-
KyotoDemo.swf (modified) (previous)
-
cssdom/XMLElementWrapper.as (modified) (1 diff)
-
kyotodemo/Edge.as (modified) (4 diffs)
-
kyotodemo/EdgeLayer.as (modified) (3 diffs)
-
kyotodemo/ElementData.as (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
lang/actionscript/ascss/src/KyotoDemo.as
r15821 r15862 6 6 import flash.text.*; 7 7 import flash.utils.*; 8 import flash.net.*; 8 9 import css.*; 9 10 import cssdom.*; … … 35 36 private var mCSSErrorField:TextField; 36 37 38 private var mBGLayer:Sprite; 37 39 private var mSelectorMarkers:Array; 38 40 private var mMarkerLayer:Sprite; … … 47 49 private var mEntireAnimation:EntireAnimationThread; 48 50 private var mPrevEdgesCount:int = -1; 49 51 private var mBGDisplayList:BGDisplayList; 52 53 private var mImageLib:Dictionary = new Dictionary(); 54 55 private static const PENDING:uint = 1; 56 private static const FAILED:uint = 2; 50 57 function KyotoDemo() 51 58 { … … 56 63 logo.y = 10; 57 64 addChild(logo); 65 66 mBGLayer = new Sprite(); 67 addChild(mBGLayer); 58 68 59 69 mEFormat = new TextFormat(); … … 277 287 private function doMatching():void 278 288 { 279 // STDOUT.cls();280 289 mSelectorEdgeLayer.clear(); 281 290 if (!mDocument || !mStyleSheet) return; … … 303 312 if (!sel.matchedRulesIsEmpty) 304 313 { 314 var rindex:int = 0; 315 mSelectorEdgeLayer.nextSet(); 305 316 for each(var rd:CSSRuleData in sel.matchedRulesList) 306 317 { 307 318 if (rd.selector._owner) { 308 319 var mk:SelectorMarker = mSelectorMap[rd.selector._owner.selector]; 309 mSelectorEdgeLayer.addEdge(mk.mx, mk.my, md.mx, md.my );320 mSelectorEdgeLayer.addEdge(mk.mx, mk.my, md.mx, md.my, rindex++); 310 321 } 311 322 } 312 323 } 324 325 sel.style = XMLElementWrapper(elem).newRenderStyle(); 326 327 // first pass 328 // normal decls 329 sel.applyDeclarations(true, false); 330 // override important decls 331 sel.applyDeclarations(true, true); 332 333 // second pass 334 // normal decls 335 sel.applyDeclarations(false, false); 336 // override important decls 337 sel.applyDeclarations(false, true); 313 338 } 314 339 … … 316 341 mEntireAnimation.startAnimation(); 317 342 343 showComputedStyles(); 344 318 345 mPrevEdgesCount = mSelectorEdgeLayer.count; 319 346 } 320 } 347 348 349 private static const rxStartTag:RegExp = /<[-_a-zA-Z0-9]+[^>]*>/ 350 private static const rxEndTag:RegExp = /<\/[-_a-zA-Z0-9]+[^>]*>/ 351 private static const rxEmptyTag:RegExp = /\/[ \t]*>/ 352 353 private static const rxCommentStart:RegExp = /<!--/ 354 private static const rxCommentEnd:RegExp = /-->/ 355 356 private function showComputedStyles():void 357 { 358 mXMLField.setTextFormat(mEFormat); 359 mBGLayer.graphics.clear(); 360 361 var ed:ElementData, wrapper:XMLElementWrapper 362 STDOUT.cls(); 363 364 var list:Array = mDocument.elementMetadatas.slice(); 365 if (!list) return; 366 367 var contextStack:Array = []; 368 var src:String = mXMLField.text; 369 if (!src) return; 370 var rxr:Object; 371 372 var curpos:int = 0; 373 var fwd:String; 374 for (;;) { 375 fwd = src.substring(curpos); 376 377 rxr = rxStartTag.exec(fwd); 378 if (rxr) 379 { 380 var tag:String = rxr[0]; 381 382 ed = list.shift(); 383 wrapper = ed.wrapper; 384 385 if (rxEmptyTag.exec(tag)) { 386 // closed immediately 387 ed.start_index = curpos + rxr.index; 388 ed.end_index = curpos + rxr.index + tag.length; 389 } 390 else { 391 contextStack.push(ed); 392 ed.start_index = curpos + rxr.index; 393 } 394 395 curpos += rxr.index + tag.length; 396 397 continue; 398 } 399 400 rxr = rxCommentStart.exec(fwd); 401 if (rxr) 402 { 403 curpos += rxr.index + rxr[0].length; 404 rxr = rxCommentEnd.exec(fwd); 405 if (!rxr) break; 406 curpos += rxr.index + rxr[0].length; 407 continue; 408 } 409 410 rxr = rxEndTag.exec(fwd); 411 if (rxr) 412 { 413 curpos += rxr.index + rxr[0].length; 414 ed = contextStack.pop() as ElementData; 415 ed.end_index = curpos; 416 continue; 417 } 418 419 break; 420 } 421 422 var cssv:CSSValue; 423 var g:Graphics = mBGLayer.graphics; 424 list = mDocument.elementMetadatas.slice(); 425 mBGDisplayList = new BGDisplayList(); 426 mBGDisplayList.g = g; 427 for each(ed in list) 428 { 429 var rs:RenderStyle = ed.wrapper.renderStyle; 430 var color:uint = lookupColorValue(rs, 0xffffffff, CSSPropertyID.CSSPropertyColor); 431 var bgcolor:uint = lookupColorValue(rs, 0xffffffff, CSSPropertyID.CSSPropertyBackgroundColor); 432 var bgurl:String = null; 433 if (color != 0xffffffff) 434 mXMLField.setTextFormat(createColorFormat(color), ed.start_index, ed.end_index); 435 436 if (rs.isSetPropId(CSSPropertyID.CSSPropertyBackgroundImage)) 437 { 438 cssv = rs.getCSSValueByPropId(CSSPropertyID.CSSPropertyBackgroundImage); 439 if (cssv is CSSImageValue) 440 bgurl = CSSImageValue(cssv).getStringValue(); 441 } 442 443 var di:BGDisplayItem = null; 444 if (bgcolor != 0xffffffff || bgurl) 445 { 446 di = new BGDisplayItem(); 447 di.color = bgcolor; 448 di.url = bgurl; 449 di.y = mXMLField.y + ed.lineno * LINEHEIGHT; 450 di.h = (ed.end_lineno-ed.lineno+1) * LINEHEIGHT; 451 mBGDisplayList.list.push(di); 452 } 453 } 454 455 runDisplayList(); 456 } 457 458 private function runDisplayList():void 459 { 460 if (!mBGDisplayList) return; 461 462 var g:Graphics = mBGDisplayList.g; 463 for each(var di:BGDisplayItem in mBGDisplayList.list) 464 { 465 if (di.color != 0xffffffff) 466 { 467 g.beginFill(di.color); 468 g.drawRect(mXMLField.x, di.y, mXMLField.width, di.h); 469 } 470 471 if (di.url) 472 { 473 var b:BitmapData = null; 474 if (mImageLib[di.url] != PENDING && mImageLib[di.url] != FAILED) 475 { 476 b = mImageLib[di.url]; 477 if (!b) 478 { 479 var ldr:ImageLoader = new ImageLoader(di.url); 480 ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded); 481 mImageLib[di.url] = PENDING; 482 483 ldr.load(new URLRequest(di.url)); 484 } 485 } 486 487 if (b) 488 { 489 g.beginBitmapFill(b); 490 g.drawRect(mXMLField.x, di.y, mXMLField.width, di.h); 491 } 492 } 493 } 494 } 495 496 private function onImageLoaded(e:Event):void 497 { 498 var ldr:ImageLoader = e.target.loader as ImageLoader; 499 if (ldr.content is Bitmap) 500 { 501 mImageLib[ldr.key] = Bitmap(ldr.content).bitmapData; 502 runDisplayList(); 503 } 504 else 505 mImageLib[ldr.key] = FAILED; 506 } 507 508 protected function lookupColorValue(rs:RenderStyle, defaultColor:uint, propid:int):uint 509 { 510 if (rs) 511 { 512 if (rs.isSetPropId(propid)) 513 { 514 var cssv:CSSValue = rs.getCSSValueByPropId(propid); 515 if (cssv is CSSPrimitiveValue) 516 { 517 var primv:CSSPrimitiveValue = cssv as CSSPrimitiveValue; 518 if (primv.primitiveType == CSSPrimitiveValue.CSS_RGBCOLOR) 519 return primv.getRGBColorValue() & 0xffffff; 520 else if (primv.primitiveType == CSSPrimitiveValue.CSS_IDENT) 521 { 522 if (primv.getIdent() == CSSValueKeywords.CSSValueTransparent) 523 return 0xffffffff; 524 } 525 } 526 } 527 } 528 return defaultColor; 529 } 530 531 private function createColorFormat(c:uint):TextFormat 532 { 533 var f:TextFormat = new TextFormat; 534 f.color = c & 0xffffff; 535 536 return f; 537 } 538 } 539 } 540 541 class ImageLoader extends flash.display.Loader 542 { 543 import flash.display.*; 544 import flash.events.*; 545 public var key:String; 546 function ImageLoader(k:String) { 547 key = k; 548 contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOError); 549 } 550 551 private function onIOError(e:IOErrorEvent):void {} 321 552 } 322 553 … … 406 637 } 407 638 } 639 640 class BGDisplayList 641 { 642 import flash.display.*; 643 public var g:Graphics; 644 public var list:Array = []; 645 } 646 647 class BGDisplayItem 648 { 649 public var color:uint; 650 public var url:String = null; 651 public var y:int, h:int; 652 } -
lang/actionscript/ascss/src/cssdom/XMLElementWrapper.as
r15818 r15862 30 30 mClassNames = new ClassNames(); 31 31 readClassNames(x.attribute("class")[0]); 32 } 33 34 public function newRenderStyle():RenderStyle 35 { 36 mRenderStyle = new RenderStyle(); 37 return mRenderStyle; 32 38 } 33 39 -
lang/actionscript/ascss/src/kyotodemo/Edge.as
r15821 r15862 7 7 private var mLayer2:Sprite = new Sprite; 8 8 9 function Edge() 9 private var mRuleIndex:int; 10 11 function Edge(ridx:int) 10 12 { 11 13 cacheAsBitmap = true; … … 16 18 addChild(mLayer2); 17 19 glow = 0; 20 21 mRuleIndex = ridx; 22 } 23 24 public function get ruleIndex():int 25 { 26 return mRuleIndex; 18 27 } 19 28 … … 21 30 { 22 31 var g:Graphics = mLayer1.graphics; 23 g.lineStyle(7, 0x00 1133);32 g.lineStyle(7, 0x000030); 24 33 drawPath(x1, y1, x2, y2, g) 25 34 26 g.lineStyle(5, 0x1 12244);35 g.lineStyle(5, 0x101224); 27 36 drawPath(x1, y1, x2, y2, g) 28 37 29 g.lineStyle(3, 0x 223399);38 g.lineStyle(3, 0x112340); 30 39 drawPath(x1, y1, x2, y2, g) 31 40 32 g.lineStyle(1, 0x 4466ee);41 g.lineStyle(1, 0x112470); 33 42 drawPath(x1, y1, x2, y2, g) 34 43 35 44 36 45 g = mLayer2.graphics; 46 g.lineStyle(17, 0x000022); 47 drawPath(x1, y1, x2, y2, g) 48 49 g.lineStyle(13, 0x001122); 50 drawPath(x1, y1, x2, y2, g) 51 37 52 g.lineStyle(11, 0x112266); 38 53 drawPath(x1, y1, x2, y2, g) 39 54 40 g.lineStyle( 9, 0x224499);55 g.lineStyle(5, 0x3366aa); 41 56 drawPath(x1, y1, x2, y2, g) 42 43 g.lineStyle(7, 0x4488ee);44 drawPath(x1, y1, x2, y2, g)45 46 g.lineStyle(5, 0x55bbff);47 drawPath(x1, y1, x2, y2, g)48 49 57 } 50 58 … … 53 61 if (t<0) t=0; 54 62 if (t>1) t=1; 63 if (Math.abs(mLayer2.alpha - t) < 0.01) 64 return; 55 65 mLayer2.alpha = t; 56 66 } -
lang/actionscript/ascss/src/kyotodemo/EdgeLayer.as
r15821 r15862 2 2 { 3 3 import flash.display.*; 4 import org.libspark.thread.*; 5 4 6 public class EdgeLayer extends Sprite 5 7 { 8 private var mSetIndex:uint = 0; 6 9 private var mCount:uint = 0; 10 private var mMaxIndex:uint; 11 private var mOrderAnimation:OrderAnimationThread; 12 13 private var mOrderSets:Array; 14 7 15 function EdgeLayer() 8 16 { 17 mOrderAnimation = new OrderAnimationThread(this); 18 mOrderAnimation.start(); 9 19 20 mOrderSets = []; 10 21 } 11 22 … … 15 26 } 16 27 17 public function addEdge(x1:int, y1:int, x2:int, y2:int):Edge 28 public function get maxIndex():uint 29 { 30 return mMaxIndex; 31 } 32 33 public function addEdge(x1:int, y1:int, x2:int, y2:int, ridx:int):Edge 18 34 { 19 35 mCount++; 20 var eg:Edge = new Edge( );36 var eg:Edge = new Edge(ridx); 21 37 eg.drawEdge(x1, y1, x2, y2); 22 38 addChild(eg); 39 mOrderSets[ mOrderSets.length-1 ].push( eg ); 40 41 if (ridx > mMaxIndex) 42 mMaxIndex = ridx; 23 43 24 44 return eg; 25 45 } 26 46 47 public function get count_sets():int 48 { 49 return mOrderSets ? mOrderSets.length : 0; 50 } 51 52 public function setAt(i:int):Array 53 { 54 return mOrderSets[i]; 55 } 56 57 public function nextSet():void 58 { 59 mOrderSets.push([]); 60 } 61 27 62 public function clear():void 28 63 { 64 mOrderAnimation.reset(); 65 mOrderSets = []; 29 66 mCount = 0; 67 mSetIndex = 0; 30 68 var len:uint = numChildren; 31 69 for (var i:uint = 0;i < len;i++) … … 34 72 } 35 73 } 74 75 class OrderAnimationThread extends org.libspark.thread.Thread 76 { 77 public static const STEP:int = 9; 78 79 import flash.display.*; 80 import kyotodemo.*; 81 private var mEdgeLayer:EdgeLayer; 82 private var mCount:int = -20; 83 private var mFadeout:Number = 0; 84 function OrderAnimationThread(el:EdgeLayer) 85 { 86 mEdgeLayer = el; 87 } 88 89 public function reset():void 90 { 91 mFadeout = 0; 92 mCount = -20; 93 } 94 95 protected override function run():void 96 { 97 next(animate); 98 } 99 100 protected function animate():void 101 { 102 if (++mCount > (STEP*(mEdgeLayer.maxIndex+2))) 103 reset(); 104 105 if (mCount > (STEP*(mEdgeLayer.maxIndex+1))) 106 { 107 mFadeout += 0.1; 108 if (mFadeout > 1) 109 mFadeout = 1; 110 } 111 112 var len:int = mEdgeLayer.count_sets; 113 for (var i:int = 0;i < len;i++) 114 { 115 var eset:Array = mEdgeLayer.setAt(i); 116 setGlows(eset); 117 } 118 119 next(animate); 120 } 121 122 private function setGlows(list:Array):void 123 { 124 var len:int = list.length; 125 var total_frames:int = STEP*(mEdgeLayer.maxIndex+1); 126 127 var step:Number = Number(total_frames) / Number(len); 128 129 for (var i:int = 0;i < len;i++) 130 { 131 var t:Number = (Number(mCount) - (step*Number(i)*0.5)) / step; 132 if (t < 0) t = 0; 133 else if (t > 1) t = 1; 134 135 list[i].glow = t - mFadeout; 136 } 137 } 138 } -
lang/actionscript/ascss/src/kyotodemo/ElementData.as
r15818 r15862 7 7 public var wrapper:XMLElementWrapper; 8 8 public var nest:int, lineno:int, end_lineno:int, mx:int, my:int; 9 10 public var start_index:int, end_index:int; 9 11 } 10 12 }
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)