Allow mouse-wheel scrolling over plots when in multi graph view.
- Currently if the mouse hovers over a plot, the scrolling action is related to zoom over the plot. This disables page scrolling.
- While this is okay when there is a single plot, the experience is kind of annoying in a multi graph view where it is common to scroll up and down looking at multiple graphs.
- This CL adds an attribute to the plot-simple-sk and sets it in the multi graph view. The regular explore view remains unchanged.
Bug: b/309172104
Change-Id: I61eb40120ad1a3feb9b515c7180d24c41cf0e70b
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/805925
Reviewed-by: Eduardo Yap <eduardoyap@google.com>
Commit-Queue: Ashwin Verleker <ashwinpv@google.com>
diff --git a/perf/modules/explore-multi-sk/explore-multi-sk.ts b/perf/modules/explore-multi-sk/explore-multi-sk.ts
index d0c6231..eb34e96 100644
--- a/perf/modules/explore-multi-sk/explore-multi-sk.ts
+++ b/perf/modules/explore-multi-sk/explore-multi-sk.ts
@@ -193,7 +193,7 @@
}
const graphDiv: Element | null = this.querySelector('#graphContainer');
- const explore: ExploreSimpleSk = new ExploreSimpleSk();
+ const explore: ExploreSimpleSk = new ExploreSimpleSk(true);
explore.openQueryByDefault = false;
explore.navOpen = false;
diff --git a/perf/modules/explore-simple-sk/explore-simple-sk.ts b/perf/modules/explore-simple-sk/explore-simple-sk.ts
index 8e4c650..936361d 100644
--- a/perf/modules/explore-simple-sk/explore-simple-sk.ts
+++ b/perf/modules/explore-simple-sk/explore-simple-sk.ts
@@ -461,8 +461,11 @@
private originalTraceSet: TraceSet = TraceSet({});
- constructor() {
+ private scrollable: boolean = false;
+
+ constructor(scrollable: boolean) {
super(ExploreSimpleSk.template);
+ this.scrollable = scrollable;
this.traceFormatter = GetTraceFormatter();
}
@@ -610,6 +613,7 @@
@zoom=${ele.plotZoom}
@trace_focused=${ele.plotTraceFocused}
class="hide_on_pivot_table hide_on_query_only hide_on_spinner"
+ .scrollable=${ele.scrollable}
>
</plot-simple-sk>
<div id=spin-container class="hide_on_query_only hide_on_pivot_table hide_on_pivot_plot hide_on_plot">
diff --git a/perf/modules/plot-simple-sk/plot-simple-sk.ts b/perf/modules/plot-simple-sk/plot-simple-sk.ts
index 0293a95..50c1295 100644
--- a/perf/modules/plot-simple-sk/plot-simple-sk.ts
+++ b/perf/modules/plot-simple-sk/plot-simple-sk.ts
@@ -711,6 +711,18 @@
private BAND_COLOR!: string; // CSS color.
+ get scrollable(): boolean {
+ return this.hasAttribute('scrollable');
+ }
+
+ set scrollable(val: boolean) {
+ if (val) {
+ this.setAttribute('scrollable', '');
+ } else {
+ this.removeAttribute('scrollable');
+ }
+ }
+
constructor() {
super(PlotSimpleSk.template);
@@ -815,34 +827,36 @@
this.inZoomDrag = 'no-zoom';
});
- this.addEventListener('wheel', (e: WheelEvent) => {
- e.stopPropagation();
- e.preventDefault();
- // If the wheel is spun while we are zoomed then move through the stack of
- // zoom ranges.
- if (this.detailsZoomRangesStack) {
- // Scrolling up on the scroll wheel gives e.deltaY a negative value. Up
- // means to scroll in, which means we want to take a rect from
- // inactiveDetailsZoomRangesStack and make it active by pushing it on
- // detailsZoomRangesStack. Down reverses the push/pop direction.
- if (e.deltaY < 0) {
- if (this.inactiveDetailsZoomRangesStack.length === 0) {
- return;
+ if (!this.scrollable) {
+ this.addEventListener('wheel', (e: WheelEvent) => {
+ e.stopPropagation();
+ e.preventDefault();
+ // If the wheel is spun while we are zoomed then move through the stack of
+ // zoom ranges.
+ if (this.detailsZoomRangesStack) {
+ // Scrolling up on the scroll wheel gives e.deltaY a negative value. Up
+ // means to scroll in, which means we want to take a rect from
+ // inactiveDetailsZoomRangesStack and make it active by pushing it on
+ // detailsZoomRangesStack. Down reverses the push/pop direction.
+ if (e.deltaY < 0) {
+ if (this.inactiveDetailsZoomRangesStack.length === 0) {
+ return;
+ }
+ this.detailsZoomRangesStack.push(
+ this.inactiveDetailsZoomRangesStack.pop()!
+ );
+ } else {
+ if (this.detailsZoomRangesStack.length === 0) {
+ return;
+ }
+ this.inactiveDetailsZoomRangesStack.push(
+ this.detailsZoomRangesStack.pop()!
+ );
}
- this.detailsZoomRangesStack.push(
- this.inactiveDetailsZoomRangesStack.pop()!
- );
- } else {
- if (this.detailsZoomRangesStack.length === 0) {
- return;
- }
- this.inactiveDetailsZoomRangesStack.push(
- this.detailsZoomRangesStack.pop()!
- );
+ this._zoomImpl();
}
- this._zoomImpl();
- }
- });
+ });
+ }
this.addEventListener('click', (e) => {
const pt = this.eventToCanvasPt(e);