mirror of https://github.com/kivy/kivy.git
152 lines
4.4 KiB
Python
152 lines
4.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
from kivy.app import App
|
|
from kivy.uix.widget import Widget
|
|
from kivy.graphics import Color, Ellipse, Rectangle, RoundedRectangle
|
|
from kivy.lang import Builder
|
|
|
|
TEXTURE = 'kiwi.jpg'
|
|
YELLOW = (1, .7, 0)
|
|
ORANGE = (1, .45, 0)
|
|
RED = (1, 0, 0)
|
|
WHITE = (1, 1, 1)
|
|
|
|
|
|
class RoundedRectangleWidget(Widget):
|
|
def prepare(self):
|
|
with self.canvas:
|
|
Color(*WHITE)
|
|
|
|
# Rectangle of default size 100x100
|
|
Rectangle(pos=(50, 400))
|
|
|
|
# RoundedRectangles of default size 100x100:
|
|
|
|
# Textured:
|
|
RoundedRectangle(
|
|
pos=(175, 400), radius=[0, 50, 0, 50], source=TEXTURE)
|
|
|
|
# Colored:
|
|
Color(*YELLOW)
|
|
RoundedRectangle(pos=(300, 400), radius=[0, 50, 0, 50])
|
|
|
|
# Textured + Colored
|
|
# Color(.3,.3,.3, 1)
|
|
RoundedRectangle(
|
|
pos=(425, 400), radius=[0, 50, 0, 50], source=TEXTURE)
|
|
|
|
# Possible radius arguments:
|
|
# 1) Same value for each corner
|
|
Color(*ORANGE)
|
|
|
|
# With same radius 20x20
|
|
RoundedRectangle(pos=(50, 275), radius=[20])
|
|
|
|
# With same radius dimensions 20x40
|
|
RoundedRectangle(pos=(175, 275), radius=[(20, 40)])
|
|
|
|
# 2) Different values for each corner
|
|
Color(*RED)
|
|
|
|
# With different radiuses NxN:
|
|
RoundedRectangle(pos=(300, 275), radius=[10, 20, 30, 40])
|
|
|
|
# With different radiuses:
|
|
RoundedRectangle(
|
|
pos=(425, 275), radius=[(10, 20), (20, 30), (30, 40), (40, 50)])
|
|
|
|
# Default ellipses
|
|
Color(*WHITE)
|
|
Ellipse(pos=(50, 150))
|
|
Ellipse(pos=(175, 150))
|
|
Ellipse(pos=(300, 150))
|
|
Ellipse(pos=(425, 150))
|
|
|
|
# Radius dimensions can't be bigger than half of the figure side
|
|
RoundedRectangle(pos=(175, 150), radius=[9000], source=TEXTURE)
|
|
|
|
# Segments parameter defines how many segments each corner has.
|
|
# More segments - more roundness
|
|
Color(*RED)
|
|
RoundedRectangle(pos=(300, 150), radius=[9000])
|
|
RoundedRectangle(pos=(425, 150), radius=[9000], segments=15)
|
|
|
|
Color(*ORANGE)
|
|
RoundedRectangle(pos=(425, 150), radius=[9000], segments=2)
|
|
|
|
Color(*YELLOW)
|
|
RoundedRectangle(pos=(425, 150), radius=[9000], segments=1)
|
|
|
|
# Various sizes
|
|
# You can cut corners by setting segments to 1.
|
|
# You can set different segment count to corners,
|
|
# by using a list useful for lowering vertex count
|
|
# by using small amount on small corners, while using
|
|
# bigger amount on bigger corners.
|
|
RoundedRectangle(
|
|
pos=(50, 25),
|
|
radius=[40],
|
|
segments=[1, 1, 10, 10],
|
|
size=(125, 100))
|
|
|
|
# If radius dimension is 0, then the corner will be sharp
|
|
# (90 degrees). It is also possible to mix tuple values
|
|
# with numeric
|
|
Color(*ORANGE)
|
|
RoundedRectangle(
|
|
pos=(200, 25),
|
|
radius=[(40, 20),
|
|
45.5, 45.5, 0],
|
|
segments=[2, 3, 3, 1], size=(125, 100))
|
|
|
|
Color(*RED)
|
|
RoundedRectangle(
|
|
pos=(350, 25),
|
|
radius=[(40, 40), (40, 40), (20, 20), (20, 20)],
|
|
segments=[2, 3, 3, 2],
|
|
size=(150, 100))
|
|
|
|
|
|
class DrawRoundedRectanglesApp(App):
|
|
def build(self):
|
|
kv = '''
|
|
Widget:
|
|
canvas:
|
|
Color:
|
|
rgba: 1, 1,1, 1
|
|
|
|
RoundedRectangle:
|
|
pos: 575, 400
|
|
size: 100, 100
|
|
radius: [0, 50, 0, 50]
|
|
source: 'kiwi.jpg'
|
|
|
|
Color:
|
|
rgba: 0, 0.8, 0.8, 1
|
|
|
|
RoundedRectangle:
|
|
pos: 575, 275
|
|
size: 100, 100
|
|
radius: [(10, 20), (20, 30), (30, 40), (40, 50)]
|
|
|
|
RoundedRectangle:
|
|
pos: 575, 150
|
|
size: 100, 100
|
|
radius: [9000]
|
|
segments: 15
|
|
|
|
RoundedRectangle:
|
|
pos: 550, 25
|
|
size: 150, 100
|
|
segments: [1, 2, 1, 3]
|
|
radius: [30, 40, 30, 40]
|
|
|
|
'''
|
|
widget = RoundedRectangleWidget()
|
|
widget.prepare()
|
|
kvrect = Builder.load_string(kv)
|
|
widget.add_widget(kvrect)
|
|
return widget
|
|
|
|
if __name__ == '__main__':
|
|
DrawRoundedRectanglesApp().run()
|