1
1
import { Vector } from '../core' ;
2
2
import { ViewportController } from '../designer-extension' ;
3
+ import { ViewportAnimator } from '../workspace/viewport/viewport-animator' ;
4
+ import { ZoomByWheelCalculator } from '../workspace/viewport/zoom-by-wheel-calculator' ;
3
5
import { WorkspaceControllerWrapper } from '../workspace/workspace-controller' ;
6
+ import { WorkspaceApi } from './workspace-api' ;
4
7
5
8
export class ViewportApi {
9
+ private readonly animator = new ViewportAnimator ( this . api ) ;
10
+
6
11
public constructor (
7
12
private readonly workspaceController : WorkspaceControllerWrapper ,
8
- private readonly viewportController : ViewportController
13
+ private readonly viewportController : ViewportController ,
14
+ private readonly api : WorkspaceApi
9
15
) { }
10
16
17
+ public limitScale ( scale : number ) : number {
18
+ return this . viewportController . limitScale ( scale ) ;
19
+ }
20
+
11
21
public resetViewport ( ) {
12
- this . viewportController . setDefault ( ) ;
22
+ const defaultViewport = this . viewportController . getDefault ( ) ;
23
+ this . api . setViewport ( defaultViewport ) ;
13
24
}
14
25
15
26
public zoom ( direction : boolean ) {
16
- this . viewportController . zoom ( direction ) ;
27
+ const viewport = this . viewportController . getZoomed ( direction ) ;
28
+ if ( viewport ) {
29
+ this . api . setViewport ( viewport ) ;
30
+ }
17
31
}
18
32
19
33
public moveViewportToStep ( stepId : string ) {
@@ -24,6 +38,17 @@ export class ViewportApi {
24
38
const componentPosition = clientPosition . subtract ( canvasPosition ) ;
25
39
26
40
const componentSize = new Vector ( component . view . width , component . view . height ) ;
27
- this . viewportController . focusOnComponent ( componentPosition , componentSize ) ;
41
+ const viewport = this . viewportController . getFocusedOnComponent ( componentPosition , componentSize ) ;
42
+ this . animator . execute ( viewport ) ;
43
+ }
44
+
45
+ public handleWheelEvent ( e : WheelEvent ) {
46
+ const viewport = this . api . getViewport ( ) ;
47
+ const canvasPosition = this . api . getCanvasPosition ( ) ;
48
+
49
+ const newViewport = ZoomByWheelCalculator . calculate ( this . viewportController , viewport , canvasPosition , e ) ;
50
+ if ( newViewport ) {
51
+ this . api . setViewport ( newViewport ) ;
52
+ }
28
53
}
29
54
}
0 commit comments