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.
		
		
		
		
		
			
		
			
				
					
					
						
							99 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							99 lines
						
					
					
						
							2.1 KiB
						
					
					
				/**
 | 
						|
 * Scene event structural enum
 | 
						|
 * 
 | 
						|
 * Created on 2020/01/05.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef LIQUID_SCENE_EVENT_H
 | 
						|
#define LIQUID_SCENE_EVENT_H
 | 
						|
 | 
						|
// forward declaration
 | 
						|
struct Scene;
 | 
						|
 | 
						|
enum SceneEvent_Kind {
 | 
						|
    SceneEventKind_Close,
 | 
						|
    SceneEventKind_OpenChild,
 | 
						|
    SceneEventKind_RequestRepaint,
 | 
						|
    SceneEventKind_None,
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Scene event, returned from some scene methods.
 | 
						|
 *
 | 
						|
 * Use the constructor functions to create this struct.
 | 
						|
 */
 | 
						|
struct SceneEvent {
 | 
						|
    /** Event kind enum */
 | 
						|
    enum SceneEvent_Kind kind;
 | 
						|
    union {
 | 
						|
        /* data for Close event kind */
 | 
						|
        struct {
 | 
						|
            // Status code
 | 
						|
            int32_t status;
 | 
						|
            // Return data on heap
 | 
						|
            void *data;
 | 
						|
        } close;
 | 
						|
        /* Data for Open event kind */
 | 
						|
        struct {
 | 
						|
            // Scene (initialized, with options loaded in through the constructor)
 | 
						|
            struct Scene *scene;
 | 
						|
            // Tag used by parent to identify the open child
 | 
						|
            uint32_t tag;
 | 
						|
        } open;
 | 
						|
    };
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Create empty (null object) scene event.
 | 
						|
 *
 | 
						|
 * @return event
 | 
						|
 */
 | 
						|
static inline struct SceneEvent SceneEvent_None(void)
 | 
						|
{
 | 
						|
    return (struct SceneEvent) {
 | 
						|
        .kind = SceneEventKind_None,
 | 
						|
    };
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Request scene repaint
 | 
						|
 *
 | 
						|
 * @return event
 | 
						|
 */
 | 
						|
static inline struct SceneEvent SceneEvent_Repaint(void)
 | 
						|
{
 | 
						|
    return (struct SceneEvent) {
 | 
						|
        .kind = SceneEventKind_RequestRepaint
 | 
						|
    };
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Request a sub-scene to be opened
 | 
						|
 *
 | 
						|
 * @param child - child scene
 | 
						|
 * @param tag - scene tag
 | 
						|
 * @return event
 | 
						|
 */
 | 
						|
static inline struct SceneEvent SceneEvent_OpenChild(struct Scene *child, uint32_t tag) {
 | 
						|
    return (struct SceneEvent) {
 | 
						|
        .kind = SceneEventKind_OpenChild,
 | 
						|
        .open = { .scene = child, .tag=tag },
 | 
						|
    };
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Close this scene, returning to parent.
 | 
						|
 *
 | 
						|
 * @param status - status number for the parent
 | 
						|
 * @param data - heap-allocated data for parent, can be NULL; e.g. user input as string.
 | 
						|
 * @return event
 | 
						|
 */
 | 
						|
static inline struct SceneEvent SceneEvent_Close(int32_t status, void *data)
 | 
						|
{
 | 
						|
    return (struct SceneEvent) {
 | 
						|
        .kind = SceneEventKind_Close,
 | 
						|
        .close = {.status = status, .data=data},
 | 
						|
    };
 | 
						|
}
 | 
						|
 | 
						|
#endif //LIQUID_SCENE_EVENT_H
 | 
						|
 |