Browse Source

added stage to debug misdirected calls

pull/1/head
Leonard Ritter 10 years ago
parent
commit
cef9f45e2f
1 changed files with 35 additions and 11 deletions
  1. +35
    -11
      oui.h

+ 35
- 11
oui.h View File

@@ -763,8 +763,9 @@ OUI_EXPORT int uiGetLastItemCount();
#define UI_ANY_INPUT (UI_ANY_MOUSE_INPUT \
|UI_ANY_KEY_INPUT)

// extra item flags
enum {
// extra item flags

// bit 0-2
UI_ITEM_BOX_MODEL_MASK = 0x000007,
// bit 0-4
@@ -812,6 +813,12 @@ typedef enum UIstate {
UI_STATE_CAPTURE,
} UIstate;

typedef enum UIstage {
UI_STAGE_DECLARE = 0,
UI_STAGE_DRAW,
UI_STAGE_PROCESS,
} UIstage;

typedef struct UIhandleEntry {
unsigned int key;
int item;
@@ -851,6 +858,7 @@ struct UIcontext {
int hot_item;

UIstate state;
UIstage stage;
unsigned int active_key;
unsigned int active_modifier;
int last_timestamp;
@@ -887,6 +895,7 @@ UIcontext *uiCreateContext(
memset(ctx, 0, sizeof(UIcontext));
ctx->item_capacity = item_capacity;
ctx->buffer_capacity = buffer_capacity;
ctx->stage = UI_STAGE_PROCESS;
ctx->items = (UIitem *)malloc(sizeof(UIitem) * item_capacity);
ctx->last_items = (UIitem *)malloc(sizeof(UIitem) * item_capacity);
ctx->item_map = (int *)malloc(sizeof(int) * item_capacity);
@@ -897,6 +906,7 @@ UIcontext *uiCreateContext(
UIcontext *oldctx = ui_context;
uiMakeCurrent(ctx);
uiClear();
ctx->stage = UI_STAGE_PROCESS;
uiClearState();
uiMakeCurrent(oldctx);
return ctx;
@@ -1061,6 +1071,7 @@ int uiGetHotItem() {

void uiFocus(int item) {
assert(ui_context && (item >= -1) && (item < ui_context->count));
assert(ui_context->stage == UI_STAGE_PROCESS);
ui_context->focus_item = item;
}

@@ -1079,6 +1090,7 @@ int uiGetFocusedItem() {

void uiClear() {
assert(ui_context);
assert(ui_context->stage == UI_STAGE_PROCESS); // must run uiLayout(), uiProcess() first
ui_context->last_count = ui_context->count;
ui_context->count = 0;
ui_context->datasize = 0;
@@ -1090,6 +1102,7 @@ void uiClear() {
for (int i = 0; i < ui_context->last_count; ++i) {
ui_context->item_map[i] = -1;
}
ui_context->stage = UI_STAGE_DECLARE;
}

void uiClearState() {
@@ -1102,6 +1115,7 @@ void uiClearState() {

int uiItem() {
assert(ui_context);
assert(ui_context->stage == UI_STAGE_DECLARE); // must run between uiClear() and uiLayout()
assert(ui_context->count < (int)ui_context->item_capacity);
int idx = ui_context->count++;
UIitem *item = uiItemPtr(idx);
@@ -1584,21 +1598,27 @@ void uiRemapItem(int olditem, int newitem) {

void uiLayout() {
assert(ui_context);
if (!ui_context->count) return;
assert(ui_context->stage == UI_STAGE_DECLARE); // must run uiClear() first

uiComputeSize(0,0);
uiArrange(0,0);
uiComputeSize(0,1);
uiArrange(0,1);
if (ui_context->count) {
uiComputeSize(0,0);
uiArrange(0,0);
uiComputeSize(0,1);
uiArrange(0,1);

if (ui_context->last_count && ui_context->count) {
// map old item id to new item id
uiMapItems(0,0);
if (ui_context->last_count) {
// map old item id to new item id
uiMapItems(0,0);
}
}

uiValidateStateItems();
// drawing routines may require this to be set already
uiUpdateHotItem();
if (ui_context->count) {
// drawing routines may require this to be set already
uiUpdateHotItem();
}

ui_context->stage = UI_STAGE_DRAW;
}

UIrect uiGetRect(int item) {
@@ -1719,6 +1739,10 @@ int uiGetClicks() {

void uiProcess(int timestamp) {
assert(ui_context);

assert(ui_context->stage == UI_STAGE_DRAW); // must run uiClear(), uiLayout() first
ui_context->stage = UI_STAGE_PROCESS;

if (!ui_context->count) {
uiClearInputEvents();
return;


Loading…
Cancel
Save