Removing dead code
[watersofshiloah] / src / presenter.py
index 65899b7..45df079 100644 (file)
@@ -2,7 +2,6 @@ import logging
 
 import gobject
 import pango
-import cairo
 import gtk
 
 import util.misc as misc_utils
@@ -26,7 +25,7 @@ class NavigationBox(gobject.GObject):
                ),
        }
 
-       MINIMUM_MOVEMENT = 20
+       MINIMUM_MOVEMENT = 32
 
        _NO_POSITION = -1, -1
 
@@ -59,16 +58,10 @@ class NavigationBox(gobject.GObject):
                if self._clickPosition == self._NO_POSITION:
                        return ""
 
-               if self._isPortrait:
-                       delta = (
-                               newCoord[0] - self._clickPosition[0],
-                               - (newCoord[1] - self._clickPosition[1])
-                       )
-               else:
-                       delta = (
-                               newCoord[1] - self._clickPosition[1],
-                               - (newCoord[0] - self._clickPosition[0])
-                       )
+               delta = (
+                       newCoord[0] - self._clickPosition[0],
+                       - (newCoord[1] - self._clickPosition[1])
+               )
                absDelta = (abs(delta[0]), abs(delta[1]))
                if max(*absDelta) < self.MINIMUM_MOVEMENT:
                        return "clicking"
@@ -99,9 +92,9 @@ class NavigationBox(gobject.GObject):
                        mousePosition = event.get_coords()
                        state = self.get_state(mousePosition)
                        assert state
-                       self.emit("action", state)
                finally:
                        self._clickPosition = self._NO_POSITION
+               self.emit("action", state)
 
        @misc_utils.log_exception(_moduleLogger)
        def _on_motion_notify(self, widget, event):
@@ -130,6 +123,8 @@ class StreamPresenter(object):
                self._title = ""
                self._subtitle = ""
                self._buttonImage = None
+               self._imageName = ""
+               self._dims = 0, 0
 
        @property
        def toplevel(self):
@@ -143,45 +138,37 @@ class StreamPresenter(object):
                else:
                        raise NotImplementedError(orientation)
 
-               cairoContext = self._image.window.cairo_create()
-               if not self._isPortrait:
-                       cairoContext.transform(cairo.Matrix(0, 1, 1, 0, 0, 0))
-               self._draw_presenter(cairoContext)
+               self._image.queue_draw()
 
        def set_state(self, stateImage):
+               if stateImage == self._imageName:
+                       return
+               self._imageName = stateImage
                self._buttonImage = self._store.get_surface_from_store(stateImage)
 
-               cairoContext = self._image.window.cairo_create()
-               if not self._isPortrait:
-                       cairoContext.transform(cairo.Matrix(0, 1, 1, 0, 0, 0))
-               self._draw_state(cairoContext)
+               self._image.queue_draw()
 
        def set_context(self, backgroundImage, title, subtitle):
                self._backgroundImage = self._store.get_surface_from_store(backgroundImage)
+               self._title = title
+               self._subtitle = subtitle
 
-               if self._isPortrait:
-                       backWidth = self._backgroundImage.get_width()
-                       backHeight = self._backgroundImage.get_height()
-               else:
-                       backHeight = self._backgroundImage.get_width()
-                       backWidth = self._backgroundImage.get_height()
+               backWidth = self._backgroundImage.get_width()
+               backHeight = self._backgroundImage.get_height()
                self._image.set_size_request(backWidth, backHeight)
 
-               cairoContext = self._image.window.cairo_create()
-               if not self._isPortrait:
-                       cairoContext.transform(cairo.Matrix(0, 1, 1, 0, 0, 0))
-               self._draw_presenter(cairoContext)
+               self._image.queue_draw()
 
        @misc_utils.log_exception(_moduleLogger)
        def _on_expose(self, widget, event):
                cairoContext = self._image.window.cairo_create()
-               if not self._isPortrait:
-                       cairoContext.transform(cairo.Matrix(0, 1, 1, 0, 0, 0))
                self._draw_presenter(cairoContext)
 
        def _draw_presenter(self, cairoContext):
-               # Blank things
                rect = self._image.get_allocation()
+               self._dims = rect.width, rect.height
+
+               # Blank things
                cairoContext.rectangle(
                        0,
                        0,
@@ -190,7 +177,6 @@ class StreamPresenter(object):
                )
                cairoContext.set_source_rgb(0, 0, 0)
                cairoContext.fill()
-               cairoContext.paint()
 
                # Draw Background
                if self._backgroundImage is not None:
@@ -201,42 +187,54 @@ class StreamPresenter(object):
                        )
                        cairoContext.paint()
 
-               # title
-               if self._title or self._subtitle:
-                       backWidth = self._backgroundImage.get_width()
-                       backHeight = self._backgroundImage.get_height()
+               pangoContext = self._image.create_pango_context()
 
-                       pangoContext = self._image.create_pango_context()
-                       textLayout = pango.Layout(pangoContext)
+               titleLayout = pango.Layout(pangoContext)
+               titleLayout.set_markup("<i>%s</i>" % self._subtitle)
+               textWidth, textHeight = titleLayout.get_pixel_size()
+               subtitleTextX = self._dims[0] / 2 - textWidth / 2
+               subtitleTextY = self._dims[1] - textHeight - self._buttonImage.get_height() + 10
 
-                       textLayout.set_markup(self._subtitle)
-                       textWidth, textHeight = textLayout.get_pixel_size()
-                       subtitleTextX = backWidth / 2 - textWidth / 2
-                       subtitleTextY = backHeight - textHeight - self._buttonImage.get_height()
+               subtitleLayout = pango.Layout(pangoContext)
+               subtitleLayout.set_markup("<b>%s</b>" % self._title)
+               textWidth, textHeight = subtitleLayout.get_pixel_size()
+               textX = self._dims[0] / 2 - textWidth / 2
+               textY = subtitleTextY - textHeight
+
+               xPadding = min((self._dims[0] - textWidth) / 2 - 5, 5)
+               yPadding = 5
+               startContent = xPadding, textY - yPadding
+               endContent = self._dims[0] - xPadding,  self._dims[1] - yPadding
+
+               # Control background
+               cairoContext.rectangle(
+                       startContent[0],
+                       startContent[1],
+                       endContent[0] - startContent[0],
+                       endContent[1] - startContent[1],
+               )
+               cairoContext.set_source_rgba(0.9, 0.9, 0.9, 0.75)
+               cairoContext.fill()
+
+               # title
+               if self._title or self._subtitle:
                        cairoContext.move_to(subtitleTextX, subtitleTextY)
                        cairoContext.set_source_rgb(0, 0, 0)
-                       cairoContext.show_layout(textLayout)
+                       cairoContext.show_layout(titleLayout)
 
-                       textLayout.set_markup(self._title)
-                       textWidth, textHeight = textLayout.get_pixel_size()
-                       textX = backWidth / 2 - textWidth / 2
-                       textY = subtitleTextY - textHeight
                        cairoContext.move_to(textX, textY)
                        cairoContext.set_source_rgb(0, 0, 0)
-                       cairoContext.show_layout(textLayout)
+                       cairoContext.show_layout(subtitleLayout)
 
                self._draw_state(cairoContext)
 
        def _draw_state(self, cairoContext):
                if self._backgroundImage is None or self._buttonImage is None:
                        return
-               backWidth = self._backgroundImage.get_width()
-               backHeight = self._backgroundImage.get_height()
-
                cairoContext.set_source_surface(
                        self._buttonImage,
-                       backWidth / 2 - self._buttonImage.get_width() / 2,
-                       backHeight - self._buttonImage.get_height() + 5,
+                       self._dims[0] / 2 - self._buttonImage.get_width() / 2,
+                       self._dims[1] - self._buttonImage.get_height() + 5,
                )
                cairoContext.paint()