[pitivi] widgets: Fix NumericWidget's expansion
- From: Thibault Saunier <tsaunier src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi] widgets: Fix NumericWidget's expansion
- Date: Thu, 17 Dec 2015 10:00:46 +0000 (UTC)
commit dd142915bf001df47cf5540b46bbc2f4511fc16d
Author: Alexandru Băluț <alexandru balut gmail com>
Date: Thu Oct 29 13:25:01 2015 +0100
widgets: Fix NumericWidget's expansion
The NumericWidget uses a SpinButton and when the max value of the
SpinButton's adjustment is very large it takes up a lot of space.
Fixed this by setting a cap on the limits.
See https://bugzilla.gnome.org/show_bug.cgi?id=727294
Reviewed-by: Thibault Saunier <tsaunier gnome org>
Differential Revision: https://phabricator.freedesktop.org/D528
pitivi/utils/widgets.py | 47 ++++++++++++++++++++++++++---------------------
1 files changed, 26 insertions(+), 21 deletions(-)
---
diff --git a/pitivi/utils/widgets.py b/pitivi/utils/widgets.py
index 892c5ac..4d96c3e 100644
--- a/pitivi/utils/widgets.py
+++ b/pitivi/utils/widgets.py
@@ -29,7 +29,6 @@ A collection of helper classes and routines for:
import math
import os
import re
-import sys
from gi.repository import Gtk
from gi.repository import Gdk
@@ -37,6 +36,7 @@ from gi.repository import Gst
from gi.repository import GES
from gi.repository import Pango
from gi.repository import GObject
+from gi.repository import GLib
from gettext import gettext as _
@@ -212,11 +212,25 @@ class NumericWidget(Gtk.Box, DynamicWidget):
self.set_orientation(Gtk.Orientation.HORIZONTAL)
self.set_spacing(SPACING)
- self.adjustment = Gtk.Adjustment()
- self.upper = upper
- self.lower = lower
self._type = None
- if (lower is not None and upper is not None) and (lower > -5000 and upper < 5000):
+
+ reasonable_limit = 5000
+ with_slider = (lower is not None and lower > -reasonable_limit and
+ upper is not None and upper < reasonable_limit)
+
+ self.adjustment = Gtk.Adjustment()
+ # Limit the limits, otherwise the widget appears huge.
+ # Workaround https://bugzilla.gnome.org/show_bug.cgi?id=727294
+ # If these hardcoded limits are a problem, the fix should be passing
+ # the proper limits using the upper and lower parameters.
+ if upper is None:
+ upper = GLib.MAXINT16
+ if lower is None:
+ lower = GLib.MININT16
+ self.adjustment.props.lower = max(GLib.MININT16, lower)
+ self.adjustment.props.upper = min(upper, GLib.MAXINT16)
+
+ if with_slider:
self.slider = Gtk.Scale.new(
Gtk.Orientation.HORIZONTAL, self.adjustment)
self.pack_end(self.slider, expand=False, fill=False, padding=0)
@@ -230,14 +244,8 @@ class NumericWidget(Gtk.Box, DynamicWidget):
self.slider.set_fill_level(float(default))
self.slider.set_show_fill_level(True)
- if upper is None:
- upper = GObject.G_MAXDOUBLE
- if lower is None:
- lower = GObject.G_MINDOUBLE
- self.adjustment.props.lower = lower
- self.adjustment.props.upper = upper
self.spinner = Gtk.SpinButton(adjustment=self.adjustment)
- self.pack_end(self.spinner, expand=False, fill=False, padding=0)
+ self.pack_start(self.spinner, expand=False, fill=False, padding=0)
self.spinner.show()
def connectValueChanged(self, callback, *args):
@@ -254,21 +262,18 @@ class NumericWidget(Gtk.Box, DynamicWidget):
if self._type is None:
self._type = type_
- if type_ == int or type_ == int:
- minimum, maximum = (-sys.maxsize, sys.maxsize)
+ if type_ == int:
step = 1.0
page = 10.0
elif type_ == float:
- minimum, maximum = (GObject.G_MINDOUBLE, GObject.G_MAXDOUBLE)
step = 0.01
page = 0.1
self.spinner.props.digits = 2
- if self.lower is not None:
- minimum = self.lower
- if self.upper is not None:
- maximum = self.upper
- self.adjustment.configure(value, minimum, maximum, step, page, 0)
- self.spinner.set_adjustment(self.adjustment)
+ else:
+ raise Exception('Unsupported property type: %s' % type_)
+ lower = min(self.adjustment.props.lower, value)
+ upper = max(self.adjustment.props.upper, value)
+ self.adjustment.configure(value, lower, upper, step, page, 0)
class TimeWidget(TextWidget, DynamicWidget):
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]