OSDN Git Service

Client is version 0.5.56, working svg circle.
authoritozyun <itozyun@user.sourceforge.jp>
Tue, 7 May 2013 21:58:14 +0000 (06:58 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Tue, 7 May 2013 21:58:14 +0000 (06:58 +0900)
app/assets/javascripts/peta-common.js

index c2aaf79..fee0491 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * pettanR peta.common.js\r
- *   version 0.5.55\r
+ *   version 0.5.56\r
  * \r
  *   author:\r
  *     itozyun\r
@@ -371,11 +371,12 @@ pettanr.newBalloon = ( function(){
                        getPath : null,\r
                        args    : null,\r
                        update  : IS_VML === true ?\r
-                               ( function( /* w, h [, angle, ,,, ] */ ){\r
+                               ( function( w, h, a /* w, h [, angle, ,,, ] */ ){\r
                                        var w = arguments[ 0 ],\r
                                                h = arguments[ 1 ];\r
                                        var path = this.getPath.apply( this.klass, arguments );\r
                                        if( !path ) return false;\r
+                                       this.a = a;\r
                                        path = /* SVG2VML */ path;\r
                                        this.path.style.width  = w + 'px';\r
                                        this.path.style.height = h + 'px';\r
@@ -384,13 +385,14 @@ pettanr.newBalloon = ( function(){
                                        // this.elm.style.marginTop =  _tailY < 0 ? floor( ( 60 + _tailY) / 10 ) : 10;\r
                                        // this.elm.style.marginLeft = _tailX < 0 ? floor( ( 60 + _tailX) / 10 ) : 10;\r
                                }) :\r
-                               ( function( /* w, h [, angle, ,,, ] */ ){\r
+                               ( function( w, h, a /* w, h [, angle, ,,, ] */ ){\r
                                        var w = arguments[ 0 ],\r
                                                h = arguments[ 1 ],\r
                                                d = this.getPath.apply( this.klass, arguments );\r
                                        if( !d ) return false;\r
-                                       this.elm.width  = w + PADDING_LEFT * 2;\r
-                                       this.elm.height = h + PADDING_TOP  * 2;\r
+                                       this.a = a;\r
+                                       this.elm.setAttribute( 'width',  w );\r
+                                       this.elm.setAttribute( 'height', h );\r
                                        this.path.setAttribute( 'd', d );\r
                                }),\r
                        destroy : function(){\r
@@ -411,9 +413,10 @@ pettanr.newBalloon = ( function(){
                        klass        : null,\r
                        getPictureID : null,\r
                        args         : null,\r
-                       update : function( /* w, h [, angle, ,,, ] */ ){\r
+                       update : function( w, h, a /* w, h [, angle, ,,, ] */ ){\r
                                var id = this.getPictureID.aplly( this.klass, arguments );\r
                                if( id !== 0 && !id ) return false;\r
+                               this.a = a;\r
                                this.elm.src = PICTURE_PATH + id + '.gif';\r
                        },\r
                        destroy : function(){\r
@@ -537,20 +540,22 @@ pettanr.newBalloon = ( function(){
                        if( !TEMPLETES[ name ] ){\r
                                TEMPLETES[ name ] = templete;\r
                                TEMPLETES[ id ]   = templete;\r
+                               if( name in window ) templete.classname = name;\r
                        };\r
                },\r
                create : function( idOrName, w, h, settings ){\r
                        var ret,\r
+                               tmpl = TEMPLETES[ idOrName ],\r
                                args = settings.split( ',' ),\r
-                               i    = args.length,\r
-                               v;\r
-                       if( Type.isString( idOrName ) === true && idOrName in window ){\r
-                               ret = new BalloonClass( window[ idOrName ] );\r
+                               l    = args.length,\r
+                               i    = 0, v;\r
+                       if( tmpl.classname ){\r
+                               ret = new BalloonClass( window[ tmpl.classname ] );\r
                        } else {\r
-                               ret = new NonVectorBalloonClass( TEMPLETES[ idOrName ] );\r
+                               ret = new NonVectorBalloonClass( tmpl );\r
                        };\r
-                       for( ; i; ){\r
-                               v = args[ --i ];\r
+                       for( ; i < l; ++i ){\r
+                               v = args[ i ];\r
                                args[ i ] = parseInt( v );\r
                        };\r
                        args.unshift( h );\r
@@ -567,6 +572,76 @@ pettanr.newBalloon = ( function(){
        }\r
 })();\r
 \r
+\r
+/**\r
+ * Balloon \r
+ */\r
+var Circle = {\r
+       getPath : function( w, h, a ){\r
+               var TAIL_WIDTH   = 6,\r
+                       TAIL_HEIGHT  = 10,\r
+                       PADDING_TOP  = TAIL_HEIGHT,\r
+                       PADDING_LEFT = TAIL_HEIGHT,\r
+                       TARGET       = TAIL_WIDTH * TAIL_WIDTH,\r
+                       ACCURACY     = 1, // 有効少数桁    ;\r
+                       MATH         = Math,\r
+                       DEG_TO_RAD   = MATH.PI / 180,\r
+                       cos          = MATH.cos,\r
+                       sin          = MATH.sin,\r
+                       pow          = MATH.pow,\r
+                       round        = MATH.round,\r
+                       cround       = function( v, r ){\r
+                               r = r || ACCURACY;\r
+                               return round( v * pow( 10.0, r )) / pow( 10.0, r );\r
+                       },\r
+                       rx           = ( w - PADDING_LEFT * 2 ) / 2,\r
+                       ry           = ( h - PADDING_TOP  * 2 ) / 2,\r
+                       _            = ',',\r
+                       tailRad      = a * DEG_TO_RAD,\r
+                       tailX        = rx + ( rx + TAIL_HEIGHT ) * sin( tailRad ),\r
+                       tailY        = ry - ( ry + TAIL_HEIGHT ) * cos( tailRad ),\r
+                       tailDeg      = 0,\r
+                       d, startRad, endRad,\r
+                       startX, startY, endX, endY,\r
+                       _startX, _startY, _endX, _endY;\r
+               /*\r
+                * tailの太さをTAIL_WIDTHに一致させるため、角度を絞りつつ計算\r
+                */\r
+               for( var i = 45; i > 0.01; i /= 2 ){\r
+                       d = ( tailDeg + i ) / 2;\r
+                       startRad = ( a + d ) * DEG_TO_RAD;\r
+                       endRad   = ( a - d ) * DEG_TO_RAD;\r
+                       \r
+                       _startX  = rx + sin( startRad ) * rx;\r
+                       _startY  = ry - cos( startRad ) * ry;\r
+                       _endX    = rx + sin( endRad ) * rx;\r
+                       _endY    = ry - cos( endRad ) * ry;     //円弧上のY位置=円中心Y+sin(角度×PI÷180)×円半径\r
+                               \r
+                       if( pow( ( _startX - _endX ), 2 ) + pow( ( _startY - _endY ), 2 ) < TARGET ){\r
+                               tailDeg += i;\r
+                               startX  = _startX;\r
+                               startY  = _startY;\r
+                               endX    = _endX;\r
+                               endY    = _endY;\r
+                       };\r
+               };\r
+\r
+               return [\r
+                       'M', cround( tailX + PADDING_LEFT  ), _, cround( tailY  + PADDING_TOP ),\r
+                       'L', cround( startX + PADDING_LEFT ), _, cround( startY + PADDING_TOP ),\r
+                       'A', rx, _, ry,\r
+                       '0 1 1',                        // flag\r
+                       cround( endX + PADDING_LEFT ), _, cround( endY + PADDING_TOP ),\r
+                       'z'\r
+               ].join( ' ' );\r
+       },\r
+       getPictureID : function( w, h, a ){\r
+               \r
+       }\r
+};\r
+\r
+\r
+\r
 /* ----------------------------------------\r
  *  pettanr.image\r
  *  \r