@@ -23,16 +23,18 @@ class Main extends Sprite
23
23
var maxZoom : Float ;
24
24
var minZoom : Float ;
25
25
var zoom : Float ;
26
+ var preZoom : Float ;
26
27
var bgPos : Point ;
28
+ var imagePivot : Point ;
27
29
28
30
public function new ()
29
31
{
30
32
super ();
31
33
32
34
zoom = 1 ;
33
35
34
- // stage.displayState = StageDisplayState.FULL_SCREEN ;
35
-
36
+ bgPos = new Point () ;
37
+ imagePivot = new Point ();
36
38
37
39
// Assets:
38
40
var data = openfl. Assets .getBitmapData (" img/background-full0000.png" );
@@ -41,7 +43,8 @@ class Main extends Sprite
41
43
42
44
setZoomBounds ();
43
45
44
- bgPos = new Point ();
46
+ imagePivot .setTo (stage .stageWidth / 2 , stage .stageHeight / 2 );
47
+
45
48
46
49
stage .addEventListener (MouseEvent .CLICK , onClick );
47
50
stage .addEventListener (MouseEvent .MOUSE_WHEEL , onWheel );
@@ -54,38 +57,36 @@ class Main extends Sprite
54
57
{
55
58
// zoom bounds
56
59
// to have fluid zoom
57
- minZoom = stage .stageHeight / image .height ;
60
+ minZoom = stage .stageHeight / (image .height / image .scaleY );
61
+ trace (" image height" , image .height / image .scaleY , " stage" , stage .stageHeight );
58
62
deltaZoom = (1 - minZoom ) / 2 ;
59
63
maxZoom = 1 ;
60
64
do {
61
65
maxZoom + = deltaZoom ;
62
66
}while (maxZoom < 1.2 );
63
67
64
- trace (minZoom , zoom , maxZoom );
65
68
}
66
69
67
70
function onResize (e : Event ): Void
68
71
{
69
- trace (" resize" );
70
72
setZoomBounds ();
73
+ var values = [for (i in 0 ... 5 ) i * deltaZoom + minZoom ];
74
+ trace (values );
71
75
// find closest zoom to current
72
- var closest = minZoom - deltaZoom ;
73
- var temp = closest ;
74
- var diff = 42. ;
75
- do {
76
- temp + = deltaZoom ;
77
- if (zoom - temp < diff )
78
- {
79
- diff = zoom - temp ;
80
- closest = temp ;
81
- }
82
- }while (closest < maxZoom && diff != 0 );
76
+ var closest = 42. ;
77
+ for (item in values )
78
+ {
79
+ if ( Math .abs (item - zoom ) < Math .abs (zoom - closest ))
80
+ closest = item ;
81
+ }
83
82
84
83
if (closest != zoom )
85
84
{
85
+ trace (" resize" , minZoom , " old" , zoom , " closest" , closest , maxZoom );
86
86
zoom = closest ;
87
- // apply zoom TODO
87
+ applyZoom ();
88
88
}
89
+
89
90
}
90
91
91
92
function onReset (e : MouseEvent ): Void
@@ -124,17 +125,23 @@ class Main extends Sprite
124
125
}
125
126
function onWheel (e : MouseEvent ): Void
126
127
{
127
- var preZoom = zoom ;
128
+ preZoom = zoom ;
128
129
zoom + = e .delta / 100 * deltaZoom ;
129
130
if (zoom > maxZoom )
130
131
zoom = maxZoom ;
131
132
if (zoom < minZoom )
132
133
zoom = minZoom ;
134
+
135
+ imagePivot = image .globalToLocal (new Point (e .stageX , e .stageY ));
133
136
137
+ applyZoom ();
138
+
139
+ }
140
+
141
+ function applyZoom (): Void
142
+ {
134
143
if (preZoom == zoom )
135
144
return ;
136
-
137
- var imagePivot = image .globalToLocal (new Point (e .stageX , e .stageY ));
138
145
139
146
var offsetX = image .x + imagePivot .x * preZoom - imagePivot .x * zoom ;
140
147
var offsetY = image .y + imagePivot .y * preZoom - imagePivot .y * zoom ;
@@ -144,7 +151,6 @@ class Main extends Sprite
144
151
checkBounds (bgPos , stage .stageWidth , stage .stageHeight , image .width , image .height );
145
152
image .x = bgPos .x ;
146
153
image .y = bgPos .y ;
147
-
148
154
}
149
155
150
156
function checkBounds (pt : Point , screenX : Int , screenY : Int , imageWidth : Float , imageHeight : Float ): Void {
0 commit comments