Skip to content

Commit 9e19055

Browse files
committed
opt: opt overlay event trigger display
1 parent 6ee809a commit 9e19055

File tree

7 files changed

+42
-40
lines changed

7 files changed

+42
-40
lines changed

src/Event.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,9 @@ export default class Event implements EventHandler {
193193
const consumed = widget.dispatchEvent('mouseMoveEvent', event)
194194
let crosshair: Crosshair | undefined = { x: event.x, y: event.y, paneId: pane?.getId() }
195195
if (consumed) {
196-
crosshair = undefined
196+
if (widget.getForceCursor() !== 'pointer') {
197+
crosshair = undefined
198+
}
197199
widget.setCursor('pointer')
198200
} else {
199201
widget.setCursor('crosshair')
@@ -231,9 +233,11 @@ export default class Event implements EventHandler {
231233
let crosshair: Crosshair | undefined
232234
const consumed = widget.dispatchEvent('pressedMouseMoveEvent', event)
233235
if (!consumed) {
234-
crosshair = { x: event.x, y: event.y, paneId: pane?.getId() }
235236
this._processMainScrollingEvent(widget as Widget<DrawPane<YAxis>>, event)
236237
}
238+
if (!consumed || widget.getForceCursor() === 'pointer') {
239+
crosshair = { x: event.x, y: event.y, paneId: pane?.getId() }
240+
}
237241
this._chart.getChartStore().setCrosshair(crosshair, { forceInvalidate: true })
238242
return consumed
239243
}

src/Store.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1416,23 +1416,18 @@ export default class StoreImp implements Store {
14161416

14171417
setClickOverlayInfo (
14181418
info: EventOverlayInfo,
1419-
processOnClickEvent: ProcessOverlayEventCallback,
14201419
processOnSelectedEvent: ProcessOverlayEventCallback,
14211420
processOnDeselectedEvent: ProcessOverlayEventCallback
14221421
): void {
14231422
const { paneId, overlay, figureType, figure, figureIndex } = this._clickOverlayInfo
14241423
const infoOverlay = info.overlay
1425-
const infoOverlayValid = isValid(infoOverlay)
1426-
if (infoOverlayValid) {
1427-
processOnClickEvent(infoOverlay, info.figure)
1428-
}
14291424
if (overlay?.id !== infoOverlay?.id || figureType !== info.figureType || figureIndex !== info.figureIndex) {
14301425
this._clickOverlayInfo = info
14311426
if (overlay?.id !== infoOverlay?.id) {
14321427
if (isValid(overlay)) {
14331428
processOnDeselectedEvent(overlay, figure)
14341429
}
1435-
if (infoOverlayValid) {
1430+
if (isValid(infoOverlay)) {
14361431
processOnSelectedEvent(infoOverlay, info.figure)
14371432
}
14381433
this._chart.updatePane(UpdateLevel.Overlay, info.paneId)

src/component/Overlay.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export interface OverlayEventCollection<E> {
4848
onPressedMoveStart: Nullable<OverlayEventCallback<E>>
4949
onPressedMoving: Nullable<OverlayEventCallback<E>>
5050
onPressedMoveEnd: Nullable<OverlayEventCallback<E>>
51+
onMouseMove: Nullable<OverlayEventCallback<E>>
5152
onMouseEnter: Nullable<OverlayEventCallback<E>>
5253
onMouseLeave: Nullable<OverlayEventCallback<E>>
5354
onSelected: Nullable<OverlayEventCallback<E>>
@@ -253,6 +254,7 @@ export default class OverlayImp<E = unknown> implements Overlay<E> {
253254
onPressedMoveStart: Nullable<OverlayEventCallback<E>> = null
254255
onPressedMoving: Nullable<OverlayEventCallback<E>> = null
255256
onPressedMoveEnd: Nullable<OverlayEventCallback<E>> = null
257+
onMouseMove: Nullable<OverlayEventCallback<E>> = null
256258
onMouseEnter: Nullable<OverlayEventCallback<E>> = null
257259
onMouseLeave: Nullable<OverlayEventCallback<E>> = null
258260
onRemoved: Nullable<OverlayEventCallback<E>> = null

src/view/CrosshairFeatureView.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import type { YAxis } from '../component/YAxis'
2323
import type DrawPane from '../pane/DrawPane'
2424
import type DrawWidget from '../widget/DrawWidget'
2525
import View from './View'
26-
import type { EventName, MouseTouchEvent } from '../common/SyntheticEvent'
2726

2827
interface FeatureInfo {
2928
crosshair: Crosshair
@@ -54,13 +53,6 @@ export default class CrosshairFeatureView extends View<YAxis> {
5453
})
5554
}
5655

57-
override dispatchEvent (name: EventName, event: MouseTouchEvent): boolean {
58-
if (this.dispatchEventToChildren(name, event)) {
59-
return false
60-
}
61-
return this.onEvent(name, event)
62-
}
63-
6456
override drawImp (ctx: CanvasRenderingContext2D): void {
6557
const widget = this.getWidget()
6658
const pane = widget.getPane()

src/view/OverlayView.ts

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ export default class OverlayView<C extends Axis = YAxis> extends View<C> {
4040
}
4141

4242
private _initEvent (): void {
43-
const pane = this.getWidget().getPane()
43+
const widget = this.getWidget()
44+
const pane = widget.getPane()
4445
const paneId = pane.getId()
4546
const chart = pane.getChart()
4647
const chartStore = chart.getChartStore()
@@ -76,6 +77,7 @@ export default class OverlayView<C extends Axis = YAxis> extends View<C> {
7677
(o, f) => this._processOverlayMouseEnterEvent(o, f, event),
7778
(o, f) => this._processOverlayMouseLeaveEvent(o, f, event)
7879
)
80+
widget.setForceCursor(null)
7981
return false
8082
}).registerEvent('mouseClickEvent', event => {
8183
const progressOverlayInfo = chartStore.getProgressOverlayInfo()
@@ -115,7 +117,6 @@ export default class OverlayView<C extends Axis = YAxis> extends View<C> {
115117
figureIndex: -1,
116118
figure: null
117119
},
118-
(o, f) => this._processOverlayClickEvent(o, f, event),
119120
(o, f) => this._processOverlaySelectedEvent(o, f, event),
120121
(o, f) => this._processOverlayDeselectedEvent(o, f, event)
121122
)
@@ -184,18 +185,22 @@ export default class OverlayView<C extends Axis = YAxis> extends View<C> {
184185
if (overlay !== null) {
185186
if (checkOverlayFigureEvent('onPressedMoving', figure)) {
186187
if (!overlay.lock) {
187-
if (!(overlay.onPressedMoving?.({ chart, overlay, figure: figure ?? undefined, ...event }) ?? false)) {
188-
const point = this._coordinateToPoint(overlay, event)
189-
if (figureType === 'point') {
190-
overlay.eventPressedPointMove(point, figureIndex)
191-
} else {
192-
overlay.eventPressedOtherMove(point, this.getWidget().getPane().getChart().getChartStore())
193-
}
188+
const point = this._coordinateToPoint(overlay, event)
189+
if (figureType === 'point') {
190+
overlay.eventPressedPointMove(point, figureIndex)
191+
} else {
192+
overlay.eventPressedOtherMove(point, this.getWidget().getPane().getChart().getChartStore())
193+
}
194+
if (overlay.onPressedMoving?.({ chart, overlay, figure: figure ?? undefined, ...event }) ?? false) {
195+
this.getWidget().setForceCursor(null)
196+
} else {
197+
this.getWidget().setForceCursor('pointer')
194198
}
195199
}
196200
return true
197201
}
198202
}
203+
this.getWidget().setForceCursor(null)
199204
return false
200205
})
201206
}
@@ -234,14 +239,6 @@ export default class OverlayView<C extends Axis = YAxis> extends View<C> {
234239
return false
235240
}
236241

237-
private _processOverlayClickEvent (overlay: OverlayImp, figure: Nullable<OverlayFigure>, event: MouseTouchEvent): boolean {
238-
if ((!(overlay.isDrawing())) && checkOverlayFigureEvent('onClick', figure)) {
239-
overlay.onClick?.({ chart: this.getWidget().getPane().getChart(), overlay, figure: figure ?? undefined, ...event })
240-
return true
241-
}
242-
return false
243-
}
244-
245242
private _processOverlaySelectedEvent (overlay: OverlayImp, figure: Nullable<OverlayFigure>, event: MouseTouchEvent): boolean {
246243
if (checkOverlayFigureEvent('onSelected', figure)) {
247244
overlay.onSelected?.({ chart: this.getWidget().getPane().getChart(), overlay, figure: figure ?? undefined, ...event })
@@ -261,12 +258,21 @@ export default class OverlayView<C extends Axis = YAxis> extends View<C> {
261258
private _figureMouseMoveEvent (overlay: OverlayImp, figureType: EventOverlayInfoFigureType, figureIndex: number, figure: OverlayFigure): MouseTouchEventCallback {
262259
return (event: MouseTouchEvent) => {
263260
const pane = this.getWidget().getPane()
261+
const check = !overlay.isDrawing() && checkOverlayFigureEvent('onMouseMove', figure)
262+
if (check) {
263+
if (overlay.onMouseMove?.({ chart: pane.getChart(), overlay, figure, ...event }) ?? false) {
264+
this.getWidget().setForceCursor(null)
265+
} else {
266+
this.getWidget().setForceCursor('pointer')
267+
}
268+
}
269+
264270
pane.getChart().getChartStore().setHoverOverlayInfo(
265271
{ paneId: pane.getId(), overlay, figureType, figure, figureIndex },
266272
(o, f) => this._processOverlayMouseEnterEvent(o, f, event),
267273
(o, f) => this._processOverlayMouseLeaveEvent(o, f, event)
268274
)
269-
return checkOverlayFigureEvent('onMouseEnter', figure) && !overlay.isDrawing()
275+
return check
270276
}
271277
}
272278

@@ -288,13 +294,16 @@ export default class OverlayView<C extends Axis = YAxis> extends View<C> {
288294
return (event: MouseTouchEvent) => {
289295
const pane = this.getWidget().getPane()
290296
const paneId = pane.getId()
297+
const check = !overlay.isDrawing() && checkOverlayFigureEvent('onClick', figure)
298+
if (check) {
299+
overlay.onClick?.({ chart: this.getWidget().getPane().getChart(), overlay, figure, ...event })
300+
}
291301
pane.getChart().getChartStore().setClickOverlayInfo(
292302
{ paneId, overlay, figureType, figureIndex, figure },
293-
(o, f) => this._processOverlayClickEvent(o, f, event),
294303
(o, f) => this._processOverlaySelectedEvent(o, f, event),
295304
(o, f) => this._processOverlayDeselectedEvent(o, f, event)
296305
)
297-
return checkOverlayFigureEvent('onClick', figure) && !overlay.isDrawing()
306+
return check
298307
}
299308
}
300309

src/widget/SeparatorWidget.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,6 @@ export default class SeparatorWidget extends Widget<SeparatorPane> {
6060
return WidgetNameConstants.SEPARATOR
6161
}
6262

63-
override checkEventOn (): boolean {
64-
return true
65-
}
66-
6763
private _mouseDownEvent (event: MouseTouchEvent): boolean {
6864
this._dragFlag = true
6965
this._dragStartY = event.pageY

src/widget/Widget.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ export default abstract class Widget<P extends Pane = Pane> extends Eventful imp
8989
}
9090
}
9191

92+
getForceCursor (): Nullable<string> {
93+
return this._forceCursor
94+
}
95+
9296
update (level?: UpdateLevel): void {
9397
this.updateImp(this._container, this._bounding, level ?? UpdateLevel.Drawer)
9498
}

0 commit comments

Comments
 (0)