Make forecastbox scroll- and panable.

multiprovider
Jens Lody 11 years ago
parent b025c21667
commit 781d9a2cd3
  1. 42
      src/extension.js

@ -1675,6 +1675,12 @@ weather-storm.png = weather-storm-symbolic.svg
this._currentWeather.set_child(box);
},
scrollForecastBy: function(delta) {
if (this._forecastScrollBox == undefined)
return;
this._forecastScrollBox.hscroll.adjustment.value += delta;
},
rebuildFutureWeatherUi: function() {
this.destroyFutureWeather();
@ -1687,11 +1693,28 @@ weather-storm.png = weather-storm-symbolic.svg
this._forecastScrollBox = new St.ScrollView({
style_class: 'weather-forecasts'
});
let pan = new Clutter.PanAction({
interpolate: true
});
pan.connect('pan', Lang.bind(this, function(action) {
let[dist, dx, dy] = action.get_motion_delta(0);
this.scrollForecastBy(-1 * (dx / this._forecastScrollBox.width) * this._forecastScrollBox.hscroll.adjustment.page_size);
return false;
}));
this._forecastScrollBox.add_action(pan);
this._forecastScrollBox.connect('scroll-event', Lang.bind(this, this._onScroll));
this._forecastScrollBox.hscroll.connect('scroll-event', Lang.bind(this, this._onScroll));
this._forecastScrollBox.hscroll.margin_right = 25;
this._forecastScrollBox.hscroll.margin_left = 25;
this._forecastScrollBox.hscroll.hide();
this._forecastScrollBox.vscrollbar_policy = Gtk.PolicyType.NEVER;
this._forecastScrollBox.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC;
this._forecastScrollBox.enable_mouse_scrolling = true;
this._forecastScrollBox.hide();
this._futureWeather.set_child(this._forecastScrollBox);
@ -1732,6 +1755,25 @@ weather-storm.png = weather-storm-symbolic.svg
this._forecastBox.add_actor(bb);
}
this._forecastScrollBox.add_actor(this._forecastBox);
},
_onScroll: function(actor, event) {
let dx = 0;
let dy = 0;
switch (event.get_scroll_direction()) {
case Clutter.ScrollDirection.UP:
dy = -1;
break;
case Clutter.ScrollDirection.DOWN:
dy = 1;
break;
// horizontal scrolling will be handled by the control itself
default:
return true;
}
this.scrollForecastBy(dy * this._forecastScrollBox.hscroll.adjustment.stepIncrement);
return false;
}
});

Loading…
Cancel
Save