Skip to main content

Container

A Container is a Drawable that can have child nodes. The z-order of children is determined by the order in which Drawables are added to the container - the Drawable added last will be front-most on the screen.

This class overrides a few functions in Drawable in order to traverse child nodes.

Note that containers act as view ports - that is, only the parts of children that intersect with the geometry of the container will be visible (e.g. setting a container's width to 0 will render all children invisible).

See: Drawable

Inherits from: Drawable

Inherited by: MoveAnimator< touchgfx::Container >, AbstractButtonContainer, AbstractClock, AbstractDataGraph, AbstractProgressIndicator, CacheableContainer, DrawableList, Keyboard, ListLayout, ModalWindow, ScrollableContainer, ScrollBase, SlideMenu, Slider, SwipeContainer, ZoomAnimationImage

Public Functions

virtual voidadd(Drawable & d)
Adds a Drawable instance as child to this Container.
Container()
virtual boolcontains(const Drawable & d)
Query if a given Drawable has been added directly to this Container.
virtual voiddraw(const Rect & invalidatedArea) const
Draw this drawable.
virtual voidforEachChild(GenericCallback< Drawable & > * function)
Executes the specified callback function for each child in the Container.
virtual Drawable *getFirstChild()
Obtain a pointer to the first child of this container.
virtual voidgetLastChild(int16_t x, int16_t y, Drawable ** last)
Gets the last child in the list of children in this Container.
virtual voidgetLastChildNear(int16_t x, int16_t y, Drawable * last, int16_t fingerAdjustmentX, int16_t * fingerAdjustmentY)
Works similar to getLastChild() but also considers the current set finger size in HAL.
virtual RectgetSolidRect() const
Get (the largest possible) rectangle that is guaranteed to be solid (opaque).
virtual voidinsert(Drawable * previous, Drawable & d)
Inserts a Drawable after a specific child node.
virtual voidinvalidateContent() const
Tell the framework that the contents of the Drawable needs to be redrawn.
virtual voidremove(Drawable & d)
Removes a Drawable from the container by removing it from the linked list of children.
virtual voidremoveAll()
Removes all children in the Container by resetting their parent and sibling pointers.
virtual voidunlink()
Removes all children by unlinking the first child.

Protected Functions

virtual RectgetContainedArea() const
Gets a rectangle describing the total area covered by the children of this container.
virtual voidmoveChildrenRelative(int16_t deltaX, int16_t deltaY)
Calls moveRelative on all children.

Protected Attributes

Drawable *firstChild
Pointer to the first child of this container. Subsequent children can be found through firstChild's nextSibling.

Additional inherited members

Public Functions inherited from Drawable

voidcenter()
Centers the Drawable inside its parent.
voidcenterX()
Center the Drawable horizontally inside its parent.
voidcenterY()
Center the Drawable vertically inside its parent.
virtual voidchildGeometryChanged()
This function can be called on parent nodes to signal that the size or position of one or more of its children has changed.
Drawable()
Initializes a new instance of the Drawable class.
voiddrawToDynamicBitmap(BitmapId id)
Render the Drawable object into a dynamic bitmap.
voidexpand(int margin =0)
Expands the Drawable to have the same size as its parent with a given margin around the edge.
RectgetAbsoluteRect() const
Helper function for obtaining the rectangle this Drawable covers, expressed in absolute coordinates.
int16_tgetHeight() const
Gets the height of this Drawable.
Drawable *getNextSibling()
Gets the next sibling node.
Drawable *getParent() const
Returns the parent node.
const Rect &getRect() const
Gets the rectangle this Drawable covers, in coordinates relative to its parent.
virtual RectgetSolidRectAbsolute()
Helper function for obtaining the largest solid rect (as implemented by getSolidRect()) expressed in absolute coordinates.
virtual voidgetVisibleRect(Rect & rect) const
Function for finding the visible part of this drawable.
int16_tgetWidth() const
Gets the width of this Drawable.
int16_tgetX() const
Gets the x coordinate of this Drawable, relative to its parent.
int16_tgetY() const
Gets the y coordinate of this Drawable, relative to its parent.
virtual voidhandleClickEvent(const ClickEvent & event)
Defines the event handler interface for ClickEvents.
virtual voidhandleDragEvent(const DragEvent & event)
Defines the event handler interface for DragEvents.
virtual voidhandleGestureEvent(const GestureEvent & event)
Defines the event handler interface for GestureEvents.
virtual voidhandleTickEvent()
Called periodically by the framework if the Drawable instance has subscribed to timer ticks.
virtual voidinvalidate() const
Tell the framework that this entire Drawable needs to be redrawn.
virtual voidinvalidateRect(Rect & invalidatedArea) const
Request that a region of this drawable is redrawn.
boolisTouchable() const
Gets whether this Drawable receives touch events or not.
boolisVisible() const
Gets whether this Drawable is visible.
virtual voidmoveRelative(int16_t x, int16_t y)
Moves the drawable.
virtual voidmoveTo(int16_t x, int16_t y)
Moves the drawable.
virtual voidsetHeight(int16_t height)
Sets the height of this drawable.
voidsetPosition(const Drawable & drawable)
Sets the position of the Drawable to the same as the given Drawable.
voidsetPosition(int16_t x, int16_t y, int16_t width, int16_t height)
Sets the size and position of this Drawable, relative to its parent.
voidsetTouchable(bool touch)
Controls whether this Drawable receives touch events or not.
voidsetVisible(bool vis)
Controls whether this Drawable should be visible.
virtual voidsetWidth(int16_t width)
Sets the width of this drawable.
voidsetWidthHeight(const Bitmap & bitmap)
Sets the dimensions (width and height) of the Drawable without changing the x and y coordinates).
voidsetWidthHeight(const Drawable & drawable)
Sets the dimensions (width and height) of the Drawable without changing the x and y coordinates).
voidsetWidthHeight(const Rect & other)
Sets the dimensions (width and height) of the Drawable without changing the x and y coordinates).
voidsetWidthHeight(int16_t width, int16_t height)
Sets the dimensions (width and height) of the Drawable without changing the x and y coordinates).
virtual voidsetX(int16_t x)
Sets the x coordinate of this Drawable, relative to its parent.
voidsetXY(const Drawable & drawable)
Sets the x and y coordinates of this Drawable.
voidsetXY(int16_t x, int16_t y)
Sets the x and y coordinates of this Drawable, relative to its parent.
virtual voidsetY(int16_t y)
Sets the y coordinate of this Drawable, relative to its parent.
virtual voidtranslateRectToAbsolute(Rect & r) const
Helper function for converting a region of this Drawable to absolute coordinates.
virtual ~Drawable()
Finalizes an instance of the Drawable class.

Protected Attributes inherited from Drawable

Drawable *nextSibling
Pointer to the next Drawable.
Drawable *parent
Pointer to this drawable's parent.
Rectrect
The coordinates of this Drawable, relative to its parent.
booltouchable
True if this drawable should receive touch events.
boolvisible
True if this drawable should be drawn.

Public Functions Documentation

add

virtual void add(Drawable &d)

Adds a Drawable instance as child to this Container.

The Drawable added will be placed as the element to be drawn last, and thus appear on top of all previously added drawables in the Container.

Parameters:
dThe Drawable to add.
Note

Never add a drawable more than once!

Reimplemented by: touchgfx::ListLayout::add, touchgfx::ModalWindow::add, touchgfx::ScrollableContainer::add, touchgfx::SlideMenu::add, touchgfx::SwipeContainer::add

Container

contains

virtual bool contains(const Drawable &d)

Query if a given Drawable has been added directly to this Container.

The search is not done recursively.

Parameters:
dThe Drawable to look for.
Returns:

True if the specified Drawable instance is direct child of this container, false otherwise.

draw

virtual void draw(const Rect &invalidatedArea)

Draw this drawable.

It is a requirement that the draw implementation does not draw outside the region specified by invalidatedArea.

Parameters:
invalidatedAreaThe sub-region of this drawable that needs to be redrawn, expressed in coordinates relative to its parent (e.g. for a complete redraw, invalidatedArea will be (0, 0, width, height).

Reimplements: touchgfx::Drawable::draw

Reimplemented by: touchgfx::Keyboard::draw

forEachChild

virtual void forEachChild(GenericCallback< Drawable & > *function)

Executes the specified callback function for each child in the Container.

The callback to execute must have the following prototype: void T::func(Drawable&)

Parameters:
functionThe function to be executed for each child.

getFirstChild

virtual Drawable * getFirstChild()

Obtain a pointer to the first child of this container.

The first child is the Drawable drawn first, and therefore the Drawablebehind all other children of this Container. Useful if you want to manually iterate the children added to this container.

Returns:

Pointer to the first drawable added to this container. If nothing has been added return zero.

See also:

Reimplements: touchgfx::Drawable::getFirstChild

getLastChild

virtual void getLastChild(int16_tx ,
int16_ty ,
Drawable **last
)

Gets the last child in the list of children in this Container.

If this Container is touchable (isTouchable()), it will be passed back as the result. Otherwise all visible children are traversed recursively to find the Drawable that intersects with the given coordinate.

Parameters:
xThe x coordinate of the intersection.
yThe y coordinate of the intersection.
lastout parameter in which the result is placed.
See also:

Reimplements: touchgfx::Drawable::getLastChild

Reimplemented by: touchgfx::ScrollableContainer::getLastChild

getLastChildNear

virtual void getLastChildNear(int16_tx ,
int16_ty ,
Drawable **last ,
int16_t *fingerAdjustmentX ,
int16_t *fingerAdjustmentY
)

Works similar to getLastChild() but also considers the current set finger size in HAL.

Parameters:
xThe x coordinate of the intersection.
yThe y coordinate of the intersection.
lastout parameter in which the result is placed.
fingerAdjustmentXout parameter in which the finger adjustment x is placed.
fingerAdjustmentYout parameter in which the finger adjustment y is placed.
See also:

getSolidRect

virtual Rect getSolidRect()const

Get (the largest possible) rectangle that is guaranteed to be solid (opaque).

This information is important, as any Drawable underneath the solid area does not need to be drawn.

Returns:

The solid rectangle part of the Drawable.

Note

The rectangle returned must be relative to upper left corner of the Drawable, meaning that a completely solid widget should return the full size Rect(0, 0, getWidth(), getHeight()). If no area can be guaranteed to be solid, an empty Rect must be returned. Failing to return the correct rectangle may result in errors on the display.

Reimplements: touchgfx::Drawable::getSolidRect

insert

virtual void insert(Drawable *previous ,
Drawable &d
)

Inserts a Drawable after a specific child node.

If previous child node is 0, the drawable will be inserted as the first element in the list. The first element in the list of children is the element drawn first, so this makes it possible to insert a Drawablebehind all previously added children.

Parameters:
previousThe Drawable to insert after. If null, insert as header.
dThe Drawable to insert.
Note

As with add, do not add the same drawable twice.

Reimplemented by: touchgfx::ListLayout::insert

invalidateContent

virtual void invalidateContent()const

Tell the framework that the contents of the Drawable needs to be redrawn.

If the Drawable is invisible, nothing happens. Subclasses of Drawable are encouraged to implement this function and invalidate as little as possible, i.e. the smallest rectangle covering the visual element(s) drawn by the widget.

Reimplements: touchgfx::Drawable::invalidateContent

Reimplemented by: touchgfx::CacheableContainer::invalidateContent, touchgfx::AnalogClock::invalidateContent, touchgfx::DigitalClock::invalidateContent, touchgfx::AbstractProgressIndicator::invalidateContent, touchgfx::ZoomAnimationImage::invalidateContent, touchgfx::Gauge::invalidateContent, touchgfx::AbstractDataGraph::invalidateContent

remove

virtual void remove(Drawable &d)

Removes a Drawable from the container by removing it from the linked list of children.

If the Drawable is not in the list of children, nothing happens. It is possible to remove an element from whichever Container it is a member of using:

if (d.getParent()) d.getParent()->remove(d);

The Drawable will have the parent and next sibling cleared, but is otherwise left unaltered.

Parameters:
dThe Drawable to remove.
Note

This is safe to call even if d is not a child of this Container (in which case nothing happens).

Reimplemented by: touchgfx::ListLayout::remove, touchgfx::ModalWindow::remove, touchgfx::SlideMenu::remove, touchgfx::SwipeContainer::remove

removeAll

virtual void removeAll()

Removes all children in the Container by resetting their parent and sibling pointers.

Please note that this is not done recursively, so any child which is itself a Container is not emptied.

Reimplemented by: touchgfx::ListLayout::removeAll

virtual void unlink()

Removes all children by unlinking the first child.

The parent and sibling pointers of the children are not reset.

See also:

Protected Functions Documentation

getContainedArea

virtual Rect getContainedArea()const

Gets a rectangle describing the total area covered by the children of this container.

Returns:

Rectangle covering all children.

Reimplemented by: touchgfx::ScrollableContainer::getContainedArea

moveChildrenRelative

virtual void moveChildrenRelative(int16_tdeltaX ,
int16_tdeltaY
)

Calls moveRelative on all children.

Parameters:
deltaXHorizontal displacement.
deltaYVertical displacement.

Reimplemented by: touchgfx::ScrollableContainer::moveChildrenRelative

Protected Attributes Documentation

firstChild

Drawable * firstChild

Pointer to the first child of this container. Subsequent children can be found through firstChild's nextSibling.