Changeset 15862 for lang/actionscript

Show
Ignore:
Timestamp:
07/15/08 23:58:44 (4 months ago)
Author:
gyuque
Message:

updated demo

Location:
lang/actionscript/ascss/src
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • lang/actionscript/ascss/src/KyotoDemo.as

    r15821 r15862  
    66        import flash.text.*; 
    77        import flash.utils.*; 
     8        import flash.net.*; 
    89        import css.*; 
    910        import cssdom.*; 
     
    3536                private var mCSSErrorField:TextField; 
    3637 
     38                private var mBGLayer:Sprite; 
    3739                private var mSelectorMarkers:Array; 
    3840                private var mMarkerLayer:Sprite; 
     
    4749                private var mEntireAnimation:EntireAnimationThread; 
    4850                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; 
    5057                function KyotoDemo() 
    5158                { 
     
    5663                        logo.y = 10; 
    5764                        addChild(logo); 
     65 
     66                        mBGLayer = new Sprite(); 
     67                        addChild(mBGLayer); 
    5868 
    5969                        mEFormat = new TextFormat(); 
     
    277287                private function doMatching():void 
    278288                { 
    279 //                      STDOUT.cls(); 
    280289                        mSelectorEdgeLayer.clear(); 
    281290                        if (!mDocument || !mStyleSheet) return; 
     
    303312                                if (!sel.matchedRulesIsEmpty) 
    304313                                { 
     314                                        var rindex:int = 0; 
     315                                        mSelectorEdgeLayer.nextSet(); 
    305316                                        for each(var rd:CSSRuleData in sel.matchedRulesList) 
    306317                                        { 
    307318                                                if (rd.selector._owner) { 
    308319                                                        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++); 
    310321                                                } 
    311322                                        } 
    312323                                } 
     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); 
    313338                        } 
    314339 
     
    316341                                mEntireAnimation.startAnimation(); 
    317342 
     343                        showComputedStyles(); 
     344 
    318345                        mPrevEdgesCount = mSelectorEdgeLayer.count; 
    319346                } 
    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 
     541class 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 {} 
    321552} 
    322553 
     
    406637        } 
    407638} 
     639 
     640class BGDisplayList 
     641{ 
     642        import flash.display.*; 
     643        public var g:Graphics; 
     644        public var list:Array = []; 
     645} 
     646 
     647class 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  
    3030                        mClassNames = new ClassNames(); 
    3131                        readClassNames(x.attribute("class")[0]); 
     32                } 
     33 
     34                public function newRenderStyle():RenderStyle 
     35                { 
     36                        mRenderStyle = new RenderStyle(); 
     37                        return mRenderStyle; 
    3238                } 
    3339 
  • lang/actionscript/ascss/src/kyotodemo/Edge.as

    r15821 r15862  
    77                private var mLayer2:Sprite = new Sprite; 
    88 
    9                 function Edge() 
     9                private var mRuleIndex:int; 
     10 
     11                function Edge(ridx:int) 
    1012                { 
    1113                        cacheAsBitmap = true; 
     
    1618                        addChild(mLayer2); 
    1719                        glow = 0; 
     20 
     21                        mRuleIndex = ridx; 
     22                } 
     23 
     24                public function get ruleIndex():int 
     25                { 
     26                        return mRuleIndex; 
    1827                } 
    1928 
     
    2130                { 
    2231                        var g:Graphics = mLayer1.graphics; 
    23                         g.lineStyle(7, 0x001133); 
     32                        g.lineStyle(7, 0x000030); 
    2433                        drawPath(x1, y1, x2, y2, g) 
    2534 
    26                         g.lineStyle(5, 0x112244); 
     35                        g.lineStyle(5, 0x101224); 
    2736                        drawPath(x1, y1, x2, y2, g) 
    2837 
    29                         g.lineStyle(3, 0x223399); 
     38                        g.lineStyle(3, 0x112340); 
    3039                        drawPath(x1, y1, x2, y2, g) 
    3140 
    32                         g.lineStyle(1, 0x4466ee); 
     41                        g.lineStyle(1, 0x112470); 
    3342                        drawPath(x1, y1, x2, y2, g) 
    3443 
    3544 
    3645                        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 
    3752                        g.lineStyle(11, 0x112266); 
    3853                        drawPath(x1, y1, x2, y2, g) 
    3954 
    40                         g.lineStyle(9, 0x224499); 
     55                        g.lineStyle(5, 0x3366aa); 
    4156                        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  
    4957                } 
    5058 
     
    5361                        if (t<0) t=0; 
    5462                        if (t>1) t=1; 
     63                        if (Math.abs(mLayer2.alpha - t) < 0.01) 
     64                                return; 
    5565                        mLayer2.alpha = t; 
    5666                } 
  • lang/actionscript/ascss/src/kyotodemo/EdgeLayer.as

    r15821 r15862  
    22{ 
    33        import flash.display.*; 
     4        import org.libspark.thread.*; 
     5 
    46        public class EdgeLayer extends Sprite 
    57        { 
     8                private var mSetIndex:uint = 0; 
    69                private var mCount:uint = 0; 
     10                private var mMaxIndex:uint; 
     11                private var mOrderAnimation:OrderAnimationThread; 
     12 
     13                private var mOrderSets:Array; 
     14 
    715                function EdgeLayer() 
    816                { 
     17                        mOrderAnimation = new OrderAnimationThread(this); 
     18                        mOrderAnimation.start(); 
    919 
     20                        mOrderSets = []; 
    1021                } 
    1122 
     
    1526                } 
    1627 
    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 
    1834                { 
    1935                        mCount++; 
    20                         var eg:Edge = new Edge(); 
     36                        var eg:Edge = new Edge(ridx); 
    2137                        eg.drawEdge(x1, y1, x2, y2); 
    2238                        addChild(eg); 
     39                        mOrderSets[ mOrderSets.length-1 ].push( eg ); 
     40 
     41                        if (ridx > mMaxIndex) 
     42                                mMaxIndex = ridx; 
    2343 
    2444                        return eg; 
    2545                } 
    2646 
     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 
    2762                public function clear():void 
    2863                { 
     64                        mOrderAnimation.reset(); 
     65                        mOrderSets = []; 
    2966                        mCount = 0; 
     67                        mSetIndex = 0; 
    3068                        var len:uint = numChildren; 
    3169                        for (var i:uint = 0;i < len;i++) 
     
    3472        } 
    3573} 
     74 
     75class 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  
    77                public var wrapper:XMLElementWrapper; 
    88                public var nest:int, lineno:int, end_lineno:int, mx:int, my:int; 
     9 
     10                public var start_index:int, end_index:int; 
    911        } 
    1012}