Last active
December 23, 2015 01:29
-
-
Save koo5/6560916 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
kook@kook:~/kurva_pica/pyglet-1.2alpha1/examples$ ./text_input.py | |
Traceback (most recent call last): | |
File "./text_input.py", line 145, in <module> | |
window = Window(resizable=True) | |
File "./text_input.py", line 62, in __init__ | |
TextWidget('', 200, 100, self.width - 210, self.batch), | |
File "./text_input.py", line 28, in __init__ | |
font = self.document.get_font(0) | |
File "/usr/lib/pymodules/python2.7/pyglet/text/document.py", line 660, in get_font | |
return iter[position] | |
File "/usr/lib/pymodules/python2.7/pyglet/text/document.py", line 719, in __getitem__ | |
font_name, font_size, bold, italic = self.zip_iter[index] | |
File "/usr/lib/pymodules/python2.7/pyglet/text/runlist.py", line 403, in __getitem__ | |
return [i[index] for i in self.range_iterators] | |
File "/usr/lib/pymodules/python2.7/pyglet/text/runlist.py", line 293, in __getitem__ | |
self.start, self.end, self.value = self.next() | |
StopIteration | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
'''Demonstrates basic use of IncrementalTextLayout and Caret. | |
A simple widget-like system is created in this example supporting keyboard and | |
mouse focus. | |
''' | |
__docformat__ = 'restructuredtext' | |
__version__ = '$Id: $' | |
import pyglet | |
class Rectangle(object): | |
'''Draws a rectangle into a batch.''' | |
def __init__(self, x1, y1, x2, y2, batch): | |
self.vertex_list = batch.add(4, pyglet.gl.GL_QUADS, None, | |
('v2i', [x1, y1, x2, y1, x2, y2, x1, y2]), | |
('c4B', [200, 200, 220, 255] * 4) | |
) | |
class TextWidget(object): | |
def __init__(self, text, x, y, width, batch): | |
self.document = pyglet.text.document.FormattedDocument(text) | |
self.document.set_style(0, len(self.document.text), | |
dict(color=(0, 0, 0, 255), font_size = 26) | |
) | |
font = self.document.get_font(0) | |
height = font.ascent - font.descent | |
self.layout = pyglet.text.layout.IncrementalTextLayout( | |
self.document, width, height, multiline=False, batch=batch) | |
self.caret = pyglet.text.caret.Caret(self.layout) | |
self.layout.x = x | |
self.layout.y = y | |
# Rectangular outline | |
pad = 2 | |
self.rectangle = Rectangle(x - pad, y - pad, | |
x + width + pad, y + height + pad, batch) | |
def hit_test(self, x, y): | |
return (0 < x - self.layout.x < self.layout.width and | |
0 < y - self.layout.y < self.layout.height) | |
class Window(pyglet.window.Window): | |
def __init__(self, *args, **kwargs): | |
super(Window, self).__init__(400, 140, caption='Text entry') | |
self.batch = pyglet.graphics.Batch() | |
self.labels = [ | |
pyglet.text.Label('Name', x=10, y=100, anchor_y='bottom', | |
color=(0, 0, 0, 255), batch=self.batch), | |
pyglet.text.Label('Species', x=10, y=60, anchor_y='bottom', | |
color=(0, 0, 0, 255), batch=self.batch), | |
pyglet.text.Label('Special abilities', x=10, y=20, | |
anchor_y='bottom', color=(0, 0, 0, 255), | |
batch=self.batch) | |
] | |
self.widgets = [ | |
TextWidget('', 200, 100, self.width - 210, self.batch), | |
TextWidget('', 200, 60, self.width - 210, self.batch), | |
TextWidget('', 200, 20, self.width - 210, self.batch) | |
] | |
self.text_cursor = self.get_system_mouse_cursor('text') | |
self.focus = None | |
self.set_focus(self.widgets[0]) | |
def on_resize(self, width, height): | |
super(Window, self).on_resize(width, height) | |
for widget in self.widgets: | |
widget.width = width - 110 | |
def on_draw(self): | |
pyglet.gl.glClearColor(1, 1, 1, 1) | |
self.clear() | |
self.batch.draw() | |
def on_mouse_motion(self, x, y, dx, dy): | |
for widget in self.widgets: | |
if widget.hit_test(x, y): | |
self.set_mouse_cursor(self.text_cursor) | |
break | |
else: | |
self.set_mouse_cursor(None) | |
def on_mouse_press(self, x, y, button, modifiers): | |
for widget in self.widgets: | |
if widget.hit_test(x, y): | |
self.set_focus(widget) | |
break | |
else: | |
self.set_focus(None) | |
if self.focus: | |
self.focus.caret.on_mouse_press(x, y, button, modifiers) | |
def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): | |
if self.focus: | |
self.focus.caret.on_mouse_drag(x, y, dx, dy, buttons, modifiers) | |
def on_text(self, text): | |
if self.focus: | |
self.focus.caret.on_text(text) | |
def on_text_motion(self, motion): | |
if self.focus: | |
self.focus.caret.on_text_motion(motion) | |
def on_text_motion_select(self, motion): | |
if self.focus: | |
self.focus.caret.on_text_motion_select(motion) | |
def on_key_press(self, symbol, modifiers): | |
if symbol == pyglet.window.key.TAB: | |
if modifiers & pyglet.window.key.MOD_SHIFT: | |
dir = -1 | |
else: | |
dir = 1 | |
if self.focus in self.widgets: | |
i = self.widgets.index(self.focus) | |
else: | |
i = 0 | |
dir = 0 | |
self.set_focus(self.widgets[(i + dir) % len(self.widgets)]) | |
elif symbol == pyglet.window.key.ESCAPE: | |
pyglet.app.exit() | |
def set_focus(self, focus): | |
if self.focus: | |
self.focus.caret.visible = False | |
self.focus.caret.mark = self.focus.caret.position = 0 | |
self.focus = focus | |
if self.focus: | |
self.focus.caret.visible = True | |
self.focus.caret.mark = 0 | |
self.focus.caret.position = len(self.focus.document.text) | |
window = Window(resizable=True) | |
pyglet.app.run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment