1
- import { html , html_tag , add_sheet , remove_sheet , send } from "../libs/web-js-utils.js"
1
+ import { html , html_tag , add_sheet , remove_sheet } from "../libs/web-js-utils.js"
2
2
import { event } from "./utils.js"
3
3
import { Svg } from "../libs/svg_utils.js"
4
4
@@ -51,34 +51,43 @@ function onContext(e){
51
51
52
52
class Menu {
53
53
call ( Params ) {
54
+ const circle_radius = 80
55
+ const pie_radius_start = 20
56
+ const pie_radius_end = 90
57
+
54
58
vertex = Params . v
55
59
svg = Params . svg
56
60
let [ x , y ] = [ Params . x , Params . y ]
57
61
menu_svg = html ( svg , /*html*/ `<g id="g_menu"/>` )
58
62
html_tag ( menu_svg , "circle" , /*html*/ `
59
63
<circle class="svg_menu" cx="${ x } " cy="${ y } " r="10" fill="rgba(120,160,200,0.5)" >
60
- <animate attributeName="r" begin="0s" values="10;80 " keyTimes="0;1" calcMode="spline" keySplines="0 .75 .25 1" dur="300ms" repeatCount="1" fill="freeze"/>
64
+ <animate attributeName="r" begin="0s" values="10;${ circle_radius } " keyTimes="0;1" calcMode="spline" keySplines="0 .75 .25 1" dur="300ms" repeatCount="1" fill="freeze"/>
61
65
</circle>` )
62
66
menu_svg . getElementsByTagName ( "animate" ) [ 0 ] . beginElement ( )
63
67
state . active = true
64
68
menu_svg . addEventListener ( 'mouseleave' , onMouseLeave , false ) ;
65
69
menu_svg . addEventListener ( 'mousedown' , onMouseDown , false ) ;
66
70
menu_svg . addEventListener ( 'contextmenu' , onContext , false ) ;
67
71
68
- const pie_radius_start = 20
69
- const pie_radius_end = 70
70
72
const len = Params . actions . length
73
+ let buttons = { }
74
+ let texts = { }
71
75
Params . actions . forEach ( ( a , i ) => {
72
76
const start = i / len
73
77
const stop = ( i + 1 ) / len
74
78
const margin = 0.01
79
+ let pie = utl . pie ( menu_svg , x , y , pie_radius_start , pie_radius_end , start , stop , margin )
80
+ buttons [ a ] = pie
81
+ pie . setAttribute ( "data-name" , a )
82
+ pie . setAttribute ( "visibility" , "hidden" )
83
+ pie . classList . add ( "pie_element" )
84
+ let [ tx , ty ] = angle_pos ( ( start + stop ) / 2 , ( pie_radius_start + pie_radius_end ) / 2 )
85
+ texts [ a ] = html ( menu_svg , /*html*/ `<text x="${ x + tx } " y="${ y + ty } " class="m_text" dominant-baseline="middle" text-anchor="middle" style="pointer-events:none" visibility="hidden">${ a } </text>` )
86
+ } )
87
+ Params . actions . forEach ( ( action , i ) => {
75
88
setTimeout ( ( ) => {
76
- let pie = utl . pie ( menu_svg , x , y , pie_radius_start , pie_radius_end , start , stop , margin )
77
- pie . setAttribute ( "data-name" , a )
78
- pie . classList . add ( "pie_element" )
79
- pie . addEventListener ( 'click' , ( e ) => { send ( "menu_action" , { type :e . target . getAttribute ( "data-name" ) } ) } , false ) ;
80
- let [ tx , ty ] = angle_pos ( ( start + stop ) / 2 , ( pie_radius_start + pie_radius_end ) / 2 )
81
- html ( menu_svg , /*html*/ `<text x="${ x + tx } " y="${ y + ty } " class="m_text" dominant-baseline="middle" text-anchor="middle" style="pointer-events:none">${ a } </text>` )
89
+ buttons [ action ] . setAttribute ( "visibility" , "visible" )
90
+ texts [ action ] . setAttribute ( "visibility" , "visible" )
82
91
} , 200 + i * 50 )
83
92
} )
84
93
sheet = new CSSStyleSheet ( )
@@ -100,7 +109,8 @@ class Menu{
100
109
color:hsl(240, 80%, 65%)
101
110
}` )
102
111
add_sheet ( sheet )
103
- }
112
+ return buttons
113
+ }
104
114
}
105
115
106
116
export { Menu } ;
0 commit comments