Skip to content

Commit

Permalink
feat: add wheel handler for zoom graph
Browse files Browse the repository at this point in the history
  • Loading branch information
bubkoo committed Dec 10, 2019
1 parent 8daefe1 commit e835338
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 5 deletions.
9 changes: 9 additions & 0 deletions packages/x6/src/graph/base-graph.ts
Expand Up @@ -22,6 +22,7 @@ import {
ContextMenuHandler,
RubberbandHandler,
KeyboardHandler,
MouseWheelHandler,
NodeHandler,
EdgeHandler,
EdgeElbowHandler,
Expand Down Expand Up @@ -93,6 +94,7 @@ export class BaseGraph extends Disablable
public contextMenuHandler: ContextMenuHandler
public rubberbandHandler: RubberbandHandler
public keyboardHandler: KeyboardHandler
public mouseWheelHandler: MouseWheelHandler

/**
* Get the native value of hooked method.
Expand Down Expand Up @@ -142,13 +144,19 @@ export class BaseGraph extends Disablable
this.contextMenuHandler = this.createContextMenuHandler()
this.rubberbandHandler = this.createRubberbandHandler()
this.keyboardHandler = this.createKeyboardHandler()
this.mouseWheelHandler = this.creatMouseWheelHandler()
}

@hook()
createKeyboardHandler() {
return new KeyboardHandler(this as any)
}

@hook()
creatMouseWheelHandler() {
return new MouseWheelHandler(this as any)
}

@hook()
createTooltipHandler() {
return new TooltipHandler(this as any)
Expand Down Expand Up @@ -297,6 +305,7 @@ export class BaseGraph extends Disablable
this.contextMenuHandler.dispose()
this.rubberbandHandler.dispose()
this.keyboardHandler.dispose()
this.mouseWheelHandler.dispose()
}

@Disposable.aop()
Expand Down
2 changes: 2 additions & 0 deletions packages/x6/src/graph/hook.ts
Expand Up @@ -9,6 +9,7 @@ import { Route } from '../route'
import { Point, Anchor, Rectangle } from '../struct'
import {
KeyboardHandler,
MouseWheelHandler,
TooltipHandler,
ContextMenuHandler,
PanningHandler,
Expand Down Expand Up @@ -43,6 +44,7 @@ export interface IHooks {
createCursorHandler: BareHook<CursorHandler>
createGuideHandler: BareHook<GuideHandler>
createKeyboardHandler: BareHook<KeyboardHandler>
creatMouseWheelHandler: BareHook<MouseWheelHandler>
createTooltipHandler: BareHook<TooltipHandler>
createConnectionHandler: BareHook<ConnectionHandler>
createSelectionHandler: BareHook<SelectionHandler>
Expand Down
1 change: 1 addition & 0 deletions packages/x6/src/handler/index.ts
Expand Up @@ -12,6 +12,7 @@ export * from './cursor/handler'
export * from './tooltip/handler'
export * from './contextmenu/handler'
export * from './keyboard/handler'
export * from './mousewheel/handler'
export * from './rubberband/handler'
export * from './guide/handler'
export * from './panning/handler'
Expand Down
25 changes: 21 additions & 4 deletions packages/x6/src/handler/mousewheel/handler.ts
@@ -1,13 +1,15 @@
import * as util from '../../util'
import { Graph } from '../../graph'
import { Point } from '../../struct'
import { DomEvent, detector } from '../../common'
import { DomEvent, Disposable } from '../../common'
import { BaseHandler } from '../handler-base'

export class MouseWheelHandler extends BaseHandler {
private cursorPosition: Point
private wheelZoomDelay: number = 10
private wheelZoomTimer: number | null
private cumulativeZoomFactor: number = 1

private handler = (e: WheelEvent, up: boolean) => {
if (this.isZoomWheelEvent(e)) {
let source = DomEvent.getSource(e)
Expand All @@ -27,6 +29,11 @@ export class MouseWheelHandler extends BaseHandler {
}
}

constructor(graph: Graph) {
super(graph)
this.setEnadled(this.graph.options.wheel.enabled)
}

enable() {
DomEvent.addWheelListener(this.handler, this.graph.container)
super.enable()
Expand All @@ -38,10 +45,15 @@ export class MouseWheelHandler extends BaseHandler {
}

isZoomWheelEvent(e: MouseEvent) {
const modifiers = this.graph.options.wheel.modifiers
if (modifiers == null) {
return true
}

return (
DomEvent.isAltDown(e) ||
(detector.IS_MAC && DomEvent.isMetaDown(e)) ||
(!detector.IS_MAC && DomEvent.isControlDown(e))
(modifiers.includes('alt') && DomEvent.isAltDown(e)) ||
(modifiers.includes('meta') && DomEvent.isMetaDown(e)) ||
(modifiers.includes('ctrl') && DomEvent.isControlDown(e))
)
}

Expand Down Expand Up @@ -113,4 +125,9 @@ export class MouseWheelHandler extends BaseHandler {
this.wheelZoomTimer = null
}, this.wheelZoomDelay)
}

@Disposable.aop()
dispose() {
this.disable()
}
}
2 changes: 1 addition & 1 deletion packages/x6/src/handler/mousewheel/option.ts
Expand Up @@ -2,5 +2,5 @@ type Modifiers = 'alt' | 'ctrl' | 'meta'

export interface MouseWheelOptions {
enabled: boolean
modifiers: Modifiers | Modifiers[] | null
modifiers: Modifiers[] | null
}
5 changes: 5 additions & 0 deletions packages/x6/src/option/preset.ts
Expand Up @@ -183,6 +183,11 @@ export const preset: FullOptions = {
escape: true,
},

wheel: {
enabled: false,
modifiers: ['alt', 'ctrl', 'meta'],
},

rubberband: {
enabled: false,
fadeOut: false,
Expand Down
3 changes: 3 additions & 0 deletions packages/x6/src/option/rollup.ts
Expand Up @@ -32,6 +32,7 @@ import {
MovingPreviewOptions,
DropTargetHighlightOptions,
} from '../handler/moving/option'
import { MouseWheelOptions } from '../handler/mousewheel/option'
import { preset } from './preset'
import { IHooks } from '../graph/hook'
import { GlobalConfig } from './global'
Expand All @@ -48,6 +49,7 @@ export interface FullOptions
tooltip: TooltipOptions
folding: CollapseOptions
keyboard: KeyboardOptions
wheel: MouseWheelOptions
rubberband: RubberbandOptions
pageBreak: PageBreakOptions
contextMenu: ContextMenuOptions
Expand Down Expand Up @@ -81,6 +83,7 @@ export interface GraphOptions
tooltip?: Partial<TooltipOptions> | boolean
folding?: Partial<CollapseOptions> | boolean
keyboard?: Partial<KeyboardOptions> | boolean
wheel?: Partial<MouseWheelOptions> | boolean
rubberband?: Partial<RubberbandOptions> | boolean
pageBreak?: Partial<PageBreakOptions> | boolean
contextMenu?: Partial<ContextMenuOptions> | boolean
Expand Down

0 comments on commit e835338

Please sign in to comment.