|
|
- //This is the central structure that is supposed to make this library be useful.
- //It is essentially a rose-tree structure that is traversed in a depth-first-esque manner.
- //When rendering, the tree is traversed in "left to right" fashion, rendering everything things as it goes.
- //When clicking, the tree is traversed in "right to left" fashion and stops at the first eligible object.
-
- //Possible todo: add usage of nifty means to figure out at runtime when updates are made to structure,
- // which objects don't need to be rendered at all and keep track of that by managing the tree structure more closely.
- //That might require some trickery, depending on how the management of this structure pans out.
-
- #ifndef SDL_CLICKY_CLICKABLE_HIERARCHY_H_
- #define SDL_CLICKY_CLICKABLE_HIERARCHY_H_
-
- #include "clickable.h"
-
- struct Clickable_Hierarchy_Element;
-
- //Simply a list of subtress that may be leaves.
- typedef struct {
- int num_children;
- int num_children_slots;
- struct Clickable_Hierarchy_Element* children;
- } Clickable_Hierarchy;
-
- //This one requires explanation.
- //The clickable should be self-explanatory, this is the clickable that this element represents.
- //The subtree, though, determines if this is a leaf (NULL) or not (!NULL). If !NULL, then the clickable is a container object.
- //How to use this, from a clickable and container perspective?
- // Clickable: Just add it and the subtree will be NULL.
- // Container: If your container only renders itself then it should add all of its subelements to the tree.
- // If it recursively renders all of its own subelements, then it should not add those to the tree because the tree would render them too.
- // That means, if you handle the rendering of subelements, just pretend to only be a clickable.
- // If you have a mix for some reason, register as a container but only add the subelements you don't handle yourself.
- typedef struct Clickable_Hierarchy_Element {
- Clickable* clickable;
- Clickable_Hierarchy* subtree;
- } Clickable_Hierarchy_Element;
-
- void Clicky_Clickable_Hierarchy_Render(Clickable_Hierarchy* ch, SDL_Renderer* r);
- bool Clicky_Clickable_Hierarchy_Click(Clickable_Hierarchy* ch, int x, int y);
-
- int Clicky_Clickable_Hierarchy_Add_Clickable(Clickable_Hierarchy* ch, Clickable* cl);
- Clickable_Hierarchy* Clicky_Clickable_Hierarchy_Add_Subtree(Clickable_Hierarchy* ch, Clickable* cl, int numchildren);
-
- #endif // SDL_CLICKY_CLICKABLE_HIERARCHY_H_
-
|