You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

45 lines
2.4 KiB

//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_