]> git.0d.be Git - jack_mixer.git/blobdiff - abspeak.py
Set version to 14 in preparation for next release
[jack_mixer.git] / abspeak.py
index 83434ef51e5c2ff756cb321ebbc3cee3715155a7..d8451fd7c97deae94cb20f13f2c5f2d574c86e46 100644 (file)
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 
+import math
+
 from gi.repository import Gtk
 from gi.repository import Gdk
-from gi.repository import Pango
 from gi.repository import GObject
-import math
+
+
+CSS = b"""
+.over_zero {
+    background-color: #cc4c00;
+}
+
+.is_nan {
+    background-color: #b20000;
+}
+"""
+css_provider = Gtk.CssProvider()
+css_provider.load_from_data(CSS)
+context = Gtk.StyleContext()
+screen = Gdk.Screen.get_default()
+context.add_provider_for_screen(screen, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
+
 
 class AbspeakWidget(Gtk.EventBox):
     def __init__(self):
-        GObject.GObject.__init__(self)
+        super().__init__()
         self.label = Gtk.Label()
-        #attrs = Pango.AttrList()
-        #font_attr =  Pango.AttrFamily("monospace")
-        #attrs.insert(font_attr)
-        #self.label.set_attributes(attrs)
         self.add(self.label)
         self.connect("button-press-event", self.on_mouse)
         self.peak = -math.inf
 
+    def get_style_context(self):
+        return self.label.get_style_context()
+
     def on_mouse(self, widget, event):
         if event.type == Gdk.EventType.BUTTON_PRESS:
-            if event.button == 1:
+            if event.button == 1 or event.button == 2 or event.button == 3:
+                context = self.get_style_context()
+                context.remove_class('over_zero')
+                context.remove_class('is_nan')
+
+            if event.button == 1 or event.button == 3:
                 self.emit("reset")
             elif event.button == 2:
                 adjust = -self.peak
+
                 if abs(adjust) < 30:    # we better don't adjust more than +- 30 dB
                     self.emit("volume-adjust", adjust)
 
     def set_peak(self, peak):
         self.peak = peak
+        context = self.get_style_context()
+
         if math.isnan(peak):
-            self.modify_bg(Gtk.StateType.NORMAL, Gdk.Color(int(65535 * 0.7), 0, 0))
+            context.remove_class('over_zero')
+            context.add_class('is_nan')
             self.label.set_text("NaN")
         else:
             text = "%+.1f" % peak
+            context.remove_class('is_nan')
 
             if peak > 0:
-                self.modify_bg(Gtk.StateType.NORMAL, Gdk.Color(int(65535 * 0.8), int(65535 * 0.3), 0))
-            else:
-                pass
-                #self.modify_bg(Gtk.StateType.NORMAL, self.label.style.bg[Gtk.StateType.NORMAL])
+                context.add_class('over_zero')
 
             self.label.set_text(text)
 
+
 GObject.signal_new("reset", AbspeakWidget,
                    GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION, None, [])
 GObject.signal_new("volume-adjust", AbspeakWidget,
-                   GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION, None, [GObject.TYPE_FLOAT])
+                   GObject.SignalFlags.RUN_FIRST | GObject.SignalFlags.ACTION, None,
+                   [GObject.TYPE_FLOAT])