instead of passing seperate arguments. For when we want to pass 'richer'
events around.
+typedef struct BWinEvent {
+ unsigned short event;
+ short val;
+ char ascii;
+} BWinEvent;
+
+/*---*/
+
int mywinget(void);
void mywinclose(int winid);
void mywinposition(int winid,
int mywinget(void);
void mywinclose(int winid);
void mywinposition(int winid,
int ymin, int ymax);
/*---*/
int ymin, int ymax);
/*---*/
+ /** Test if there are events available on a BWin queue.
+ *
+ * @param winid The ID of the window to query.
+ * @return True if there is an event available for _qread'ing.
+ */
int bwin_qtest(int winid);
int bwin_qtest(int winid);
-unsigned short bwin_qread(int winid, short *val_r, char *ascii_r);
-void bwin_qadd(int winid, unsigned short event, short val, char ascii);
+
+ /** Read an event off of the BWin queue (if available).
+ *
+ * @param winid The ID of the window to read from.
+ * @param event_r A pointer to return the event in.
+ * @return True if an event was read and @a event_r filled.
+ */
+int bwin_qread(int winid, BWinEvent *event_r);
+
+ /** Add an event to the BWin queue.
+ *
+ * @param winid The ID of the window to add to.
+ * @param event A pointer to copy the event from.
+ */
+void bwin_qadd(int winid, BWinEvent *event);
struct ScrArea;
struct SpaceButs;
struct View2D;
struct ScrArea;
struct SpaceButs;
struct View2D;
#define REMAKEIPO 1
#define OOPS_TEST 2
#define REMAKEIPO 1
#define OOPS_TEST 2
void scrarea_do_windraw (struct ScrArea *sa);
void scrarea_do_winchange (struct ScrArea *sa);
void scrarea_do_windraw (struct ScrArea *sa);
void scrarea_do_winchange (struct ScrArea *sa);
-void scrarea_do_winhandle (struct ScrArea *sa, unsigned short event, short val, char ascii);
+void scrarea_do_winhandle (struct ScrArea *sa, struct BWinEvent *evt);
void scrarea_do_headdraw (struct ScrArea *sa);
void scrarea_do_headchange (struct ScrArea *sa);
void scrarea_do_headdraw (struct ScrArea *sa);
void scrarea_do_headchange (struct ScrArea *sa);
if (win<4 || !areawinar[win]) {
printf("bad call to addqueue: %d (%d, %d)\n", win, event, val);
} else {
if (win<4 || !areawinar[win]) {
printf("bad call to addqueue: %d (%d, %d)\n", win, event, val);
} else {
- bwin_qadd(win, event, val, ascii);
+ BWinEvent evt;
+ evt.event= event;
+ evt.val= val;
+ evt.ascii= ascii;
+ bwin_qadd(win, &evt);
static void scrarea_dispatch_header_events(ScrArea *sa)
{
ScrArea *tempsa;
static void scrarea_dispatch_header_events(ScrArea *sa)
{
ScrArea *tempsa;
short do_redraw=0, do_change=0;
areawinset(sa->headwin);
short do_redraw=0, do_change=0;
areawinset(sa->headwin);
- while(bwin_qtest(sa->headwin)) {
- char ascii;
- short val;
- unsigned short event= bwin_qread(sa->headwin, &val, &ascii);
+ while(bwin_qread(sa->headwin, &evt)) {
+ if(evt.val) {
+ if( uiDoBlocks(&curarea->uiblocks, evt.event)!=UI_NOTHING ) evt.event= 0;
- if(val) {
- if( uiDoBlocks(&curarea->uiblocks, event)!=UI_NOTHING ) event= 0;
-
- switch(event) {
+ do_headerbuttons(evt.val);
break;
default:
if (winqueue_break == 0) {
break;
default:
if (winqueue_break == 0) {
- scrarea_do_winhandle(sa, event, val, ascii);
+ scrarea_do_winhandle(sa, &evt);
if (winqueue_break == 0) areawinset(sa->headwin);
}
}
if (winqueue_break == 0) areawinset(sa->headwin);
}
}
static void scrarea_dispatch_events(ScrArea *sa)
{
ScrArea *tempsa;
static void scrarea_dispatch_events(ScrArea *sa)
{
ScrArea *tempsa;
short do_redraw=0, do_change=0;
if(sa!=curarea || sa->win!=mywinget()) areawinset(sa->win);
short do_redraw=0, do_change=0;
if(sa!=curarea || sa->win!=mywinget()) areawinset(sa->win);
- while(bwin_qtest(sa->win)) {
- char ascii;
- short val;
- unsigned short event= bwin_qread(sa->win, &val, &ascii);
-
- if(event==REDRAW) {
+ while(bwin_qread(sa->win, &evt)) {
+ if(evt.event==REDRAW) {
- else if(event==CHANGED) {
+ else if(evt.event==CHANGED) {
sa->win_swap= 0;
do_change= 1;
do_redraw= 1;
}
else {
sa->win_swap= 0;
do_change= 1;
do_redraw= 1;
}
else {
- scrarea_do_winhandle(sa, event, val, ascii);
+ scrarea_do_winhandle(sa, &evt);
}
if(winqueue_break) return;
}
if(winqueue_break) return;
+ /* If the main window is active, find the current active ScrArea
+ * underneath the mouse cursor, updating the headers & cursor for
+ * the appropriate internal window if things have changed.
+ *
+ * If the main window is not active, deactivate the internal
+ * window.
+ */
if (has_input) {
ScrArea *newactarea;
int newactwin;
if (has_input) {
ScrArea *newactarea;
int newactwin;
-
-typedef struct {
- unsigned short event;
- short val;
- char ascii;
-} QEvent;
-
typedef struct {
struct bWindow *next, *prev;
int id, pad;
typedef struct {
struct bWindow *next, *prev;
int id, pad;
/* XXXXXXXXXXXXXXXX very hacky, not allowed to release
* again after 2.24
/* XXXXXXXXXXXXXXXX very hacky, not allowed to release
* again after 2.24
+ *
+ * Nah ha! And you thought you'd be in business that long!
*/
void mywindow_build_and_set_renderwin(void)
{
*/
void mywindow_build_and_set_renderwin(void)
{
{
return !BLI_gsqueue_is_empty(bwin_from_winid(winid)->qevents);
}
{
return !BLI_gsqueue_is_empty(bwin_from_winid(winid)->qevents);
}
-unsigned short bwin_qread(int winid, short *val_r, char *ascii_r)
+int bwin_qread(int winid, BWinEvent *evt_r)
{
if (bwin_qtest(winid)) {
{
if (bwin_qtest(winid)) {
- QEvent evt;
- BLI_gsqueue_pop(bwin_from_winid(winid)->qevents, &evt);
- *val_r= evt.val;
- *ascii_r= evt.ascii;
- return evt.event;
+ BLI_gsqueue_pop(bwin_from_winid(winid)->qevents, evt_r);
+ return 1;
-void bwin_qadd(int winid, unsigned short event, short val, char ascii)
+void bwin_qadd(int winid, BWinEvent *evt)
- QEvent evt;
- evt.event= event;
- evt.val= val;
- evt.ascii= ascii;
- BLI_gsqueue_push(bwin_from_winid(winid)->qevents, &evt);
+ BLI_gsqueue_push(bwin_from_winid(winid)->qevents, evt);
}
/* ------------------------------------------------------------------------- */
}
/* ------------------------------------------------------------------------- */
win->xmax= xmax;
win->ymax= ymax;
win->xmax= xmax;
win->ymax= ymax;
- win->qevents= BLI_gsqueue_new(sizeof(QEvent));
+ win->qevents= BLI_gsqueue_new(sizeof(BWinEvent));
Mat4One(win->viewmat);
Mat4One(win->winmat);
Mat4One(win->viewmat);
Mat4One(win->winmat);
-void scrarea_do_winhandle(ScrArea *area, unsigned short event, short val, char ascii)
+void scrarea_do_winhandle(ScrArea *area, BWinEvent *evt)
{
SpaceType *st= spacetype_from_code(area->spacetype);
areawinset(area->win);
if (st->winhandle) {
{
SpaceType *st= spacetype_from_code(area->spacetype);
areawinset(area->win);
if (st->winhandle) {
- st->winhandle(event, val, ascii);
+ st->winhandle(evt->event, evt->val, evt->ascii);