UIPaddingContainer¶
Container that wraps a single UI element and applies padding.
Description¶
UIPaddingContainer adds padding/margin around a single child element without organizing multiple elements. Useful for adding spacing to individual elements or nesting layouts with custom padding.
This container is simpler than UIPanel (no background/border) and focuses only on spacing.
Namespace¶
Inheritance¶
- Inherits from:
UIElement - Inherited by: Your custom padding containers (if needed)
Constructors¶
UIPaddingContainer(float x, float y, float w, float h)¶
Constructs a new UIPaddingContainer.
Parameters: - x (float): X position of the container - y (float): Y position of the container - w (float): Width of the container - h (float): Height of the container
Example:
#include "graphics/ui/UIPaddingContainer.h"
// Create padding container
pixelroot32::graphics::ui::UIPaddingContainer* padded =
new pixelroot32::graphics::ui::UIPaddingContainer(
10.0f, 10.0f,
108.0f, 108.0f
);
padded->setPadding(8.0f); // 8px padding on all sides
Public Methods¶
void setChild(UIElement* element)¶
Sets the child element.
Parameters: - element (UIElement*): Pointer to the UI element to wrap
Returns: - void
Notes: - Child element is positioned with padding applied - Can wrap any UI element (button, label, layout, etc.)
Example:
UIElement* getChild() const¶
Gets the child element.
Returns: - UIElement*: Pointer to the child element, or nullptr if none set
void setPadding(float p)¶
Sets uniform padding on all sides.
Parameters: - p (float): Padding value in pixels
Returns: - void
Notes: - Applies same padding to all sides - Child position is automatically updated
Example:
void setPadding(float left, float right, float top, float bottom)¶
Sets asymmetric padding.
Parameters: - left (float): Left padding in pixels - right (float): Right padding in pixels - top (float): Top padding in pixels - bottom (float): Bottom padding in pixels
Returns: - void
Example:
float getPaddingLeft() const¶
Gets the left padding.
Returns: - float: Left padding in pixels
float getPaddingRight() const¶
Gets the right padding.
Returns: - float: Right padding in pixels
float getPaddingTop() const¶
Gets the top padding.
Returns: - float: Top padding in pixels
float getPaddingBottom() const¶
Gets the bottom padding.
Returns: - float: Bottom padding in pixels
void setPosition(float newX, float newY)¶
Sets the position of the container. Also updates the child element's position.
Parameters: - newX (float): New X coordinate - newY (float): New Y coordinate
Returns: - void
Notes: - Child element position is updated automatically with padding applied
void update(unsigned long deltaTime) override¶
Updates the container and child element.
Parameters: - deltaTime (unsigned long): Time elapsed in milliseconds
Returns: - void
Notes: - Updates child element if set - Called automatically by Scene
void draw(Renderer& renderer) override¶
Draws the child element.
Parameters: - renderer (pixelroot32::graphics::Renderer&): Reference to the renderer
Returns: - void
Notes: - Only draws child element (no background/border) - Child is drawn at padded position
Usage Example¶
#include "graphics/ui/UIPaddingContainer.h"
class MenuScene : public pixelroot32::core::Scene {
public:
void init() override {
// Create button
auto* button = new UIButton("Start", 0, 0, 0, 100.0f, 30.0f,
[this]() { startGame(); });
// Wrap button with padding
auto* paddedButton = new pixelroot32::graphics::ui::UIPaddingContainer(
64.0f, 50.0f, // position
120.0f, 50.0f // size (button + padding)
);
paddedButton->setPadding(10.0f); // 10px padding
paddedButton->setChild(button);
addEntity(paddedButton);
}
};
Nesting with Layouts¶
// Create layout
auto* layout = new UIVerticalLayout(10, 10, 108, 108);
// Wrap layout with padding
auto* paddedLayout = new UIPaddingContainer(0, 0, 128, 128);
paddedLayout->setPadding(10.0f, 10.0f, 20.0f, 20.0f); // Asymmetric
paddedLayout->setChild(layout);
Performance Considerations¶
- Rendering: Very efficient (just draws child)
- Position calculation: Fast (simple addition)
- Memory: Minimal overhead
ESP32 Considerations¶
- Memory: Very lightweight
- Update frequency: Position only recalculates when padding/position changes
See Also¶
- UIElement - Base UI element class
- UIPanel - Panel with background and border
- Manual - User Interface
- API Overview