hbc/channel/channelapp/source/widgets.h
2016-11-23 14:35:12 +09:00

123 lines
2.6 KiB
C

#ifndef _WIDGETS_H_
#define _WIDGETS_H_
#include <gctypes.h>
#include "gfx.h"
#include "cursors.h"
#include "appentry.h"
#include "font.h"
#define WF_VISIBLE 1
#define WF_ENABLED 2
#define WF_FOCUSABLE 4
#define WF_RUMBLE 8
#define WF_CURSOR 32
#define WF_FOCUSED 64
#define WF_FLAGS_MASK 0xff
#define WF_FLAGS_OR 0
#define WF_FLAGS_AND 256
typedef enum {
WT_LABEL,
WT_IMAGE,
WT_BUTTON,
WT_APP_ENTRY,
WT_PROGRESS,
WT_GRADIENT,
WT_MEMO
} widget_type;
typedef struct {
u32 flags;
u32 flags_invert;
u16 gfx_entry_count;
gfx_queue_entry *gfx_entries;
} widget_layer;
typedef struct {
widget_type type;
u32 flags;
u16 width, height;
cursor_type cur;
gfx_coordinates coords;
gfx_queue_entry qe_coords_push, qe_coords_pop;
int layer_count;
widget_layer *layers;
union {
struct {
gfx_entity *mask;
} image;
struct {
u32 max;
gfx_entity *gradient;
} progress;
struct {
gfx_entity *gradient;
} gradient;
struct {
s16 y_min, y_max;
} memo;
};
} widget;
typedef enum {
BTN_NORMAL = 0,
BTN_SMALL,
BTN_TINY
} button_size;
void widgets_init (void);
void widgets_theme_reinit (void);
void widgets_deinit (void);
void widget_free (widget *w);
void widget_set_flag (widget *w, u32 flag, bool set);
void widget_toggle_flag (widget *w, u32 flag);
void widget_set_progress (widget *w, u32 progress);
void widget_fade_gradient (widget *w, s8 modifier);
bool widget_scroll_memo (widget *w, s16 modifier);
bool widget_scroll_memo_deco (widget *w, s16 modifier);
void widget_label (widget *w, s16 x, s16 y, s16 z, const char *caption,
u16 width, font_xalign xalign, font_yalign yalign,
font_id font);
void widget_image(widget *w, s16 x, s16 y, s16 z,
gfx_entity *image, gfx_entity *image_disabled,
bool rumble, gfx_entity *image_cursor);
void widget_button (widget *w, s16 x, s16 y, s16 z,
button_size size, const char *caption);
void widget_button_set_caption(widget *w, font_id font, const char *caption);
void widget_app_entry (widget *w, s16 x, s16 y, s16 z,
const app_entry *entry);
void widget_grid_app_entry (widget *w, s16 x, s16 y, s16 z,
const app_entry *entry);
void widget_progress (widget *w, s16 x, s16 y, s16 z,
const char *caption, u32 max);
void widget_gradient (widget *w, s16 x, s16 y, s16 z,
u16 width, u16 height,
u32 c1, u32 c2, u32 c3, u32 c4);
void widget_memo (widget *w, s16 x, s16 y, s16 z,
u16 width, u16 height,
const char *text, font_xalign align);
void widget_memo_deco (widget *w, s16 x, s16 y, s16 z,
u16 width, u16 height,
const char *text, font_xalign align);
#endif