FEATURE: Added marker lines to ease meter-reading
git-svn-id: http://www.neo1973-germany.de/svn@80 46df4e5c-bc4e-4628-a0fc-830ba316316d
This commit is contained in:
parent
6f321a441c
commit
d1cd97cf39
1 changed files with 81 additions and 23 deletions
|
@ -46,6 +46,9 @@ class slider_2d(gtk.HBox):
|
|||
self.bg_color = bg_color
|
||||
self.fg_color = fg_color
|
||||
|
||||
self.mark_color = "#AAAAAA"
|
||||
self.hover_color = "#555588"
|
||||
|
||||
self.x_value = int(x_range[1] - x_range[0] / 2)
|
||||
self.y_value = int(x_range[1] - x_range[0] / 2)
|
||||
self.mouse_x_position = -1
|
||||
|
@ -53,7 +56,7 @@ class slider_2d(gtk.HBox):
|
|||
self.clicked = False
|
||||
|
||||
self.area = gtk.DrawingArea()
|
||||
self.area.set_size_request(400, 300)
|
||||
# self.area.set_size_request(400, 300)
|
||||
style = self.area.get_style()
|
||||
self.gc = style.fg_gc[gtk.STATE_NORMAL]
|
||||
self.area.set_events(gtk.gdk.POINTER_MOTION_MASK |
|
||||
|
@ -201,29 +204,78 @@ class slider_2d(gtk.HBox):
|
|||
# 1) clear screen
|
||||
self.area.window.draw_rectangle(self.gc, True, 0, 0, -1, -1)
|
||||
self.gc.foreground = fg_backup
|
||||
|
||||
backup_fb = self.gc.foreground
|
||||
try:
|
||||
self.gc.foreground = self.area.window.get_colormap()\
|
||||
.alloc_color(self.fg_color)
|
||||
self.gc.set_line_attributes(1, \
|
||||
gtk.gdk.LINE_SOLID, gtk.gdk.CAP_ROUND, \
|
||||
gtk.gdk.CAP_ROUND)
|
||||
|
||||
# 2) draw grid
|
||||
x_max = self.width * 1.0 -1
|
||||
y_max = self.height * 1.0 -1
|
||||
x_spacing = x_max / self.x_resolution
|
||||
y_spacing = y_max / self.y_resolution
|
||||
for i in range(self.x_resolution+2):
|
||||
self.area.window.draw_line(self.gc, int(x_spacing * i), 0, int(x_spacing * i), int(y_max))
|
||||
|
||||
for i in range(self.y_resolution+2):
|
||||
self.area.window.draw_line(self.gc, 0, int(y_spacing * i), int(x_max), int(y_spacing * i))
|
||||
finally:
|
||||
self.gc.foreground = backup_fb
|
||||
self.draw_grid()
|
||||
self.show_point(self.x_value, self.y_value)
|
||||
|
||||
|
||||
def draw_grid(self):
|
||||
backup_fb = self.gc.foreground
|
||||
try:
|
||||
self.set_color(self.fg_color)
|
||||
self.gc.set_line_attributes(1, \
|
||||
gtk.gdk.LINE_SOLID, gtk.gdk.CAP_ROUND, \
|
||||
gtk.gdk.CAP_ROUND)
|
||||
# 2) draw grid
|
||||
x_max = self.width * 1.0 -1
|
||||
y_max = self.height * 1.0 -1
|
||||
x_spacing = x_max / self.x_resolution
|
||||
y_spacing = y_max / self.y_resolution
|
||||
for i in range(self.x_resolution+2):
|
||||
if i == self.x_value:
|
||||
self.set_color(self.mark_color)
|
||||
self.area.window.draw_line(self.gc, int(x_spacing * i),\
|
||||
0, int(x_spacing * i), int(y_max))
|
||||
self.set_color(self.fg_color)
|
||||
elif i == self.mouse_x_position:
|
||||
self.set_color(self.hover_color)
|
||||
self.area.window.draw_line(self.gc, int(x_spacing * i),\
|
||||
0, int(x_spacing * i), int(y_max))
|
||||
self.set_color(self.fg_color)
|
||||
else:
|
||||
self.area.window.draw_line(self.gc, int(x_spacing * i),\
|
||||
0, int(x_spacing * i), int(y_max))
|
||||
|
||||
for i in range(self.y_resolution+2):
|
||||
if i == self.y_value:
|
||||
self.set_color(self.mark_color)
|
||||
self.area.window.draw_line(self.gc, 0, \
|
||||
int(y_spacing * i), int(x_max), int(y_spacing * i))
|
||||
self.set_color(self.fg_color)
|
||||
elif i == self.mouse_y_position:
|
||||
self.set_color(self.hover_color)
|
||||
self.area.window.draw_line(self.gc, 0, \
|
||||
int(y_spacing * i), int(x_max), int(y_spacing * i))
|
||||
self.set_color(self.fg_color)
|
||||
else:
|
||||
self.area.window.draw_line(self.gc, 0, \
|
||||
int(y_spacing * i), int(x_max), int(y_spacing * i))
|
||||
|
||||
# redraw hover (was overdrawn my other lines)
|
||||
self.set_color(self.hover_color)
|
||||
self.area.window.draw_line(self.gc, \
|
||||
int(x_spacing * self.mouse_x_position),\
|
||||
0, int(x_spacing * self.mouse_x_position), int(y_max))
|
||||
self.area.window.draw_line(self.gc, 0, \
|
||||
int(y_spacing * self.mouse_y_position), int(x_max), \
|
||||
int(y_spacing * self.mouse_y_position))
|
||||
|
||||
# redraw value (was overdrawn my other lines)
|
||||
self.set_color(self.mark_color)
|
||||
self.area.window.draw_line(self.gc, \
|
||||
int(x_spacing * self.x_value),\
|
||||
0, int(x_spacing * self.x_value), int(y_max))
|
||||
self.area.window.draw_line(self.gc, 0, \
|
||||
int(y_spacing * self.y_value), int(x_max), \
|
||||
int(y_spacing * self.y_value))
|
||||
|
||||
finally:
|
||||
self.gc.foreground = backup_fb
|
||||
|
||||
def set_color(self, color_string):
|
||||
self.gc.foreground = self.area.window.get_colormap()\
|
||||
.alloc_color(color_string)
|
||||
|
||||
|
||||
def draw_pixmap(self, x, y, img):
|
||||
"""
|
||||
loads and draws image to our area
|
||||
|
@ -255,6 +307,8 @@ class slider_2d(gtk.HBox):
|
|||
x_spacing = x_max / self.x_resolution
|
||||
y_spacing = y_max / self.y_resolution
|
||||
|
||||
self.draw_grid()
|
||||
self.show_point(self.x_value, self.y_value)
|
||||
self.draw_pixmap(x_spacing * int(x_value), y_spacing * int(y_value),\
|
||||
POINT_INV_IMAGE)
|
||||
|
||||
|
@ -278,8 +332,12 @@ class slider_2d(gtk.HBox):
|
|||
self.area.window.draw_rectangle(self.gc, True, \
|
||||
start_x, start_y, IMAGE_SIZE_X, IMAGE_SIZE_Y)
|
||||
self.gc.foreground = fg_backup
|
||||
|
||||
|
||||
# easyest way for now: redraw all lines
|
||||
self.draw_grid()
|
||||
|
||||
"""
|
||||
backup_fb = self.gc.foreground
|
||||
try:
|
||||
self.gc.foreground = self.area.window.get_colormap()\
|
||||
|
@ -299,5 +357,5 @@ class slider_2d(gtk.HBox):
|
|||
self.area.window.draw_line(self.gc, 0, int(y_spacing * i), int(x_max), int(y_spacing * i))
|
||||
finally:
|
||||
self.gc.foreground = backup_fb
|
||||
|
||||
"""
|
||||
self.show_point(self.x_value, self.y_value)
|
||||
|
|
Loading…
Reference in a new issue