Browse Source

whoops, tab mode was enabled in editor, fixed

pull/1/head
Leonard Ritter 10 years ago
parent
commit
945bd812a3
1 changed files with 226 additions and 226 deletions
  1. +226
    -226
      oui.h

+ 226
- 226
oui.h View File

@@ -20,7 +20,7 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
*/

#ifndef _OUI_H_
#define _OUI_H_
@@ -63,10 +63,10 @@ void app_main(...) {
// update button state
for (int i = 0; i < 3; ++i)
uiSetButton(i, app_get_button_state(i));
// begin new UI declarations
uiClear();
// - UI setup code goes here -
app_setup_ui();

@@ -75,7 +75,7 @@ void app_main(...) {

// draw UI
app_draw_ui(render_context,0,0,0);
// update states and fire handlers
uiProcess();
}
@@ -93,32 +93,32 @@ typedef struct CheckBoxData {

// called when the item is clicked (see checkbox())
void app_checkbox_handler(int item, UIevent event) {
// retrieve custom data (see checkbox())
const CheckBoxData *data = (const CheckBoxData *)uiGetData(item);
// toggle value
*data->checked = !(*data->checked);
*data->checked = !(*data->checked);
}

// creates a checkbox control for a pointer to a boolean and attaches it to
// a parent item.
int checkbox(int parent, UIhandle handle, const char *label, bool *checked) {
// create new ui item
int item = uiItem();
// set persistent handle for item that is used
// to track activity over time
uiSetHandle(item, handle);
// set size of wiget; horizontal size is dynamic, vertical is fixed
uiSetSize(item, 0, APP_WIDGET_HEIGHT);
// attach checkbox handler, set to fire as soon as the left button is
// pressed; UI_BUTTON0_HOT_UP is also a popular alternative.
uiSetHandler(item, app_checkbox_handler, UI_BUTTON0_DOWN);
// store some custom data with the checkbox that we use for rendering
// and value changes.
CheckBoxData *data = (CheckBoxData *)uiAllocData(item, sizeof(CheckBoxData));
@@ -127,10 +127,10 @@ int checkbox(int parent, UIhandle handle, const char *label, bool *checked) {
data->type = APP_WIDGET_CHECKBOX;
data->label = label;
data->checked = checked;
// append to parent
uiAppend(parent, item);
return item;
}

@@ -140,13 +140,13 @@ void app_draw_ui(AppRenderContext *ctx, int item, int x, int y) {
// retrieve custom data and cast it to an int; we assume the first member
// of every widget data item to be an "int type" field.
const int *type = (const int *)uiGetData(item);
// get the widgets relative rectangle and offset by the parents
// absolute position.
UIrect rect = uiGetRect(item);
rect.x += x;
rect.y += y;
// if a type is set, this is a specialized widget
if (type) {
switch(*type) {
@@ -160,20 +160,20 @@ void app_draw_ui(AppRenderContext *ctx, int item, int x, int y) {
case APP_WIDGET_CHECKBOX: {
// cast to the full data type
const CheckBoxData *data = (CheckBoxData*)type;
// get the widgets current state
int state = uiGetState(item);
// if the value is set, the state is always active
if (*data->checked)
state = UI_ACTIVE;
// draw the checkbox
app_draw_checkbox(ctx, rect, state, data->label);
} break;
}
}
// iterate through all children and draw
int kid = uiFirstChild(item);
while (kid >= 0) {
@@ -184,7 +184,7 @@ void app_draw_ui(AppRenderContext *ctx, int item, int x, int y) {

See example.cpp in the repository for a full usage example.

*/
*/

// you can override this from the outside to pick
// the export level you need
@@ -195,19 +195,19 @@ See example.cpp in the repository for a full usage example.
// limits

enum {
// maximum number of items that may be added (must be power of 2)
UI_MAX_ITEMS = 4096,
// maximum size in bytes reserved for storage of application dependent data
// as passed to uiAllocData().
UI_MAX_BUFFERSIZE = 1048576,
// maximum size in bytes of a single data buffer passed to uiAllocData().
UI_MAX_DATASIZE = 4096,
// maximum depth of nested containers
UI_MAX_DEPTH = 64,
// maximum number of buffered input events
UI_MAX_INPUT_EVENTS = 64,
// consecutive click threshold in ms
UI_CLICK_THRESHOLD = 250,
// maximum number of items that may be added (must be power of 2)
UI_MAX_ITEMS = 4096,
// maximum size in bytes reserved for storage of application dependent data
// as passed to uiAllocData().
UI_MAX_BUFFERSIZE = 1048576,
// maximum size in bytes of a single data buffer passed to uiAllocData().
UI_MAX_DATASIZE = 4096,
// maximum depth of nested containers
UI_MAX_DEPTH = 64,
// maximum number of buffered input events
UI_MAX_INPUT_EVENTS = 64,
// consecutive click threshold in ms
UI_CLICK_THRESHOLD = 250,
};

typedef unsigned int UIuint;
@@ -604,48 +604,48 @@ OUI_EXPORT short uiGetMarginDown(int item);
#include <assert.h>

#ifdef _MSC_VER
#pragma warning (disable: 4996) // Switch off security warnings
#pragma warning (disable: 4100) // Switch off unreferenced formal parameter warnings
#ifdef __cplusplus
#define UI_INLINE inline
#else
#define UI_INLINE
#endif
#pragma warning (disable: 4996) // Switch off security warnings
#pragma warning (disable: 4100) // Switch off unreferenced formal parameter warnings
#ifdef __cplusplus
#define UI_INLINE inline
#else
#define UI_INLINE inline
#define UI_INLINE
#endif
#else
#define UI_INLINE inline
#endif

#define UI_MAX_KIND 16

#define UI_ANY_BUTTON0_INPUT (UI_BUTTON0_DOWN \
|UI_BUTTON0_UP \
|UI_BUTTON0_HOT_UP \
|UI_BUTTON0_CAPTURE)
|UI_BUTTON0_UP \
|UI_BUTTON0_HOT_UP \
|UI_BUTTON0_CAPTURE)

#define UI_ANY_BUTTON2_INPUT (UI_BUTTON2_DOWN)

#define UI_ANY_MOUSE_INPUT (UI_ANY_BUTTON0_INPUT \
|UI_ANY_BUTTON2_INPUT)
|UI_ANY_BUTTON2_INPUT)

#define UI_ANY_KEY_INPUT (UI_KEY_DOWN \
|UI_KEY_UP \
|UI_CHAR)
|UI_KEY_UP \
|UI_CHAR)

#define UI_ANY_INPUT (UI_ANY_MOUSE_INPUT \
|UI_ANY_KEY_INPUT)
|UI_ANY_KEY_INPUT)

// extra item flags
enum {
// bit 0-8
// bit 0-8
UI_ITEM_LAYOUT_MASK = 0x0001FF,
// bit 9-18
UI_ITEM_EVENT_MASK = 0x07FE00,
// item is frozen (bit 19)
UI_ITEM_FROZEN = 0x080000,
// item handle is pointer to data (bit 20)
UI_ITEM_DATA = 0x100000,
// item has been inserted
UI_ITEM_INSERTED = 0x200000,
UI_ITEM_FROZEN = 0x080000,
// item handle is pointer to data (bit 20)
UI_ITEM_DATA = 0x100000,
// item has been inserted
UI_ITEM_INSERTED = 0x200000,
};

typedef struct UIitem {
@@ -659,7 +659,7 @@ typedef struct UIitem {
int firstkid;
// index of next sibling with same parent
int nextitem;
// margin offsets, interpretation depends on flags
// after layouting, the first two components are absolute coordinates
short margins[4];
@@ -691,7 +691,7 @@ struct UIcontext {
unsigned long long buttons;
// button state in the previous frame
unsigned long long last_buttons;
// where the cursor was at the beginning of the active state
UIvec2 start_cursor;
// where the cursor was last frame
@@ -700,7 +700,7 @@ struct UIcontext {
UIvec2 cursor;
// accumulated scroll wheel offsets
UIvec2 scroll;
int active_item;
int focus_item;
int last_hot_item;
@@ -714,11 +714,11 @@ struct UIcontext {
int last_timestamp;
int last_click_timestamp;
int clicks;
int count;
int datasize;
int eventcount;
UIitem items[UI_MAX_ITEMS];
unsigned char data[UI_MAX_BUFFERSIZE];
UIinputEvent events[UI_MAX_INPUT_EVENTS];
@@ -760,8 +760,8 @@ void uiSetButton(int button, int enabled) {
unsigned long long mask = 1ull<<button;
// set new bit
ui_context->buttons = (enabled)?
(ui_context->buttons | mask):
(ui_context->buttons & ~mask);
(ui_context->buttons | mask):
(ui_context->buttons & ~mask);
}

static void uiAddInputEvent(UIinputEvent event) {
@@ -839,8 +839,8 @@ UIvec2 uiGetCursorStart() {
UIvec2 uiGetCursorDelta() {
assert(ui_context);
UIvec2 result = {{{
ui_context->cursor.x - ui_context->last_cursor.x,
ui_context->cursor.y - ui_context->last_cursor.y
ui_context->cursor.x - ui_context->last_cursor.x,
ui_context->cursor.y - ui_context->last_cursor.y
}}};
return result;
}
@@ -848,8 +848,8 @@ UIvec2 uiGetCursorDelta() {
UIvec2 uiGetCursorStartDelta() {
assert(ui_context);
UIvec2 result = {{{
ui_context->cursor.x - ui_context->start_cursor.x,
ui_context->cursor.y - ui_context->start_cursor.y
ui_context->cursor.x - ui_context->start_cursor.x,
ui_context->cursor.y - ui_context->start_cursor.y
}}};
return result;
}
@@ -887,14 +887,14 @@ void uiFocus(int item) {

static void uiValidateStateItems() {
assert(ui_context);
if (ui_context->last_hot_item >= ui_context->count)
ui_context->last_hot_item = -1;
if (ui_context->active_item >= ui_context->count)
ui_context->active_item = -1;
if (ui_context->focus_item >= ui_context->count)
ui_context->focus_item = -1;
if (ui_context->last_click_item >= ui_context->count)
ui_context->last_click_item = -1;
if (ui_context->last_hot_item >= ui_context->count)
ui_context->last_hot_item = -1;
if (ui_context->active_item >= ui_context->count)
ui_context->active_item = -1;
if (ui_context->focus_item >= ui_context->count)
ui_context->focus_item = -1;
if (ui_context->last_click_item >= ui_context->count)
ui_context->last_click_item = -1;
}

int uiGetFocusedItem() {
@@ -911,10 +911,10 @@ void uiClear() {

void uiClearState() {
assert(ui_context);
ui_context->last_hot_item = -1;
ui_context->active_item = -1;
ui_context->focus_item = -1;
ui_context->last_click_item = -1;
ui_context->last_hot_item = -1;
ui_context->active_item = -1;
ui_context->focus_item = -1;
ui_context->last_click_item = -1;
}

int uiItem() {
@@ -931,25 +931,25 @@ int uiItem() {
void uiNotifyItem(int item, UIevent event) {
assert(ui_context);
if (!ui_context->handler)
return;
return;
assert((event & UI_ITEM_EVENT_MASK) == event);
ui_context->event_item = item;
UIitem *pitem = uiItemPtr(item);
if (pitem->flags & event) {
ui_context->handler(item, event);
}
UIitem *pitem = uiItemPtr(item);
if (pitem->flags & event) {
ui_context->handler(item, event);
}
}

UI_INLINE int uiLastChild(int item) {
item = uiFirstChild(item);
if (item < 0)
return -1;
while (true) {
int nextitem = uiNextSibling(item);
if (nextitem < 0)
return item;
item = nextitem;
}
item = uiFirstChild(item);
if (item < 0)
return -1;
while (true) {
int nextitem = uiNextSibling(item);
if (nextitem < 0)
return item;
item = nextitem;
}
}

int uiInsert(int item, int sibling) {
@@ -972,7 +972,7 @@ int uiAppend(int item, int child) {
pparent->firstkid = child;
pchild->flags |= UI_ITEM_INSERTED;
} else {
uiInsert(uiLastChild(item), child);
uiInsert(uiLastChild(item), child);
}
return child;
}
@@ -980,9 +980,9 @@ int uiAppend(int item, int child) {
void uiSetFrozen(int item, int enable) {
UIitem *pitem = uiItemPtr(item);
if (enable)
pitem->flags |= UI_ITEM_FROZEN;
pitem->flags |= UI_ITEM_FROZEN;
else
pitem->flags &= ~UI_ITEM_FROZEN;
pitem->flags &= ~UI_ITEM_FROZEN;
}

void uiSetSize(int item, int w, int h) {
@@ -1031,34 +1031,34 @@ short uiGetMarginDown(int item) {
// compute bounding box of all items super-imposed
UI_INLINE void uiComputeImposedSizeDim(UIitem *pitem, int dim) {
int wdim = dim+2;
if (pitem->size[dim])
return;
// largest size is required size
short need_size = 0;
int kid = pitem->firstkid;
while (kid >= 0) {
UIitem *pkid = uiItemPtr(kid);
// width = start margin + calculated width + end margin
int kidsize = pkid->margins[dim] + pkid->size[dim] + pkid->margins[wdim];
need_size = ui_max(need_size, kidsize);
kid = uiNextSibling(kid);
}
pitem->size[dim] = need_size;
if (pitem->size[dim])
return;
// largest size is required size
short need_size = 0;
int kid = pitem->firstkid;
while (kid >= 0) {
UIitem *pkid = uiItemPtr(kid);
// width = start margin + calculated width + end margin
int kidsize = pkid->margins[dim] + pkid->size[dim] + pkid->margins[wdim];
need_size = ui_max(need_size, kidsize);
kid = uiNextSibling(kid);
}
pitem->size[dim] = need_size;
}

// compute bounding box of all items stacked
UI_INLINE void uiComputeStackedSizeDim(UIitem *pitem, int dim) {
int wdim = dim+2;
if (pitem->size[dim])
return;
short need_size = 0;
int kid = pitem->firstkid;
while (kid >= 0) {
UIitem *pkid = uiItemPtr(kid);
// width += start margin + calculated width + end margin
need_size += pkid->margins[dim] + pkid->size[dim] + pkid->margins[wdim];
kid = uiNextSibling(kid);
}
if (pitem->size[dim])
return;
short need_size = 0;
int kid = pitem->firstkid;
while (kid >= 0) {
UIitem *pkid = uiItemPtr(kid);
// width += start margin + calculated width + end margin
need_size += pkid->margins[dim] + pkid->size[dim] + pkid->margins[wdim];
kid = uiNextSibling(kid);
}
pitem->size[dim] = need_size;
}

@@ -1071,16 +1071,16 @@ static void uiComputeBestSize(int item, int dim) {
uiComputeBestSize(kid, dim);
kid = uiNextSibling(kid);
}
if(pitem->flags & UI_FLEX) {
// flex model
if ((pitem->flags & 1) == (unsigned int)dim) // direction
uiComputeStackedSizeDim(pitem, dim);
else
uiComputeImposedSizeDim(pitem, dim);
// flex model
if ((pitem->flags & 1) == (unsigned int)dim) // direction
uiComputeStackedSizeDim(pitem, dim);
else
uiComputeImposedSizeDim(pitem, dim);
} else {
// layout model
uiComputeImposedSizeDim(pitem, dim);
// layout model
uiComputeImposedSizeDim(pitem, dim);
}
}

@@ -1091,63 +1091,63 @@ UI_INLINE void uiLayoutStackedItemDim(UIitem *pitem, int dim) {
short space = pitem->size[dim];
short used = 0;

int count = 0;
// first pass: count items that need to be expanded,
// and the space that is used
int kid = pitem->firstkid;
while (kid >= 0) {
UIitem *pkid = uiItemPtr(kid);
int flags = (pkid->flags & UI_ITEM_LAYOUT_MASK) >> dim;
if ((flags & UI_HFILL) == UI_HFILL) { // grow
count++;
used += pkid->margins[dim] + pkid->margins[wdim];
} else {
used += pkid->margins[dim] + pkid->size[dim] + pkid->margins[wdim];
}
kid = uiNextSibling(kid);
}
int count = 0;
// first pass: count items that need to be expanded,
// and the space that is used
int kid = pitem->firstkid;
while (kid >= 0) {
UIitem *pkid = uiItemPtr(kid);
int flags = (pkid->flags & UI_ITEM_LAYOUT_MASK) >> dim;
if ((flags & UI_HFILL) == UI_HFILL) { // grow
count++;
used += pkid->margins[dim] + pkid->margins[wdim];
} else {
used += pkid->margins[dim] + pkid->size[dim] + pkid->margins[wdim];
}
kid = uiNextSibling(kid);
}

int extra_space = ui_max(space - used,0);

if (extra_space && count) {
// distribute width among items
float width = (float)extra_space / (float)count;
float x = (float)pitem->margins[dim];
float x1;
// second pass: distribute and rescale
kid = pitem->firstkid;
while (kid >= 0) {
short ix0,ix1;
UIitem *pkid = uiItemPtr(kid);
int flags = (pkid->flags & UI_ITEM_LAYOUT_MASK) >> dim;
x += (float)pkid->margins[dim];
if ((flags & UI_HFILL) == UI_HFILL) { // grow
x1 = x+width;
} else {
x1 = x+(float)pkid->size[dim];
}
ix0 = (short)x;
ix1 = (short)x1;
pkid->margins[dim] = ix0;
pkid->size[dim] = ix1-ix0;
x = x1 + (float)pkid->margins[wdim];
kid = uiNextSibling(kid);
}
// distribute width among items
float width = (float)extra_space / (float)count;
float x = (float)pitem->margins[dim];
float x1;
// second pass: distribute and rescale
kid = pitem->firstkid;
while (kid >= 0) {
short ix0,ix1;
UIitem *pkid = uiItemPtr(kid);
int flags = (pkid->flags & UI_ITEM_LAYOUT_MASK) >> dim;
x += (float)pkid->margins[dim];
if ((flags & UI_HFILL) == UI_HFILL) { // grow
x1 = x+width;
} else {
x1 = x+(float)pkid->size[dim];
}
ix0 = (short)x;
ix1 = (short)x1;
pkid->margins[dim] = ix0;
pkid->size[dim] = ix1-ix0;
x = x1 + (float)pkid->margins[wdim];
kid = uiNextSibling(kid);
}
} else {
// single pass: just distribute
short x = pitem->margins[dim];
int kid = pitem->firstkid;
while (kid >= 0) {
UIitem *pkid = uiItemPtr(kid);
x += pkid->margins[dim];
pkid->margins[dim] = x;
x += pkid->size[dim] + pkid->margins[wdim];
kid = uiNextSibling(kid);
}
// single pass: just distribute
short x = pitem->margins[dim];
int kid = pitem->firstkid;
while (kid >= 0) {
UIitem *pkid = uiItemPtr(kid);
x += pkid->margins[dim];
pkid->margins[dim] = x;
x += pkid->size[dim] + pkid->margins[wdim];
kid = uiNextSibling(kid);
}
}
}

@@ -1173,7 +1173,7 @@ UI_INLINE void uiLayoutImposedItemDim(UIitem *pitem, int dim) {
pkid->margins[dim] = space-pkid->size[dim]-pkid->margins[wdim];
} break;
case UI_HFILL: {
pkid->size[dim] = ui_max(0,space-pkid->margins[dim]-pkid->margins[wdim]);
pkid->size[dim] = ui_max(0,space-pkid->margins[dim]-pkid->margins[wdim]);
} break;
}
pkid->margins[dim] += offset;
@@ -1184,18 +1184,18 @@ UI_INLINE void uiLayoutImposedItemDim(UIitem *pitem, int dim) {

static void uiLayoutItem(int item, int dim) {
UIitem *pitem = uiItemPtr(item);
if(pitem->flags & UI_FLEX) {
// flex model
if ((pitem->flags & 1) == (unsigned int)dim) // direction
uiLayoutStackedItemDim(pitem, dim);
else
uiLayoutImposedItemDim(pitem, dim);
// flex model
if ((pitem->flags & 1) == (unsigned int)dim) // direction
uiLayoutStackedItemDim(pitem, dim);
else
uiLayoutImposedItemDim(pitem, dim);
} else {
// layout model
uiLayoutImposedItemDim(pitem, dim);
// layout model
uiLayoutImposedItemDim(pitem, dim);
}
int kid = uiFirstChild(item);
while (kid >= 0) {
uiLayoutItem(kid, dim);
@@ -1204,11 +1204,11 @@ static void uiLayoutItem(int item, int dim) {
}

UIrect uiGetRect(int item) {
UIitem *pitem = uiItemPtr(item);
UIrect rc = {{{
pitem->margins[0], pitem->margins[1],
pitem->size[0], pitem->size[1]
}}};
UIitem *pitem = uiItemPtr(item);
UIrect rc = {{{
pitem->margins[0], pitem->margins[1],
pitem->size[0], pitem->size[1]
}}};
return rc;
}

@@ -1242,12 +1242,12 @@ void *uiGetHandle(int item) {
}

void uiSetHandler(UIhandler handler) {
assert(ui_context);
ui_context->handler = handler;
assert(ui_context);
ui_context->handler = handler;
}

UIhandler uiGetHandler() {
assert(ui_context);
assert(ui_context);
return ui_context->handler;
}

@@ -1266,9 +1266,9 @@ int uiContains(int item, int x, int y) {
x -= rect.x;
y -= rect.y;
if ((x>=0)
&& (y>=0)
&& (x<rect.w)
&& (y<rect.h)) return 1;
&& (y>=0)
&& (x<rect.w)
&& (y<rect.h)) return 1;
return 0;
}

@@ -1276,17 +1276,17 @@ int uiFindItemForEvent(int item, UIevent event, int x, int y) {
UIitem *pitem = uiItemPtr(item);
if (pitem->flags & UI_ITEM_FROZEN) return -1;
if (uiContains(item, x, y)) {
int best_hit = -1;
int best_hit = -1;
int kid = uiFirstChild(item);
while (kid >= 0) {
int hit = uiFindItemForEvent(kid, event, x, y);
if (hit >= 0) {
best_hit = hit;
best_hit = hit;
}
kid = uiNextSibling(kid);
}
if (best_hit >= 0) {
return best_hit;
return best_hit;
}
// click-through if the item has no handler for this event
if (pitem->flags & event) {
@@ -1317,12 +1317,12 @@ void uiUpdateHotItem() {
assert(ui_context);
if (!ui_context->count) return;
ui_context->hot_item = uiFindItemForEvent(0,
(UIevent)UI_ANY_MOUSE_INPUT,
ui_context->cursor.x, ui_context->cursor.y);
(UIevent)UI_ANY_MOUSE_INPUT,
ui_context->cursor.x, ui_context->cursor.y);
}

int uiGetClicks() {
return ui_context->clicks;
return ui_context->clicks;
}

void uiProcess(int timestamp) {
@@ -1331,7 +1331,7 @@ void uiProcess(int timestamp) {
uiClearInputEvents();
return;
}
int hot_item = ui_context->last_hot_item;
int active_item = ui_context->active_item;
int focus_item = ui_context->focus_item;
@@ -1342,17 +1342,17 @@ void uiProcess(int timestamp) {
ui_context->active_key = ui_context->events[i].key;
ui_context->active_modifier = ui_context->events[i].mod;
uiNotifyItem(focus_item,
ui_context->events[i].event);
ui_context->events[i].event);
}
} else {
ui_context->focus_item = -1;
}
if (ui_context->scroll.x || ui_context->scroll.y) {
int scroll_item = uiFindItemForEvent(0, UI_SCROLL,
ui_context->cursor.x, ui_context->cursor.y);
if (scroll_item >= 0) {
int scroll_item = uiFindItemForEvent(0, UI_SCROLL,
ui_context->cursor.x, ui_context->cursor.y);
if (scroll_item >= 0) {
uiNotifyItem(scroll_item, UI_SCROLL);
}
}
}

uiClearInputEvents();
@@ -1366,19 +1366,19 @@ void uiProcess(int timestamp) {
if (uiGetButton(0)) {
hot_item = -1;
active_item = hot;
if (active_item != focus_item) {
focus_item = -1;
ui_context->focus_item = -1;
}
if (active_item >= 0) {
if (
((timestamp - ui_context->last_click_timestamp) > UI_CLICK_THRESHOLD)
|| (ui_context->last_click_item != active_item)) {
ui_context->clicks = 0;
}
ui_context->clicks++;
if (
((timestamp - ui_context->last_click_timestamp) > UI_CLICK_THRESHOLD)
|| (ui_context->last_click_item != active_item)) {
ui_context->clicks = 0;
}
ui_context->clicks++;

ui_context->last_click_timestamp = timestamp;
ui_context->last_click_item = active_item;
@@ -1387,11 +1387,11 @@ void uiProcess(int timestamp) {
ui_context->state = UI_STATE_CAPTURE;
} else if (uiGetButton(2) && !uiGetLastButton(2)) {
hot_item = -1;
hot = uiFindItemForEvent(0, UI_BUTTON2_DOWN,
ui_context->cursor.x, ui_context->cursor.y);
if (hot >= 0) {
uiNotifyItem(hot, UI_BUTTON2_DOWN);
}
hot = uiFindItemForEvent(0, UI_BUTTON2_DOWN,
ui_context->cursor.x, ui_context->cursor.y);
if (hot >= 0) {
uiNotifyItem(hot, UI_BUTTON2_DOWN);
}
} else {
hot_item = hot;
}
@@ -1417,7 +1417,7 @@ void uiProcess(int timestamp) {
}
} break;
}
ui_context->last_cursor = ui_context->cursor;
ui_context->last_hot_item = hot_item;
ui_context->active_item = active_item;
@@ -1450,7 +1450,7 @@ UIitemState uiGetState(int item) {
if (uiIsActive(item)) {
if (pitem->flags & (UI_BUTTON0_CAPTURE|UI_BUTTON0_UP)) return UI_ACTIVE;
if ((pitem->flags & UI_BUTTON0_HOT_UP)
&& uiIsHot(item)) return UI_ACTIVE;
&& uiIsHot(item)) return UI_ACTIVE;
return UI_COLD;
} else if (uiIsHot(item)) {
return UI_HOT;


Loading…
Cancel
Save