CUGL 2.1
Cornell University Game Library
|
#include <CUGridLayout.h>
Classes | |
class | Entry |
Public Member Functions | |
GridLayout () | |
~GridLayout () | |
virtual bool | initWithData (const std::shared_ptr< JsonValue > &data) override |
virtual void | dispose () override |
Size | getGridSize () const |
void | setGridSize (const Size size) |
void | setGridSize (Uint32 width, Uint32 height) |
virtual bool | add (const std::string key, const std::shared_ptr< JsonValue > &data) override |
bool | addPosition (const std::string key, unsigned int x, unsigned int y, Anchor anchor) |
virtual bool | remove (const std::string key) override |
virtual void | layout (SceneNode *node) override |
Public Member Functions inherited from cugl::scene2::Layout | |
Layout () | |
~Layout () | |
virtual bool | init () |
Static Public Member Functions | |
static std::shared_ptr< GridLayout > | alloc () |
static std::shared_ptr< GridLayout > | allocWithData (const std::shared_ptr< JsonValue > &data) |
Static Public Member Functions inherited from cugl::scene2::Layout | |
static Anchor | getAnchor (const std::string &x_anchor, const std::string &y_anchor) |
static void | placeNode (SceneNode *node, Anchor anchor, const Rect bounds, const Vec2 offset) |
static void | reanchor (SceneNode *node, Anchor anchor) |
Protected Member Functions | |
bool | validate (Uint32 width, Uint32 height) |
Protected Attributes | |
std::unordered_map< std::string, Entry > | _entries |
Uint32 | _gwidth |
Uint32 | _gheight |
Additional Inherited Members | |
Public Types inherited from cugl::scene2::Layout | |
enum | Anchor : int { Anchor::BOTTOM_LEFT = 0, Anchor::MIDDLE_LEFT = 1, Anchor::TOP_LEFT = 2, Anchor::BOTTOM_CENTER = 3, Anchor::CENTER = 4, Anchor::TOP_CENTER = 5, Anchor::BOTTOM_RIGHT = 6, Anchor::MIDDLE_RIGHT = 7, Anchor::TOP_RIGHT = 8, Anchor::BOTTOM_FILL = 9, Anchor::MIDDLE_FILL = 10, Anchor::TOP_FILL = 11, Anchor::LEFT_FILL = 12, Anchor::CENTER_FILL = 13, Anchor::RIGHT_FILL = 14, Anchor::TOTAL_FILL = 15, Anchor::NONE = 16 } |
This class provides a grid layout manager.
A grid layout subdivides the node into equal sized grid regions. Each grid region may receive its own child (and can receive more than one). A grid region behaves like an AnchoredLayout for the rules of how to place the child. The result is a slightly more flexible layout manager than the grid layout in Java.
Layout information is indexed by key. To look up the layout information of a scene graph node, we use the name of the node. This requires all nodes to have unique names. The Scene2Loader prefixes all child names by the parent name, so this is the case in any well-defined JSON file.
cugl::scene2::GridLayout::GridLayout | ( | ) |
Creates a degenerate layout manager with no data.
NEVER USE A CONSTRUCTOR WITH NEW. If you want to allocate an object on the heap, use one of the static constructors instead.
|
inline |
Deletes this layout manager, disposing of all resources.
|
overridevirtual |
Assigns layout information for a given key.
The JSON object may contain any of the following attribute values:
"x_index": An integer with the horizontal grid index "y_index": An integer with the vertical grid index "x_anchor": One of 'left', 'center', 'right', or 'fill' "y_anchor": One of 'bottom', 'middle', 'top', or 'fill'
The specified grid region it treated like an AnchoredLayout when placing the child for the given key. There is no limit on the number of children that may share a grid region.
To look up the layout information of a scene graph node, we use the name of the node. This requires all nodes to have unique names. The Scene2Loader prefixes all child names by the parent name, so this is the case in any well-defined JSON file. If the key is already in use, this method will fail.
key | The key identifying the layout information |
data | A JSON object with the layout information |
Reimplemented from cugl::scene2::Layout.
bool cugl::scene2::GridLayout::addPosition | ( | const std::string | key, |
unsigned int | x, | ||
unsigned int | y, | ||
Anchor | anchor | ||
) |
Assigns the layout position for a given key.
The specified grid region it treated like an AnchoredLayout when placing the child for the given key. There is no limit on the number of children that may share a grid region.
To look up the layout information of a scene graph node, we use the name of the node. This requires all nodes to have unique names. The Scene2Loader prefixes all child names by the parent name, so this is the case in any well-defined JSON file. If the key is already in use, this method will fail.
key | The key identifying the layout information |
x | The column of the grid region |
y | The row of the grid region |
anchor | The anchor rule for the grid region |
|
inlinestatic |
Returns a newly allocated layout manager.
The layout manager is initially empty. Before using it to perform a layout, layout information must be registered throught the add method interface.
|
inlinestatic |
Returns a newly allocated layout manager with the given JSON specificaton.
In addition to the 'type' attribute (which must be "float"), the JSON specification supports the following attribute values:
"width": An integer with the number of columns in the grid "height": An integer with the number of rows in the grid
All attributes other than 'type' are optional.
data | The JSON object specifying the node |
|
inlineoverridevirtual |
Deletes the layout resources and resets all attributes.
A disposed layout manager can be safely reinitialized.
Reimplemented from cugl::scene2::Layout.
|
inline |
Returns the grid size of this layout
The size must have non-zero width and height. Despite the return type, the width and height must be integers.
|
overridevirtual |
Initializes a new layout manager with the given JSON specificaton.
In addition to the 'type' attribute (which must be "float"), the JSON specification supports the following attribute values:
"width": An integer with the number of columns in the grid "height": An integer with the number of rows in the grid
All attributes other than 'type' are optional.
data | The JSON object specifying the node |
Reimplemented from cugl::scene2::Layout.
|
overridevirtual |
Performs a layout on the given node.
A grid layout subdivides the node into equal sized grid regions. Each grid region may receive its own child (and can receive more than one). A grid region behaves like an AnchoredLayout for the rules of how to place the child. The result is a slightly more flexible layout manager than the grid layout in Java.
To look up the layout information of a scene graph node, this method uses the name of the node. This requires all nodes to have unique names. The Scene2Loader prefixes all child names by the parent name, so this is the case in any well-defined JSON file.
Children not registered with this layout manager are not affected.
node | The scene graph node to rearrange |
Reimplemented from cugl::scene2::Layout.
|
overridevirtual |
Removes the layout information for a given key.
To look up the layout information of a scene graph node, we use the name of the node. This requires all nodes to have unique names. The Scene2Loader prefixes all child names by the parent name, so this is the case in any well-defined JSON file.
If the key is not in use, this method will fail.
key | The key identifying the layout information |
Reimplemented from cugl::scene2::Layout.
|
inline |
Sets the grid size of this layout
The size must have non-zero width and height. Despite the parameter type, the width and height must be integers. The values will be cast to the nearest integer.
size | The grid size of this layout |
void cugl::scene2::GridLayout::setGridSize | ( | Uint32 | width, |
Uint32 | height | ||
) |
Sets the grid size of this layout
The size must have non-zero width and height.
width | The number of columns in the grid |
height | The number of rows in the grid |
|
protected |
Returns true if (width, height) is a valid grid size
If the layout manager is resized, it must be done in such a way that none of the children are out of bounds. This method returns false if this happens. This method is used by setGridSize before changing the actual grid size.
width | The number of columns in the grid |
height | The number of rows in the grid |
|
protected |
The map of keys to layout information
|
protected |
The number of rows of grid regions
|
protected |
The number of columns of grid regions