From 2dcad7c70f2f1ae324abf3a7bb83657f7b236f05 Mon Sep 17 00:00:00 2001 From: Thomas Hansen Date: Sat, 6 Nov 2010 23:29:27 -0500 Subject: [PATCH 1/2] add slider widget and default style --- kivy/data/glsl/default.png | Bin 8793 -> 224 bytes kivy/data/style.kv | 11 +++----- kivy/uix/slider.py | 50 ++++++++++++++++++++++++++++++------- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/kivy/data/glsl/default.png b/kivy/data/glsl/default.png index 12ed7e372de112ccb5f846cc241251069e0fa1db..a14255e4de12573962e0f5700f4ea6161ac15469 100644 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$#^NA%Cx&(BWL^R}oCO|{#S9GG z!XV7ZFl&wkP>{XE)7O>#7B@SygwV4|r#XQ_k|nMYCC>S|xv6<249-QVi6yBi3gww4 z84B*6z5(HleBwYwzMd|QAsP4Ho_FMBVBla;*joSGxRu{L!$E!J`DOEj1xNuqwim5p Vu8q5yJP&9vgQu&X%Q~loCID}3GN%9l literal 8793 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: canvas: + #draw the background Color: rgb: (.3, .3, .3) Rectangle: pos: self.pos size: self.size + #draw the index marker Color: rgb: (.7, .2, .5) Rectangle: - pos: self.handle_pos + pos: self.value_pos size: (20,self.height) - - - - - - diff --git a/kivy/uix/slider.py b/kivy/uix/slider.py index 19dd26548..32a1d179f 100644 --- a/kivy/uix/slider.py +++ b/kivy/uix/slider.py @@ -4,13 +4,9 @@ Slider: ''' __all__ = ('Slider', ) - from kivy.uix.widget import Widget from kivy.c_ext.properties import NumericProperty, AliasProperty - - - class Slider(Widget): def __init__(self, **kwargs): super(Slider, self).__init__(**kwargs) @@ -24,9 +20,45 @@ class Slider(Widget): #: Maximum value of the slider (used for rendering) max = NumericProperty(100) - def _handle_pos(self): - 'x,y position of the slider handle' - offset = (self.value - self.min) / (self.width/(self.max-self.min)) - return [self.x+offset, self.x, self.y] - handle_pos = AliasProperty(_handle_pos, None) + #: Range of the slider. same as (self.min, self.max) + def get_range(self): + return (self.min, self.max) + def set_range(self, range): + self.min, self.max = range + range = AliasProperty(get_range, set_range, bind=(min, max)) + + #: The value of the slide normalized to the range [min - max] + def get_norm_value(self): + return (self.value - self.min) / float(self.max-self.min) + def set_norm_value(self, n_val): + self.value = n_val*(self.max-self.min) + self.min + value_normalized = AliasProperty(get_norm_value, set_norm_value, bind=(value, min, max)) + + #: The value of the slider mapped to the screen position between self.x and self.right + def get_value_pos(self): + return (self.x + self.value_normalized*self.width, self.y) + def set_value_pos(self, pos): + self.value_normalized = (pos[0] - self.x) / float(self.width) + value_pos = AliasProperty(get_value_pos, set_value_pos, bind=(value, min, max, value_normalized)) + + + #: on touch_down handler. if inside slider: grab touch, set value based on touch pos + def on_touch_down(self, touch): + if self.collide_point(*touch.pos): + touch.grab(self) + self.value_pos = touch.pos + return True + + #: on_touch_move handler. set value based on where the touch occured + def on_touch_move(self, touch): + if touch.grab_current == self: + self.value_pos = touch.pos + return True + + #: on_touch_up handler. set value based on touch pos, and ungrab touch + def on_touch_up(self, touch): + if touch.grab_current == self: + self.value_pos = touch.pos + return True + From 6f98dcf6f7cc1b0f83499418cdf6293b372ad574 Mon Sep 17 00:00:00 2001 From: Thomas Hansen Date: Sat, 6 Nov 2010 23:31:55 -0500 Subject: [PATCH 2/2] move slider drawing to style.kv --- kivy/data/style.kv | 2 -- 1 file changed, 2 deletions(-) diff --git a/kivy/data/style.kv b/kivy/data/style.kv index 33fc92ecc..e2d331808 100644 --- a/kivy/data/style.kv +++ b/kivy/data/style.kv @@ -20,14 +20,12 @@ : canvas: - #draw the background Color: rgb: (.3, .3, .3) Rectangle: pos: self.pos size: self.size - #draw the index marker Color: rgb: (.7, .2, .5) Rectangle: