Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2008-01-07 21:03:41 +0300
committerTon Roosendaal <ton@blender.org>2008-01-07 21:03:41 +0300
commit1363134dee60ce96ab0772b72283fb405b6a75ed (patch)
treeece7c62b984d1ebfa8fd1fe1890332c75efa234d /source/blender/windowmanager
parent1005d99ea5190f34c56f6b30d5eca6bf738a78e8 (diff)
Whole lot of changes.... here a shortlist:
- removed editors/area and put this all in screen - added first python calls (note, a new c file for scriptlinks) - added view3d editor callbacks (no drawing yet) - added files in editors/interface (Cmake and Scons has to be fixed, help welcome!) - now areas/headers are being converted on file read - note: previously saved 2.50 files will crash!!! (.B.blend) - area regions are being drawn, first handler for cursor added (on edge) - window duplicate and scale works correct for screen subdiv Todos for me: - need to fix things in syntax (function names) a bit still - more operators for screen - define how Context will work... still unresolved when it gets set - docs! Reviews of code structure is welcome! There are also more todos now for others, but it can wait a couple of days
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/WM_api.h7
-rw-r--r--source/blender/windowmanager/WM_types.h52
-rw-r--r--source/blender/windowmanager/intern/screen_edit.c0
-rw-r--r--source/blender/windowmanager/intern/wm.c31
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c149
-rw-r--r--source/blender/windowmanager/intern/wm_init_exit.c4
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c10
-rw-r--r--source/blender/windowmanager/intern/wm_subwindow.c27
-rw-r--r--source/blender/windowmanager/intern/wm_window.c71
-rw-r--r--source/blender/windowmanager/wm.h3
-rw-r--r--source/blender/windowmanager/wm_event_system.h41
-rw-r--r--source/blender/windowmanager/wm_event_types.h2
12 files changed, 299 insertions, 98 deletions
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 2aad763336e..6f94bfac456 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -63,7 +63,10 @@ void WM_keymap_verify_item(ListBase *lb, char *idname, short type,
short val, int modifier, short keymodifier);
struct wmEventHandler *WM_event_add_keymap_handler(ListBase *keymap, ListBase *handlers);
struct wmEventHandler *WM_event_add_modal_keymap_handler(ListBase *keymap, ListBase *handlers, wmOperator *op);
-
+
+void WM_event_add_notifier(wmWindowManager *wm, wmWindow *window, int swinid, int type, int value);
+
+
/* operator api, default callbacks */
/* confirm menu + exec */
int WM_operator_confirm (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
@@ -72,7 +75,7 @@ int WM_operator_winactive (struct bContext *C);
/* operator api */
wmOperatorType *WM_operatortype_find(const char *idname);
-void WM_operator_register(wmWindowManager *wm, wmOperator *ot);
+void WM_operatortypelist_append(ListBase *lb);
/* OpenGL wrappers, mimicing opengl syntax */
void wmLoadMatrix (wmWindow *win, float mat[][4]);
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index c894a8908f0..9c670aff71e 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -30,11 +30,42 @@
/* exported types for WM */
+#include "wm_cursors.h"
+#include "wm_event_types.h"
+
/* ************** wmOperatorType ************************ */
/* flag */
#define OPTYPE_REGISTER 1
+/* ************** wmEvent ************************ */
+
+/* each event should have full modifier state */
+/* event comes from eventmanager and from keymap */
+typedef struct wmEvent {
+ struct wmEvent *next, *prev;
+
+ short type; /* event code itself (short, is also in keymap) */
+ short val; /* press, release, scrollvalue */
+ short x, y; /* mouse pointer position */
+ short unicode; /* future, ghost? */
+ char ascii; /* from ghost */
+ char pad1;
+
+ /* modifier states */
+ short shift, ctrl, alt, oskey; /* oskey is apple or windowskey, value denotes order of pressed */
+ short keymodifier; /* rawkey modifier */
+
+ /* keymap item, set by handler (weak?) */
+ const char *keymap_idname;
+
+ /* custom data */
+ short custom; /* custom data type, stylus, 6dof, see wm_event_types.h */
+ void *customdata; /* ascii, unicode, mouse coords, angles, vectors, dragdrop info */
+
+} wmEvent;
+
+
/* ************** wmKeyMap ************************ */
/* modifier */
@@ -53,6 +84,27 @@
#define KM_RELEASE 1
+/* ************** notifiers ****************** */
+
+typedef struct wmNotifier {
+ struct wmNotifier *prev, *next;
+
+ struct wmWindow *window;
+
+ int swinid;
+ int type;
+ int value;
+
+} wmNotifier;
+
+
+enum {
+ WM_NOTE_REDRAW,
+ WM_NOTE_REFRESH,
+
+ WM_NOTE_LAST
+};
+
/* ************** custom wmEvent data ************** */
#define DEV_STYLUS 1
diff --git a/source/blender/windowmanager/intern/screen_edit.c b/source/blender/windowmanager/intern/screen_edit.c
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/source/blender/windowmanager/intern/screen_edit.c
diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index d62b24ed806..19bf8e67db7 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -43,12 +43,14 @@
#include "wm_event_system.h"
#include "wm_event_types.h"
+#include "ED_screen.h"
+
/* ****************************************************** */
#define MAX_OP_REGISTERED 32
/* all operations get registered in the windowmanager here */
/* called on event handling by event_system.c */
-void WM_operator_register(wmWindowManager *wm, wmOperator *op)
+void wm_operator_register(wmWindowManager *wm, wmOperator *op)
{
wmOperator *opc= MEM_mallocN(sizeof(wmOperator), "operator registry");
int tot;
@@ -90,10 +92,17 @@ void wm_check(bContext *C)
/* case: no open windows at all, for old file reads */
wm_window_add_ghostwindows(C->wm);
- if(C->window==NULL) C->window= C->wm->windrawable;
+ if(C->window==NULL) {
+ wm_window_make_drawable(C, C->wm->windrawable);
+ }
+ /* case: fileread */
if(C->wm->initialized==0) {
+
wm_window_keymap(C->wm);
+ ed_screen_keymap(C->wm);
+
+ ED_screens_initialize(C->wm);
C->wm->initialized= 1;
}
}
@@ -108,7 +117,7 @@ void wm_add_default(bContext *C)
win= wm_window_new(C, C->screen);
wm->windrawable= win;
- C->window= win;
+ wm_window_make_drawable(C, win);
}
@@ -123,9 +132,12 @@ void wm_close_and_free(bContext *C, wmWindowManager *wm)
}
BLI_freelistN(&wm->operators);
+
BLI_freelistN(&wm->windowkeymap);
BLI_freelistN(&wm->screenkeymap);
+ BLI_freelistN(&wm->queue);
+
if(C && C->wm==wm) C->wm= NULL;
}
@@ -151,15 +163,12 @@ void WM_main(bContext *C)
/* per window, all events to the window, screen, area and region handlers */
wm_event_do_handlers(C);
+ /* events have left notes about changes, we handle and cache it */
+ wm_event_do_notifiers(C);
+
+ /* execute cached changes draw */
+ wm_draw_update(C);
}
}
-/* While (local_event) {
-Update controller stack if active changed ()
-Match event to an action()
-Process_event()
-Do_notifications()
-Do_draw_updates()
-}
-*/
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 782c1325e2f..37efc1a1367 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -43,6 +43,9 @@
#include "BKE_blender.h"
#include "BKE_global.h"
+#include "ED_screen.h"
+#include "ED_area.h"
+
#include "WM_api.h"
#include "WM_types.h"
#include "wm.h"
@@ -84,6 +87,122 @@ void wm_event_free_all(wmWindow *win)
}
}
+/* ********************* notifiers, listeners *************** */
+
+/* win and swinid are optional context limitors */
+void WM_event_add_notifier(wmWindowManager *wm, wmWindow *window, int swinid, int type, int value)
+{
+ wmNotifier *note= MEM_callocN(sizeof(wmNotifier), "notifier");
+
+ BLI_addtail(&wm->queue, note);
+
+ note->window= window;
+ note->swinid= swinid;
+ note->type= type;
+ note->value= value;
+}
+
+static wmNotifier *wm_notifier_next(wmWindowManager *wm)
+{
+ wmNotifier *note= wm->queue.first;
+
+ if(note) BLI_remlink(&wm->queue, note);
+ return note;
+}
+
+/* called in mainloop */
+void wm_event_do_notifiers(bContext *C)
+{
+ wmNotifier *note;
+
+ while( (note=wm_notifier_next(C->wm)) ) {
+ wmWindow *win;
+
+ for(win= C->wm->windows.first; win; win= win->next) {
+ ScrArea *sa;
+
+ if(note->window && note->window!=win)
+ continue;
+ if(win->screen==NULL)
+ continue;
+ printf("notifier win %d screen %s\n", win->winid, win->screen->id.name+2);
+ ED_screen_do_listen(win->screen, note);
+
+ for(sa= win->screen->areabase.first; sa; sa= sa->next) {
+ ARegion *ar= sa->regionbase.first;
+
+ for(; ar; ar= ar->next) {
+ if(note->swinid && note->swinid!=ar->swinid)
+ continue;
+ ED_region_do_listen(ar, note);
+ }
+ }
+ }
+ MEM_freeN(note);
+ }
+}
+
+/* quick test to prevent changing window drawable */
+static int wm_draw_update_test_window(wmWindow *win)
+{
+ ScrArea *sa;
+
+ if(win->screen->do_refresh)
+ return 1;
+ if(win->screen->do_draw)
+ return 1;
+
+ for(sa= win->screen->areabase.first; sa; sa= sa->next) {
+ ARegion *ar= sa->regionbase.first;
+
+ for(; ar; ar= ar->next) {
+ /* cached notifiers */
+ if(ar->do_refresh)
+ return 1;
+ if(ar->swinid && ar->do_draw)
+ return 1;
+ }
+ }
+ return 0;
+}
+
+void wm_draw_update(bContext *C)
+{
+ wmWindow *win;
+
+ for(win= C->wm->windows.first; win; win= win->next) {
+ if(wm_draw_update_test_window(win)) {
+ ScrArea *sa;
+
+ /* sets context window+screen */
+ wm_window_make_drawable(C, win);
+
+ /* notifiers for screen redraw */
+ if(win->screen->do_refresh)
+ ED_screen_refresh(C->wm, win);
+ if(win->screen->do_draw)
+ ED_screen_draw(win);
+
+ for(sa= win->screen->areabase.first; sa; sa= sa->next) {
+ ARegion *ar= sa->regionbase.first;
+ int hasdrawn= 0;
+
+ for(; ar; ar= ar->next) {
+ hasdrawn |= ar->do_draw;
+
+ /* cached notifiers */
+ if(ar->do_refresh)
+ ED_region_do_refresh(C, ar);
+
+ if(ar->swinid && ar->do_draw)
+ ED_region_do_draw(C, ar);
+ }
+ }
+ wm_window_swap_buffers(win);
+ }
+ }
+}
+
/* ********************* handlers *************** */
void wm_event_free_handlers(ListBase *lb)
@@ -144,7 +263,7 @@ static int wm_handler_operator_call(bContext *C, wmEventHandler *handler, wmEven
retval= op.type->exec(C, &op);
if( ot->flag & OPTYPE_REGISTER)
- WM_operator_register(C->wm, &op);
+ wm_operator_register(C->wm, &op);
}
}
}
@@ -190,10 +309,7 @@ static int wm_event_inside_i(wmEvent *event, rcti *rect)
{
return BLI_in_rcti(rect, event->x, event->y);
}
-//static int wm_event_inside_f(wmEvent *event, rctf *rect)
-//{
-// return BLI_in_rctf(rect, (float)event->x, (float)event->y);
-//}
+
/* called in main loop */
/* goes over entire hierarchy: events -> window -> screen -> area -> region */
@@ -204,21 +320,20 @@ void wm_event_do_handlers(bContext *C)
for(win= C->wm->windows.first; win; win= win->next) {
wmEvent *event;
- /* MVC demands to not draw in event handlers... for now we leave it */
- /* it also updates context (win, screen) */
- wm_window_make_drawable(C, win);
-
- if( C->screen==NULL )
- wm_event_free_all(C->window);
+ if( win->screen==NULL )
+ wm_event_free_all(win);
- while( (event=wm_event_next(C->window)) ) {
- int action= wm_handlers_do(C, event, &C->window->handlers);
+ while( (event=wm_event_next(win)) ) {
+ int action;
- if(action==WM_HANDLER_CONTINUE)
- action= wm_handlers_do(C, event, &C->screen->handlers);
+ /* MVC demands to not draw in event handlers... for now we leave it */
+ /* it also updates context (win, screen) */
+ wm_window_make_drawable(C, win);
+
+ action= wm_handlers_do(C, event, &win->handlers);
if(action==WM_HANDLER_CONTINUE) {
- ScrArea *sa= C->screen->areabase.first;
+ ScrArea *sa= win->screen->areabase.first;
for(; sa; sa= sa->next) {
if(wm_event_inside_i(event, &sa->winrct)) {
@@ -395,7 +510,7 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata)
if(win->active) {
GHOST_TEventCursorData *cd= customdata;
int cx, cy;
-
+
GHOST_ScreenToClient(win->ghostwin, cd->x, cd->y, &cx, &cy);
event.type= MOUSEMOVE;
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index 2afc63a7363..ffc535c1d46 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -74,6 +74,8 @@
#include "wm_files.h"
#include "wm_window.h"
+#include "ED_screen.h"
+
static void initbuttons(void)
{
// uiDefFont(UI_HELVB,
@@ -116,6 +118,8 @@ void WM_init(bContext *C)
set_free_windowmanager_cb(wm_close_and_free); /* library.c */
+ ED_spacetypes_init(); /* editors/area/spacetype.c */
+
/* get the default database, plus a wm */
WM_read_homefile(C, 0);
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index a744d949e81..49989000c6f 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -59,6 +59,12 @@ wmOperatorType *WM_operatortype_find(const char *idname)
return NULL;
}
+/* all ops in 1 list (for time being... needs evaluation later) */
+void WM_operatortypelist_append(ListBase *lb)
+{
+ addlisttolist(&global_ops, lb);
+}
+
/* ************ default ops, exported *********** */
int WM_operator_confirm(bContext *C, wmOperator *op, wmEvent *event)
@@ -109,7 +115,6 @@ static void WM_OT_window_fullscreen_toggle(wmOperatorType *ot)
}
-
#define ADD_OPTYPE(opfunc) ot= MEM_callocN(sizeof(wmOperatorType), "operatortype"); \
opfunc(ot); \
BLI_addtail(&global_ops, ot)
@@ -132,3 +137,6 @@ void wm_operatortype_init(void)
}
+
+
+
diff --git a/source/blender/windowmanager/intern/wm_subwindow.c b/source/blender/windowmanager/intern/wm_subwindow.c
index 2f4e90a2e71..23fbba7a054 100644
--- a/source/blender/windowmanager/intern/wm_subwindow.c
+++ b/source/blender/windowmanager/intern/wm_subwindow.c
@@ -135,7 +135,7 @@ void wm_subwindow_set(wmWindow *win, int swinid)
win->curswin= swin;
wm_subwindow_getsize(win, &width, &height);
-
+
glViewport(swin->winrct.xmin, swin->winrct.ymin, width, height);
glScissor(swin->winrct.xmin, swin->winrct.ymin, width, height);
@@ -161,20 +161,22 @@ int wm_subwindow_open(wmWindow *win, rcti *winrct)
freewinid= swin->swinid+1;
win->curswin= swin= MEM_callocN(sizeof(wmSubWindow), "swinopen");
-
+ BLI_addtail(&win->subwindows, swin);
+
+ printf("swin %d added\n", freewinid);
swin->swinid= freewinid;
swin->winrct= *winrct;
Mat4One(swin->viewmat);
Mat4One(swin->winmat);
+ /* and we appy it all right away */
+ wm_subwindow_set(win, swin->swinid);
+
/* extra service */
wm_subwindow_getsize(win, &width, &height);
wmOrtho2(win, -0.375, (float)width-0.375, -0.375, (float)height-0.375);
wmLoadIdentity(win);
-
- /* and we appy it all right away */
- wm_subwindow_set(win, swin->swinid);
return swin->swinid;
}
@@ -203,6 +205,8 @@ void wm_subwindow_position(wmWindow *win, int swinid, rcti *winrct)
wmSubWindow *swin= swin_from_swinid(win, swinid);
if(swin) {
+ int width, height;
+
swin->winrct= *winrct;
/* CRITICAL, this clamping ensures that
@@ -222,6 +226,11 @@ void wm_subwindow_position(wmWindow *win, int swinid, rcti *winrct)
swin->winrct.xmax= win->sizex-1;
if (swin->winrct.ymax >= win->sizey)
swin->winrct.ymax= win->sizey-1;
+
+ /* extra service */
+ wm_subwindow_set(win, swinid);
+ wm_subwindow_getsize(win, &width, &height);
+ wmOrtho2(win, -0.375, (float)width-0.375, -0.375, (float)height-0.375);
}
else {
printf("wm_subwindow_position: Internal error, bad winid: %d\n", swinid);
@@ -231,10 +240,6 @@ void wm_subwindow_position(wmWindow *win, int swinid, rcti *winrct)
/* ---------------- WM versions of OpenGL calls, using glBlah() syntax ------------------------ */
/* ----------------- exported in WM_api.h ------------------------------------------------------ */
-int glaGetOneInteger(int a)
-{
- return 0; // XXX
-}
void wmLoadMatrix(wmWindow *win, float mat[][4])
{
@@ -473,8 +478,8 @@ void myswapbuffers(void) /* XXX */
sa= G.curscreen->areabase.first;
while(sa) {
- if(sa->win_swap==WIN_BACK_OK) sa->win_swap= WIN_FRONT_OK;
- if(sa->head_swap==WIN_BACK_OK) sa->head_swap= WIN_FRONT_OK;
+// if(sa->win_swap==WIN_BACK_OK) sa->win_swap= WIN_FRONT_OK;
+// if(sa->head_swap==WIN_BACK_OK) sa->head_swap= WIN_FRONT_OK;
sa= sa->next;
}
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index cab852e1763..a802efffb96 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -46,11 +46,14 @@
#include "BIF_gl.h"
#include "WM_api.h"
+#include "WM_types.h"
#include "wm.h"
#include "wm_window.h"
#include "wm_subwindow.h"
#include "wm_event_system.h"
+#include "ED_screen.h"
+
/* the global to talk to ghost */
GHOST_SystemHandle g_system= NULL;
@@ -140,13 +143,17 @@ wmWindow *wm_window_new(bContext *C, bScreen *screen)
/* part of wm_window.c api */
wmWindow *wm_window_copy(bContext *C, wmWindow *winorig)
{
- wmWindow *win= wm_window_new(C, winorig->screen); /* XXX need copy */
+ wmWindow *win= wm_window_new(C, winorig->screen);
win->posx= winorig->posx+10;
win->posy= winorig->posy;
win->sizex= winorig->sizex;
win->sizey= winorig->sizey;
+ win->screen= ED_screen_duplicate(win, win->screen);
+ win->screen->do_refresh= 1;
+ win->screen->do_draw= 1;
+
return win;
}
@@ -182,7 +189,7 @@ static void wm_window_close(bContext *C, wmWindow *win)
if(C->wm->windows.first==NULL)
WM_exit(C);
}
-
+
static void wm_window_open(wmWindowManager *wm, char *title, wmWindow *win)
{
GHOST_WindowHandle ghostwin;
@@ -217,16 +224,18 @@ static void wm_window_open(wmWindowManager *wm, char *title, wmWindow *win)
if(win->eventstate==NULL)
win->eventstate= MEM_callocN(sizeof(wmEvent), "window event state");
- /* add keymap handler (1 for all keys in map!) */
+ /* add keymap handlers (1 for all keys in map!) */
WM_event_add_keymap_handler(&wm->windowkeymap, &win->handlers);
+ WM_event_add_keymap_handler(&wm->screenkeymap, &win->handlers);
/* until screens get drawn, make it nice grey */
glClearColor(.55, .55, .55, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
wm_window_swap_buffers(win);
+
+ /* standard state vars for window */
+ glEnable(GL_SCISSOR_TEST);
}
-
-
}
/* for wmWindows without ghostwin, open these and clear */
@@ -300,13 +309,13 @@ void wm_window_make_drawable(bContext *C, wmWindow *win)
C->wm->windrawable= win;
C->window= win;
C->screen= win->screen;
-
+ printf("set drawable %d\n", win->winid);
GHOST_ActivateWindowDrawingContext(win->ghostwin);
}
}
/* called by ghost, here we handle events for windows themselves or send to event system */
-int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private)
+static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private)
{
bContext *C= private;
GHOST_TEventType type= GHOST_GetEventType(evt);
@@ -346,7 +355,7 @@ int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private)
win->active= 1;
// window_handle(win, INPUTCHANGE, win->active);
- /* bad ghost support for modifier keys... */
+ /* bad ghost support for modifier keys... so on activate we set the modifiers again */
kdata.ascii= 0;
if (win->eventstate->shift && !query_qual('s')) {
kdata.key= GHOST_kKeyLeftShift;
@@ -372,6 +381,7 @@ int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private)
win->eventstate->x= cx;
win->eventstate->y= (win->sizey-1) - cy;
+ wm_window_make_drawable(C, win);
break;
}
case GHOST_kEventWindowClose: {
@@ -379,14 +389,17 @@ int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private)
break;
}
case GHOST_kEventWindowUpdate: {
-// window_handle(win, REDRAW, 1);
+ printf("ghost redraw\n");
+
+ wm_window_make_drawable(C, win);
+ WM_event_add_notifier(C->wm, win, 0, WM_NOTE_REDRAW, 0);
+
break;
}
case GHOST_kEventWindowSize:
case GHOST_kEventWindowMove: {
GHOST_RectangleHandle client_rect;
int l, t, r, b, scr_w, scr_h;
- GHOST_TWindowState state;
client_rect= GHOST_GetClientBounds(win->ghostwin);
GHOST_GetRectangle(client_rect, &l, &t, &r, &b);
@@ -399,24 +412,34 @@ int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private)
win->posx= l;
win->posy= scr_h - t - win->sizey;
- if(type!=GHOST_kEventWindowSize)
- printf("win move event pos %d %d size %d %d\n", win->posx, win->posy, win->sizex, win->sizey);
-
- state = GHOST_GetWindowState(win->ghostwin);
-
- if(state==GHOST_kWindowStateNormal)
- printf("window state: normal\n");
- else if(state==GHOST_kWindowStateMinimized)
- printf("window state: minimized\n");
- else if(state==GHOST_kWindowStateMaximized)
- printf("window state: maximized\n");
- else if(state==GHOST_kWindowStateFullScreen)
- printf("window state: fullscreen\n");
+ /* debug prints */
+ if(0) {
+ GHOST_TWindowState state;
+ state = GHOST_GetWindowState(win->ghostwin);
+
+ if(state==GHOST_kWindowStateNormal)
+ printf("window state: normal\n");
+ else if(state==GHOST_kWindowStateMinimized)
+ printf("window state: minimized\n");
+ else if(state==GHOST_kWindowStateMaximized)
+ printf("window state: maximized\n");
+ else if(state==GHOST_kWindowStateFullScreen)
+ printf("window state: fullscreen\n");
+
+ if(type!=GHOST_kEventWindowSize)
+ printf("win move event pos %d %d size %d %d\n", win->posx, win->posy, win->sizex, win->sizey);
+
+ }
+
+ wm_window_make_drawable(C, win);
+ WM_event_add_notifier(C->wm, win, 0, WM_NOTE_REFRESH, 0);
+ WM_event_add_notifier(C->wm, win, 0, WM_NOTE_REDRAW, 0);
-// window_handle(win, RESHAPE, 1);
break;
}
default:
+ if(type==GHOST_kEventKeyDown)
+ WM_event_add_notifier(C->wm, win, 0, WM_NOTE_REDRAW, 0);
wm_event_add_ghostevent(win, type, data);
break;
}
diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h
index 0450adc1268..8269dd48533 100644
--- a/source/blender/windowmanager/wm.h
+++ b/source/blender/windowmanager/wm.h
@@ -33,6 +33,9 @@ extern void wm_close_and_free_all(bContext *C, ListBase *);
extern void wm_add_default(bContext *C);
extern void wm_check(bContext *C);
+
+ /* register to windowmanager for redo or macro */
+void wm_operator_register(wmWindowManager *wm, wmOperator *ot);
/* wm_operator.c, for init/exit */
void wm_operatortype_free(void);
diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h
index 9b918ce3cf6..54cf45db61d 100644
--- a/source/blender/windowmanager/wm_event_system.h
+++ b/source/blender/windowmanager/wm_event_system.h
@@ -33,31 +33,6 @@
#define WM_HANDLER_BREAK 1
-/* each event should have full modifier state */
-/* event comes from eventmanager and from keymap */
-typedef struct wmEvent {
- struct wmEvent *next, *prev;
-
- short type; /* event code itself (short, is also in keymap) */
- short val; /* press, release, scrollvalue */
- short x, y; /* mouse pointer position */
- short unicode; /* future, ghost? */
- char ascii; /* from ghost */
- char pad1;
-
- /* modifier states */
- short shift, ctrl, alt, oskey; /* oskey is apple or windowskey, value denotes order of pressed */
- short keymodifier; /* rawkey modifier */
-
- /* keymap item, set by handler (weak?) */
- const char *keymap_idname;
-
- /* custom data */
- short custom; /* custom data type, stylus, 6dof, see wm_event_types.h */
- void *customdata; /* ascii, unicode, mouse coords, angles, vectors, dragdrop info */
-
-} wmEvent;
-
/* wmKeyMap is in DNA_windowmanager.h, it's savable */
typedef struct wmEventHandler {
@@ -73,10 +48,13 @@ typedef struct wmEventHandler {
} wmEventHandler;
+
/* handler flag */
/* after this handler all others are ignored */
#define WM_HANDLER_BLOCKING 1
+
+
/* custom types for handlers, for signalling, freeing */
enum {
WM_HANDLER_DEFAULT,
@@ -84,14 +62,17 @@ enum {
};
-void wm_event_free_all (wmWindow *win);
-wmEvent *wm_event_next (wmWindow *win);
-void wm_event_free_handlers (ListBase *lb);
+void wm_event_free_all (wmWindow *win);
+wmEvent *wm_event_next (wmWindow *win);
+void wm_event_free_handlers (ListBase *lb);
/* goes over entire hierarchy: events -> window -> screen -> area -> region */
-void wm_event_do_handlers(bContext *C);
+void wm_event_do_handlers (bContext *C);
+
+void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata);
-void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata);
+void wm_event_do_notifiers (bContext *C);
+void wm_draw_update (bContext *C);
#endif /* WM_EVENT_SYSTEM_H */
diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h
index ccd1c645297..c6c9046d79e 100644
--- a/source/blender/windowmanager/wm_event_types.h
+++ b/source/blender/windowmanager/wm_event_types.h
@@ -20,8 +20,6 @@
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.
*
- * The Original Code is: all of this file.
- *
* Contributor(s): Blender Foundation
*
* ***** END GPL LICENSE BLOCK *****