test-kivy-app/kivy_venv/share/kivy-examples/text/pango_demo.py

297 lines
10 KiB
Python
Raw Normal View History

2024-09-15 12:12:16 +00:00
# -*- coding: utf-8 -*-
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.factory import Factory as F
class DemoBox(F.ButtonBehavior, F.BoxLayout):
base_direction = F.StringProperty(None, allownone=True)
font_context = F.StringProperty(None, allownone=True)
font_size = F.NumericProperty(10)
runTouchApp(Builder.load_string('''
#:import F kivy.factory.Factory
<MenuLabel@Label>:
bold: True
size_hint_x: None
width: '150dp'
text_size: self.size
halign: 'right'
valign: 'middle'
<MyToggleButton@ToggleButton>:
hacked_state: False
allow_no_selection: False
on_state: self.hacked_state = self.state == 'down'
<HalignButton@MyToggleButton>:
text: 'auto'
group: 'halign'
on_hacked_state: for c in root.parent.__boxes.children: \
c.halign = root.text
<FontButton@MyToggleButton>:
text: '20'
group: 'font'
on_hacked_state: for c in root.parent.__boxes.children: \
c.font_size = int(root.text)
<ContextButton@MyToggleButton>:
text: 'system://'
group: 'context'
on_hacked_state: for c in root.parent.__boxes.children: \
c.font_context = root.text
<BaseDirButton@MyToggleButton>:
text: 'None'
group: 'basedir'
on_hacked_state: for c in root.parent.__boxes.children: \
c.base_direction = root.text
<EditPopup@Popup>:
size_hint: .8, .8
text: ''
BoxLayout:
orientation: 'vertical'
TextInput:
multiline: True
id: ti
text: root.text
cursor_width: 3
Button:
size_hint_y: None
text: 'Close'
on_press: root.dismiss()
<DemoBox>:
text: ti.text
language: ''
halign: 'auto'
font_size: '20sp'
font_context: 'system://'
base_direction: None
markup: True
orientation: 'horizontal'
padding: '5dp'
spacing: '5dp'
size_hint_y: None
height: lbl.texture_size[1] + 25
on_text:
if self.text: ti.text = self.text
Button:
text: 'Open'
size_hint_x: None
on_press:
pop = F.EditPopup()
pop.text = lbl.text
pop.ids.ti.halign = root.halign
pop.ids.ti.font_size = root.font_size
pop.ids.ti.font_context = root.font_context != 'None' \
and root.font_context or None
pop.ids.ti.base_direction = root.base_direction != 'None' \
and root.base_direction or None
pop.title = 'Edit: {}'.format(root.language)
pop.open()
Label:
text: root.language
text_size: self.size
halign: 'left'
bold: True
size_hint_x: None
width: 150
halign: 'left'
valign: 'middle'
font_size: '15sp'
color: 1, 1, 0, 1
canvas.before:
Color:
rgba: 1, 1, 1, .5
Rectangle:
pos: self.pos
size: self.size
Label:
id: lbl
halign: root.halign
text: root.text
markup: root.markup
font_context: root.font_context != 'None' and \
root.font_context or None
base_direction: root.base_direction != 'None' and \
root.base_direction or None
font_size: root.font_size
text_size: self.width, None
canvas.before:
Color:
rgba: 1, 1, 1, .1
Rectangle:
pos: self.pos
size: self.size
TextInput:
id: ti
halign: root.halign
cursor_width: 3
font_context: root.font_context != 'None' and root.font_context or None
base_direction: root.base_direction != 'None' and \
root.base_direction or None
font_size: root.font_size
BoxLayout:
orientation: 'vertical'
ScrollView:
id: sv
bar_color: [.1, .75, .1, .95]
bar_inactive_color: [.5, .5, .5, .8]
bar_width: '20dp'
BoxLayout:
id: boxes
orientation: 'vertical'
size_hint: None, None
height: self.minimum_height
width: sv.width - 25 # don't draw below scrollbar
DemoBox:
markup: True
language: 'Arabic'
text: 'اَلْحَمْدُ لِلّٰهِ رَبِّ \
[color=ff0000]الْعَالَمِينَ\
\\nاَلرَّحْ[/color]مٰنِ الرَّحِيمِ'
DemoBox:
language: 'Arabic + English'
text: 'اِيَّاكَ نَعْبُدُ Kivyوَ اِيَّاكَ نَسْتَعِينُ\\nKivy'
DemoBox:
language: 'English + Arabic'
text: 'Kivy\\nاِيَّاكَ نَعْبُدُ وَKivy اِيَّاكَ نَسْتَعِينُ'
DemoBox:
language: 'Hebrew'
text: 'בְּרֵאשִׁ֖ית בָּרָ֣א \
\\ֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ׃'
DemoBox:
language: 'Hebrew + English'
text: 'בְּרֵאKivyשִׁ֖ית בָּרָ֣א \\nKivy'
DemoBox:
language: 'English + Hebrew'
text: 'Kivy\\nבְּרֵאשִׁ֖יKivyת בָּרָ֣א '
DemoBox:
language: 'Chinese'
text: '你好,这是中文竖排测试。\\n欢迎来到中国北京。'
DemoBox:
language: 'Chinese + English'
text: '你好这是Kivy中文竖排测试。\\nKivy'
DemoBox:
language: 'English + Chinese'
text: 'Kivy\\n你好这是中Kivy文竖排测试。'
DemoBox:
language: 'Syriac'
text: 'ܐܬܐܡܘܢ ܥܠܝܡܢ \\nܘܥܠܝܡܬܢ'
DemoBox:
language: 'Syriac + English'
text: 'ܐܬܐܡܘܢ Kivyܥܠܝܡܢ ܘܥܠܝܡܬܢ\\nKivy'
DemoBox:
language: 'English + Syriac'
text: 'Kivyܐܬܐܡܘܢ ܥܠKivyܝܡܢ ܘܥܠܝܡܬܢ\\nKivy'
DemoBox:
language: 'Tibetan'
text: ' འབྲུག་རྒྱལ་ཁབ\\n་འདི་དགའ་ཏོག་ཏོ་ཡོད།'
DemoBox:
language: 'Tibetan + English'
text: ' འ Kivyབྲུག་རྒྱལ་ཁབ\\n་འདི་དགKivyའ་ཏོག་ཏོ་ཡོད།'
DemoBox:
language: 'English + Tibetan'
text: 'Regular letters\\n\
འབཁབའདདགའKivyཏ'
DemoBox:
language: 'Braille (EN)'
text: '⠊⠀⠉⠁⠝⠀⠑⠁⠞⠀⠛⠇⠁⠎⠎⠀\\n⠁⠝⠙⠊⠞⠙⠕⠑⠎⠝⠞⠓⠥⠗⠞⠍⠑'
DemoBox:
language: 'Braille (EN) + English'
text: '⠉⠁⠝⠑⠁⠞Kivy\\n⠛⠇⠁⠎⠎⠁⠝Kivy⠙⠊⠞⠙⠕⠑⠎⠝⠞⠓⠥⠗⠞⠍⠑'
DemoBox:
markup: True
language: 'Braille (EN) + English'
text: '⠉⠁⠝⠑⠁⠞Kivy\\n⠛⠇⠁⠎⠎⠁⠝Kivy\
[color=ff0000][/color]'
# --------------------------------------- HALIGN
BoxLayout:
__boxes: boxes
orientation: 'horizontal'
size_hint_y: None
height: '30dp'
MenuLabel:
text: 'set halign ='
HalignButton:
text: 'auto'
state: 'down'
HalignButton:
text: 'left'
HalignButton:
text: 'center'
HalignButton:
text: 'right'
# Not supported by textinput
# HalignButton:
# text: 'justify'
# --------------------------------BASE DIRECTION
BoxLayout:
__boxes: boxes
orientation: 'horizontal'
size_hint_y: None
height: '30dp'
MenuLabel:
text: 'set base_direction ='
BaseDirButton:
text: 'None'
state: 'down'
BaseDirButton:
text: 'ltr'
BaseDirButton:
text: 'rtl'
# --------------------------------- FONT CONTEXT
BoxLayout:
__boxes: boxes
orientation: 'horizontal'
size_hint_y: None
height: '30dp'
MenuLabel:
text: 'set font_context ='
ContextButton:
text: 'None'
ContextButton:
text: 'system://'
state: 'down'
ContextButton:
text: 'system://user'
ContextButton:
text: 'user'
# ------------------------------------ FONT SIZE
BoxLayout:
__boxes: boxes
orientation: 'horizontal'
size_hint_y: None
height: '30dp'
MenuLabel:
text: 'set font_size ='
FontButton:
text: '10'
FontButton:
text: '20'
state: 'down'
FontButton:
text: '30'
FontButton:
text: '40'
FontButton:
text: '50'
FontButton:
text: '75'
FontButton:
text: '100'
# BoxLayout:
# orientation: 'horizontal'
# size_hint_y: None
# height: '30dp'
# Button:
# color: 0, 1, 0, 1
# text: 'Add font: user'
# Button:
# color: 0, 1, 0, 1
# text: 'Add font: system://user'
# ToggleButton:
# text: 'Enable markup'
# state: 'down'
# on_state:
# for c in boxes.children: c.markup = self.state == 'down'
'''))