Merge branch 'master' of github.com:kivy/kivy

This commit is contained in:
Thomas Hansen 2012-09-20 10:30:23 -05:00
commit 694219d6ae
8 changed files with 106 additions and 7 deletions

View File

@ -59,10 +59,10 @@ class Keyboard(EventDispatcher):
'screenlock': 145, 'pause': 19,
# a-z keys
'q': 97, 'b': 98, 'c': 99, 'q': 100, 'e': 101, 'f': 102, 'g': 103,
'a': 97, 'b': 98, 'c': 99, 'd': 100, 'e': 101, 'f': 102, 'g': 103,
'h': 104, 'i': 105, 'j': 106, 'k': 107, 'l': 108, 'm': 109, 'n': 110,
'o': 111, 'p': 112, 'a': 113, 'r': 114, 's': 115, 't': 116, 'u': 117,
'v': 118, 'z': 119, 'x': 120, 'y': 121, 'w': 122,
'o': 111, 'p': 112, 'q': 113, 'r': 114, 's': 115, 't': 116, 'u': 117,
'v': 118, 'w': 119, 'x': 120, 'y': 121, 'z': 122,
# 0-9 keys
'0': 48, '1': 49, '2': 50, '3': 51, '4': 52,

View File

@ -1,6 +1,6 @@
$HEADER$
void main (void) {
frag_color = color;
frag_color = color * vec4(1.0, 1.0, 1.0, opacity);
tex_coord0 = vTexCoords0;
gl_Position = projection_mat * modelview_mat * vec4(vPosition.xy, 0.0, 1.0);
}

View File

@ -14,3 +14,4 @@ attribute vec2 vTexCoords0;
uniform mat4 modelview_mat;
uniform mat4 projection_mat;
uniform vec4 color;
uniform float opacity;

View File

@ -119,10 +119,10 @@
Color:
rgba: self.background_color
BorderImage:
border: (16, 16, 16, 16)
border: self.border
pos: self.pos
size: self.size
source: 'atlas://data/images/defaulttheme/textinput%s' % ('_active' if self.focus else '')
source: self.background_active if self.focus else self.background_normal
Color:
rgba: (1, 0, 0, 1 if self.focus and not self.cursor_blink else 0)
Rectangle:

View File

@ -82,6 +82,7 @@ cdef class CanvasBase(InstructionGroup):
cdef class Canvas(CanvasBase):
cdef object __weakref__
cdef float _opacity
cdef CanvasBase _before
cdef CanvasBase _after
cdef void reload(self)
@ -89,6 +90,7 @@ cdef class Canvas(CanvasBase):
cpdef add(self, Instruction c)
cpdef remove(self, Instruction c)
cpdef draw(self)
cdef void apply(self)
cdef class RenderContext(Canvas):

View File

@ -499,6 +499,7 @@ cdef class Canvas(CanvasBase):
def __init__(self, **kwargs):
get_context().register_canvas(self)
CanvasBase.__init__(self, **kwargs)
self._opacity = kwargs.get('opacity', 1.0)
self._before = None
self._after = None
@ -530,6 +531,19 @@ cdef class Canvas(CanvasBase):
'''
self.apply()
cdef void apply(self):
cdef float opacity = self._opacity
cdef float rc_opacity
cdef RenderContext rc
if opacity != 1.0:
rc = getActiveContext()
rc_opacity = rc['opacity']
rc.push_state('opacity')
rc['opacity'] = rc_opacity * opacity
InstructionGroup.apply(self)
if opacity != 1.0:
rc.pop_state('opacity')
cpdef add(self, Instruction c):
# the after group must remain the last one.
if self._after is None:
@ -569,6 +583,30 @@ cdef class Canvas(CanvasBase):
self._after = c
return self._after
property opacity:
'''Property for get/set the opacity value of the canvas.
.. versionadded:: 1.4.1
The opacity attribute controls the opacity of the canvas and its
children. Be careful, it's a cumulative attribute: the value is
multiplied to the current global opacity, and the result is applied to
the current context color.
For example: if your parent have an opacity of 0.5, and one children have an
opacity of 0.2, the real opacity of the children will be 0.5 * 0.2 = 0.1.
Then, the opacity is applied on the shader as::
frag_color = color * vec4(1.0, 1.0, 1.0, opacity);
'''
def __get__(self):
return self._opacity
def __set__(self, value):
self._opacity = value
self.flag_update()
# Active Canvas and getActiveCanvas function is used
# by instructions, so they know which canvas to add
# tehmselves to
@ -629,8 +667,8 @@ cdef class RenderContext(Canvas):
self.default_texture = tex
self.state_stacks = {
'opacity': [1.0],
'texture0' : [0],
'linewidth': [1.0],
'color' : [[1.0,1.0,1.0,1.0]],
'projection_mat': [Matrix()],
'modelview_mat' : [Matrix()],

View File

@ -1472,6 +1472,40 @@ class TextInput(Widget):
to [0.1843, 0.6549, 0.8313, .5]
'''
border = ListProperty([16, 16, 16, 16])
'''Border used for :class:`~kivy.graphics.vertex_instructions.BorderImage`
graphics instruction. Used with :data:`background_normal` and
:data:`background_active`. Can be used for a custom background.
.. versionadded:: 1.4.1
It must be a list of four values: (top, right, bottom, left). Read the
BorderImage instruction for more information about how to use it.
:data:`border` is a :class:`~kivy.properties.ListProperty`, default to (16,
16, 16, 16)
'''
background_normal = StringProperty(
'atlas://data/images/defaulttheme/textinput')
'''Background image of the TextInput when it's not in focus'.
.. versionadded:: 1.4.1
:data:`background_normal` is a :class:`~kivy.properties.StringProperty`,
default to 'atlas://data/images/defaulttheme/textinput'
'''
background_active = StringProperty(
'atlas://data/images/defaulttheme/textinput_active')
'''Background image of the TextInput when it's in focus'.
.. versionadded:: 1.4.1
:data:`background_active` is a :class:`~kivy.properties.StringProperty`,
default to 'atlas://data/images/defaulttheme/textinput_active'
'''
background_color = ListProperty([1, 1, 1, 1])
'''Current color of the background, in (r, g, b, a) format.

View File

@ -532,6 +532,30 @@ class Widget(EventDispatcher):
dict.
'''
opacity = NumericProperty(1.0)
'''Opacity of the widget and all the children.
.. versionadded:: 1.4.1
The opacity attribute controls the opacity of the widget and its children.
Be careful, it's a cumulative attribute: the value is multiplied to the
current global opacity, and the result is applied to the current context
color.
For example: if your parent have an opacity of 0.5, and one children have an
opacity of 0.2, the real opacity of the children will be 0.5 * 0.2 = 0.1.
Then, the opacity is applied on the shader as::
frag_color = color * vec4(1.0, 1.0, 1.0, opacity);
:data:`opacity` is a :class:`~kivy.properties.NumericProperty`, default to
1.0.
'''
def on_opacity(self, instance, value):
self.canvas.opacity = value
canvas = None
'''Canvas of the widget.