Make the Hippo-fied menu much prettier
This commit is contained in:
parent
72832e0174
commit
b241defcb2
@ -25,36 +25,55 @@ class Bubble(hippo.CanvasBox, hippo.CanvasItem):
|
|||||||
__gtype_name__ = 'NetworkBubble'
|
__gtype_name__ = 'NetworkBubble'
|
||||||
|
|
||||||
__gproperties__ = {
|
__gproperties__ = {
|
||||||
'color' : (object, None, None,
|
'fill-color': (object, None, None,
|
||||||
gobject.PARAM_READWRITE),
|
gobject.PARAM_READWRITE),
|
||||||
'percent' : (object, None, None,
|
'stroke-color': (object, None, None,
|
||||||
|
gobject.PARAM_READWRITE),
|
||||||
|
'progress-color': (object, None, None,
|
||||||
|
gobject.PARAM_READWRITE),
|
||||||
|
'percent' : (object, None, None,
|
||||||
gobject.PARAM_READWRITE),
|
gobject.PARAM_READWRITE),
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
self._color = None
|
self._stroke_color = 0xFFFFFFFF
|
||||||
|
self._fill_color = 0xFFFFFFFF
|
||||||
|
self._progress_color = 0x000000FF
|
||||||
self._percent = 0
|
self._percent = 0
|
||||||
self._radius = 8
|
self._radius = 8
|
||||||
|
|
||||||
hippo.CanvasBox.__init__(self, **kwargs)
|
hippo.CanvasBox.__init__(self, **kwargs)
|
||||||
|
|
||||||
def do_set_property(self, pspec, value):
|
def do_set_property(self, pspec, value):
|
||||||
if pspec.name == 'color':
|
if pspec.name == 'fill-color':
|
||||||
self._color = value
|
self._fill_color = value
|
||||||
|
self.emit_paint_needed(0, 0, -1, -1)
|
||||||
|
elif pspec.name == 'stroke-color':
|
||||||
|
self._stroke_color = value
|
||||||
|
self.emit_paint_needed(0, 0, -1, -1)
|
||||||
|
elif pspec.name == 'progress-color':
|
||||||
|
self._progress_color = value
|
||||||
self.emit_paint_needed(0, 0, -1, -1)
|
self.emit_paint_needed(0, 0, -1, -1)
|
||||||
elif pspec.name == 'percent':
|
elif pspec.name == 'percent':
|
||||||
self._percent = value
|
self._percent = value
|
||||||
self.emit_paint_needed(0, 0, -1, -1)
|
self.emit_paint_needed(0, 0, -1, -1)
|
||||||
|
|
||||||
def do_get_property(self, pspec):
|
def do_get_property(self, pspec):
|
||||||
if pspec.name == 'color':
|
if pspec.name == 'fill-color':
|
||||||
return self._color
|
return self._fill_color
|
||||||
|
elif pspec.name == 'stroke-color':
|
||||||
|
return self._stroke_color
|
||||||
|
elif pspec.name == 'progress-color':
|
||||||
|
return self._progress_color
|
||||||
elif pspec.name == 'percent':
|
elif pspec.name == 'percent':
|
||||||
return self._percent
|
return self._percent
|
||||||
|
|
||||||
def _string_to_rgb(self, color_string):
|
def _int_to_rgb(self, int_color):
|
||||||
col = gtk.gdk.color_parse(color_string)
|
red = (int_color >> 24) & 0x000000FF
|
||||||
return (col.red / 65535.0, col.green / 65535.0, col.blue / 65535.0)
|
green = (int_color >> 16) & 0x000000FF
|
||||||
|
blue = (int_color >> 8) & 0x000000FF
|
||||||
|
alpha = int_color & 0x000000FF
|
||||||
|
return (red / 255.0, green / 255.0, blue / 255.0)
|
||||||
|
|
||||||
def do_paint_below_children(self, cr, damaged_box):
|
def do_paint_below_children(self, cr, damaged_box):
|
||||||
[width, height] = self.get_allocation()
|
[width, height] = self.get_allocation()
|
||||||
@ -75,11 +94,38 @@ class Bubble(hippo.CanvasBox, hippo.CanvasItem):
|
|||||||
cr.arc(x + self._radius, y + self._radius, self._radius,
|
cr.arc(x + self._radius, y + self._radius, self._radius,
|
||||||
math.pi, math.pi * 1.5);
|
math.pi, math.pi * 1.5);
|
||||||
|
|
||||||
color = self._string_to_rgb(self._color.get_fill_color())
|
color = self._int_to_rgb(self._fill_color)
|
||||||
cr.set_source_rgb(*color)
|
cr.set_source_rgb(*color)
|
||||||
cr.fill_preserve();
|
cr.fill_preserve();
|
||||||
|
|
||||||
color = self._string_to_rgb(self._color.get_stroke_color())
|
color = self._int_to_rgb(self._stroke_color)
|
||||||
cr.set_source_rgb(*color)
|
cr.set_source_rgb(*color)
|
||||||
cr.set_line_width(line_width)
|
cr.set_line_width(line_width)
|
||||||
cr.stroke();
|
cr.stroke();
|
||||||
|
|
||||||
|
self._paint_progress_bar(cr, x, y, width, height, line_width)
|
||||||
|
|
||||||
|
def _paint_progress_bar(self, cr, x, y, width, height, line_width):
|
||||||
|
prog_x = x + line_width
|
||||||
|
prog_y = y + line_width
|
||||||
|
prog_width = (width - (line_width * 2)) * (self._percent / 100.0)
|
||||||
|
prog_height = (height - (line_width * 2))
|
||||||
|
|
||||||
|
x = prog_x
|
||||||
|
y = prog_y
|
||||||
|
width = prog_width
|
||||||
|
height = prog_height
|
||||||
|
|
||||||
|
cr.move_to(x + self._radius, y);
|
||||||
|
cr.arc(x + width - self._radius, y + self._radius,
|
||||||
|
self._radius, math.pi * 1.5, math.pi * 2);
|
||||||
|
cr.arc(x + width - self._radius, x + height - self._radius,
|
||||||
|
self._radius, 0, math.pi * 0.5);
|
||||||
|
cr.arc(x + self._radius, y + height - self._radius,
|
||||||
|
self._radius, math.pi * 0.5, math.pi);
|
||||||
|
cr.arc(x + self._radius, y + self._radius, self._radius,
|
||||||
|
math.pi, math.pi * 1.5);
|
||||||
|
|
||||||
|
color = self._int_to_rgb(self._progress_color)
|
||||||
|
cr.set_source_rgb(*color)
|
||||||
|
cr.fill_preserve();
|
||||||
|
@ -189,7 +189,7 @@ class Device(gobject.GObject):
|
|||||||
del self._networks[net_op]
|
del self._networks[net_op]
|
||||||
|
|
||||||
def _add_to_menu_wired(self, menu):
|
def _add_to_menu_wired(self, menu):
|
||||||
item = NetworkMenuItem(_("Wired Network"))
|
item = NetworkMenuItem(_("Wired Network"), stylesheet="nm.Bubble.Wired")
|
||||||
menu.add_item(item)
|
menu.add_item(item)
|
||||||
|
|
||||||
def _add_to_menu_wireless(self, menu):
|
def _add_to_menu_wireless(self, menu):
|
||||||
@ -265,17 +265,43 @@ class Device(gobject.GObject):
|
|||||||
def set_carrier(self, on):
|
def set_carrier(self, on):
|
||||||
self._link = on
|
self._link = on
|
||||||
|
|
||||||
|
nm_bubble_wireless = {
|
||||||
|
'fill-color' : 0x646464FF,
|
||||||
|
'stroke-color' : 0x646464FF,
|
||||||
|
'progress-color': 0x333333FF,
|
||||||
|
'spacing' : style.space_unit,
|
||||||
|
'padding' : style.space_unit
|
||||||
|
}
|
||||||
|
|
||||||
|
nm_bubble_wired = {
|
||||||
|
'fill-color' : 0x000000FF,
|
||||||
|
'stroke-color' : 0x000000FF,
|
||||||
|
'progress-color': 0x000000FF,
|
||||||
|
'spacing' : style.space_unit,
|
||||||
|
'padding' : style.space_unit
|
||||||
|
}
|
||||||
|
|
||||||
|
nm_menu_item_title = {
|
||||||
|
'xalign': hippo.ALIGNMENT_START,
|
||||||
|
'padding-left': 5,
|
||||||
|
'color' : 0xFFFFFFFF,
|
||||||
|
'font' : style.get_font_description('Bold', 1.2)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
style.register_stylesheet("nm.Bubble.Wireless", nm_bubble_wireless)
|
||||||
|
style.register_stylesheet("nm.Bubble.Wired", nm_bubble_wired)
|
||||||
|
style.register_stylesheet("nm.MenuItem.Title", nm_menu_item_title)
|
||||||
|
|
||||||
class NetworkMenuItem(Bubble):
|
class NetworkMenuItem(Bubble):
|
||||||
def __init__(self, text, percent=0):
|
def __init__(self, text, percent=0, stylesheet="nm.Bubble.Wireless"):
|
||||||
color = IconColor("#646464,#646464")
|
Bubble.__init__(self, percent=percent)
|
||||||
Bubble.__init__(self, color=color, percent=percent)
|
style.apply_stylesheet(self, stylesheet)
|
||||||
|
|
||||||
text_item = hippo.CanvasText(text=text)
|
text_item = hippo.CanvasText(text=text)
|
||||||
style.apply_stylesheet(text_item, 'menu.Text')
|
style.apply_stylesheet(text_item, 'nm.MenuItem.Title')
|
||||||
self.append(text_item)
|
self.append(text_item)
|
||||||
|
|
||||||
|
|
||||||
class NetworkMenu(gtk.Window):
|
class NetworkMenu(gtk.Window):
|
||||||
__gsignals__ = {
|
__gsignals__ = {
|
||||||
'action': (gobject.SIGNAL_RUN_FIRST,
|
'action': (gobject.SIGNAL_RUN_FIRST,
|
||||||
@ -446,7 +472,6 @@ class NMClientApp:
|
|||||||
|
|
||||||
def do_popup(self, current, n_frames):
|
def do_popup(self, current, n_frames):
|
||||||
if self._menu:
|
if self._menu:
|
||||||
self._popdown()
|
|
||||||
return
|
return
|
||||||
|
|
||||||
self._menu = self._create_menu()
|
self._menu = self._create_menu()
|
||||||
|
Loading…
Reference in New Issue
Block a user