Theme¶
Pyglet-gui Theme API defines a systematic approach for mapping a set of resources (e.g. “image.png”) and attributes (e.g. color, padding) to lists of vertices and vertex attributes.
The API works as follows:
- The user defines a set of attributes and sources of static resources in a JSON file;
- A set of
Parsers
translate that toTemplates
; - A
theme.Theme
, a nested dictionary, holds these templates with a unique identifier by a path (e.g. [‘button’, ‘up’]) - A
theme.Theme
is passed to thepyglet_gui.manager.ViewerManager
,
and Viewers
load concrete graphical elements, GraphicElement
using the path.
This document explains how this API works in detail. It starts by explaining Graphic elements, goes to Templates, Parsers, Theme, and ends in the JSON file.
Graphic elements¶
-
class
elements.
GraphicElement
¶ A graphical element is a subclass of
pyglet_gui.core.Rectangle
and an abstract class that represents something with a set of vertices and a set of rules to assign a set of attributes (e.g. color, texture coordinate) to those vertices.A GraphicalElement is normally instantiated by a
templates.Template
. The initialization needs a batch and a group to assign its vertices to a group in the batch.A graphical element provides three methods for accessing its size:
-
get_content_region
()¶ Returns the tuple (x, y, width, height) with its region.
-
get_content_size
()¶ Returns the tuple (width, height) with the size this element.
-
get_needed_size
()¶ Returns the tuple (width, height) with the size required for this element.
After the element is initialized, its size and position can be updated using
update()
:-
update
(x, y, width, height)¶ Updates the position and size of the graphics, updating its vertex list in the Batch.
When it is no longer needed, it can be destroyed using
unload()
:-
unload
()¶ Removes the vertex list from the Batch.
-
Pyglet-gui provides two concrete implementations of a Graphical element:
-
class
elements.
TextureGraphicElement
¶ A subclass of
GraphicElement
representing a rectangle of vertices with a texture.
-
class
elements.
FrameTextureGraphicElement
¶ A subclass of
GraphicElement
representing 9 rectangles, as represented in the figureThe
elements.GraphicElement.get_content_size()
is overridden to return the size of the inner rectangle.
Templates¶
For generating graphical elements, Pyglet-gui uses the concept of template.
-
class
templates.
Template
¶ An abstract class that provides the method
generate()
to return a new instance of aelements.GraphicalElement
(or subclass of).A template is normally instantiated by a Parser, when the Theme is being loaded.
-
generate
(color, batch, group)¶ Returns a new instance of a
elements.GraphicalElement
. It is an abstract method.
-
Pyglet-gui provides two concrete implementations of templates:
-
class
templates.
TextureTemplate
¶ A
Template
that generates aelements.TextureGraphicElement
.
-
class
templates.
FrameTextureTemplate
¶ A
TextureTemplate
that generates aFrameTextureGraphicElement
.
Parser¶
-
class
parsers.
Parser
¶ A parser is a class responsible for parsing elements during the Theme loading. The Theme has a set of parsers and they read “string-keys” and interpret the values of those keys into a
Template
.-
condition_fulfilled
(key)¶ This abstract method receives a string and returns a boolean value when it is able to interpret that key. If two parsers accept the same key, the first in the list of parsers in the Theme is chosen.
-
-
class
parsers.
TextureParser
¶ A concrete parser that accepts the key “image”, and interprets it into a
TextureTemplate
or aFrameTextureTemplate
.