peng3d.gui.layered - Layered Widgets

class peng3d.gui.layered.LayeredWidget(name, submenu, window, peng, pos=None, size=None, bg=None, layers=[])[source]

Layered Widget allowing for easy creation of custom widgets.

A Layered Widget consists of (nearly) any amount of layers in a specific order.

All Layers should be subclasses of BasicWidgetLayer or WidgetLayer.

layers must be a list of 2-tuples of (layer,z_index).

addLayer(layer, z_index=None)[source]

Adds the given layer at the given Z Index.

If z_index is not given, the Z Index specified by the layer will be used.

delete()[source]

Deletes all layers within this LayeredWidget before deleting itself.

Recommended to call if you are removing the widget, but not yet exiting the interpreter.

draw()[source]

Draws all layers of this LayeredWidget.

This should normally be unneccessary, since it is recommended that layers use Vertex Lists instead of OpenGL Immediate Mode.

getLayer(name)[source]

Returns the layer corresponding to the given name.

Raises:KeyError – If there is no Layer with the given name.
on_redraw()[source]

Draws the background and the widget itself.

Subclasses should use super() to call this method, or rendering may glitch out.

redraw_layer(name)[source]

Redraws the given layer.

Raises:ValueError – If there is no Layer with the given name.
class peng3d.gui.layered.BasicWidgetLayer(name, widget, z_index=None)[source]

Base class for all Layers to be used with LayeredWidget().

Not to be confused with peng3d.layer.Layer(), these classes are not compatible.

It is recommended to use WidgetLayer() instead, since functionality is limited in this basic class.

Note that the z_index will default to a reasonable value for most subclasses and thus is not required to be given explicitly. The z_index for this Layer defaults to 0.

delete()[source]

Deletes this Layer.

Currently only deletes VertexLists registered with regVList().

draw()[source]

Called to draw the layer.

Note that using this function is discouraged, use Pyglet Vertex Lists instead.

If you want to call this method manually, call _draw() instead. This will make sure that predraw() and postdraw() are called.

on_redraw()[source]

Called by the parent widget if this Layer should be redrawn.

Note that it is recommended to call the Baseclass Variant of this Method first when overwriting it. See WidgetLayer.on_redraw() for more information.

postdraw()[source]

Called after calling the draw() Method.

Useful for unsetting OpenGL state.

predraw()[source]

Called before calling the draw() Method.

Useful for setting up OpenGL state.

regVList(vlist)[source]

Registers a vertex list for proper deletion once this Layer gets destroyed.

This prevents visual artifacts from forming during deletion of a layer.

class peng3d.gui.layered.WidgetLayer(name, widget, z_index=None, border=[0, 0], offset=[0, 0])[source]

Subclass of WidgetLayer() adding commonly used utility features.

This subclass adds a border and offset system.

The border is a 2-tuple of (x_border,y_border). The border is applied to all sides, resulting in the size being decreased by two pixel per pixel border width.

offset is relative to the bottom left corner of the screen.

border

Property to be used for setting and getting the border of the layer.

Note that setting this property causes an immediate redraw.

getPos()[source]

Returns the absolute position and size of the layer.

This method is intended for use in vertex position calculation, as the border and offset have already been applied.

The returned value is a 4-tuple of (sx,sy,ex,ey). The two values starting with an s are the “start” position, or the lower-left corner. The second pair of values signify the “end” position, or upper-right corner.

getSize()[source]

Returns the size of the layer, with the border size already subtracted.

initialize()[source]

Called just before on_redraw() is called the first time.

offset

Property to be used for setting and getting the offset of the layer.

Note that setting this property causes an immediate redraw.

on_redraw()[source]

Called when the Layer should be redrawn.

If a subclass uses the initialize() Method, it is very important to also call the Super Class Method to prevent crashes.

class peng3d.gui.layered.GroupWidgetLayer(name, widget, group=None, z_index=None, border=[0, 0], offset=[0, 0])[source]

Subclass of WidgetLayer() allowing for using a pyglet group to manage OpenGL state.

If no pyglet group is given, pyglet.graphics.NullGroup() will be used.

postdraw()[source]

Called after calling the draw() Method.

Useful for unsetting OpenGL state.

predraw()[source]

Called before calling the draw() Method.

Useful for setting up OpenGL state.

class peng3d.gui.layered.ImageWidgetLayer(name, widget, z_index=None, border=[0, 0], offset=[0, 0], img=[None, None])[source]

Subclass of WidgetLayer() implementing a simple static image view.

This layer can display any resource representable by the ResourceManager().

img is a 2-tuple of (resource_name,category).

The z_index for this Layer defaults to 1.

initialize()[source]

Called just before on_redraw() is called the first time.

on_redraw()[source]

Called when the Layer should be redrawn.

If a subclass uses the initialize() Method, it is very important to also call the Super Class Method to prevent crashes.

class peng3d.gui.layered.DynImageWidgetLayer(name, widget, z_index=None, border=[0, 0], offset=[0, 0], imgs={}, default=None)[source]

Subclass of WidgetLayer allowing for dynamic images.

imgs is a dictionary of names to 2-tuples of (resource_name,category).

If no default image name is given, a semi-random one will be selected.

The z_index for this Layer defaults to 1.

addImage(name, rsrc)[source]

Adds an image to the internal registry.

rsrc should be a 2-tuple of (resource_name,category).

initialize()[source]

Called just before on_redraw() is called the first time.

on_redraw()[source]

Called when the Layer should be redrawn.

If a subclass uses the initialize() Method, it is very important to also call the Super Class Method to prevent crashes.

switchImage(name)[source]

Switches the active image to the given name.

Raises:ValueError – If there is no such image
class peng3d.gui.layered.FramedImageWidgetLayer(name, widget, z_index=None, border=[0, 0], offset=[0, 0], imgs={}, default=None, frame=[[2, 10, 2], [2, 10, 2]], scale=(0, 0), repeat_edge=False, repeat_center=False, tex_size=None)[source]

Subclass of DynImageWidgetLayer allowing for dynamically smart scaled images.

Similar to FramedImageButton. Allows for scaling and/or repeating the borders, corners and center independently.

Note that the tex_size parameter, if not given, will be derived from a random texture that has been given in imgs. Also note that the frame, scale, repeat_edge and repeat_center parameters are identical for all images.

initialize()[source]

Called just before on_redraw() is called the first time.

on_redraw()[source]

Called when the Layer should be redrawn.

If a subclass uses the initialize() Method, it is very important to also call the Super Class Method to prevent crashes.

class peng3d.gui.layered.ImageButtonWidgetLayer(name, widget, z_index=None, border=[0, 0], offset=[0, 0], img_idle=None, img_pressed=None, img_hover=None, img_disabled=None)[source]

Subclass of DynImageWidgetLayer() that acts like an ImageButton().

The img_* arguments are of the same format as in DynImageWidgetLayer().

This class internally uses the BasicWidget.getState() method for getting the state of the widget.

class peng3d.gui.layered.LabelWidgetLayer(name, widget, z_index=None, border=[0, 0], offset=[0, 0], label='', font_size=None, font=None, font_color=None, multiline=False)[source]

Subclass of WidgetLayer() displaying arbitrary plain text.

Note that this method internally uses a pyglet Label that is centered on the Layer.

The z_index for this Layer defaults to 2.

label

Property for accessing the text of the label.

on_redraw(dt=None)[source]

Called when the Layer should be redrawn.

If a subclass uses the initialize() Method, it is very important to also call the Super Class Method to prevent crashes.

redraw_label()[source]

Re-draws the text by calculating its position.

Currently, the text will always be centered on the position of the layer.

class peng3d.gui.layered.FormattedLabelWidgetLayer(name, widget, z_index=None, border=[0, 0], offset=[0, 0], label='', font_size=None, font='Arial', font_color=None, multiline=False)[source]

Subclass of WidgetLayer() serving as a base class for other formatted label layers.

The Label Type can be set via the class attribute cls, it should be set to any class that is compatible with pyglet.text.Label.

It is recommended to use one of the subclasses of this class instead of this class directly.

The z_index for this Layer defaults to 2.

label

Property for accessing the text of the label.

Note that depending on the type of format, this property may not exactly represent the original text as it is converted internally.

on_redraw(dt=None)[source]

Called when the Layer should be redrawn.

If a subclass uses the initialize() Method, it is very important to also call the Super Class Method to prevent crashes.

redraw_label()[source]

Re-draws the text by calculating its position.

Currently, the text will always be centered on the position of the layer.

class peng3d.gui.layered.HTMLLabelWidgetLayer(name, widget, z_index=None, border=[0, 0], offset=[0, 0], label='', font_size=None, font='Arial', font_color=None, multiline=False)[source]

Subclass of FormattedLabelWidgetLayer implementing a basic HTML Label.

Note that not all tags are supported, see the docs for pyglet.text.HTMLLabel for details.

class peng3d.gui.layered.BaseBorderWidgetLayer(name, widget, z_index=None, base_border=[0, 0], base_offset=[0, 0], border=[4, 4, 4, 4, 4, 4, 4, 4], style='flat', batch=None, change_on_press=None)[source]

Subclass of WidgetLayer that displays a basic border around the layer.

Note that not all styles will look good with this class, see ButtonBorderWidgetLayer() for more information.

Note that the border and offset arguments have been renamed to base_border and base_offset to prevent naming conflicts.

Subclasses may set the n_vertices value to change the number of vertices or change_on_press to change the default value for the argument of the same name. By default, 36 vertices are used and changed_on_press is set to True.

The z_index for this Layer defaults to 0.5.

addStyle(name, func)[source]

Adds a style to the layer.

Note that styles must be registered seperately for each layer.

name is the (string) name of the style.

func will be called with its arguments as (bg,o,i,s,h), see getColors() for more information.

genVertices()[source]

Called to generate the vertices used by this layer.

The length of the output of this method should be three times the n_vertices attribute.

See the source code of this method for more information about the order of the vertices.

getColors()[source]

Overrideable function that generates the colors to be used by various styles.

Should return a 5-tuple of (bg,o,i,s,h).

bg is the base color of the background.

o is the outer color, it is usually the same as the background color.

i is the inner color, it is usually lighter than the background color.

s is the shadow color, it is usually quite a bit darker than the background.

h is the highlight color, it is usually quite a bit lighter than the background.

The returned values may also be statically overridden by setting the color_ attribute to anything but None.

initialize()[source]

Called just before on_redraw() is called the first time.

is_hovering

Read-only helper property to be used by styles for determining if the layer should be rendered as hovered or not.

Note that this property may not represent the actual hovering state, it will always be False if change_on_press is disabled.

on_redraw()[source]

Called when the Layer should be redrawn.

If a subclass uses the initialize() Method, it is very important to also call the Super Class Method to prevent crashes.

pressed

Read-only helper property to be used by styles for determining if the layer should be rendered as pressed or not.

Note that this property may not represent the actual pressed state, it will always be False if change_on_press is disabled.

stretchColors(c)[source]

Method that is called to stretch the colors.

Note that this should be implemented by subclasses if plausible and reasonable.

class peng3d.gui.layered.ButtonBorderWidgetLayer(name, widget, z_index=None, base_border=[0, 0], base_offset=[0, 0], border=[4, 4], style='flat', batch=None, change_on_press=None)[source]

Subclass of BaseBorderWidgetLayer() implementing Button-Style borders.

This class is based on the ButtonBackground class. This means that most styles are also available here and should look identical.

Note that this class uses only 20 vertices and is thus not compatible with styles created for use with BaseBorderWidgetLayer.

Also note that the border argument also only receives two values instead of eight.

genVertices()[source]

Called to generate the vertices used by this layer.

The length of the output of this method should be three times the n_vertices attribute.

See the source code of this method for more information about the order of the vertices.

stretchColors(c)[source]

Method that is called to stretch the colors.

Note that this should be implemented by subclasses if plausible and reasonable.