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:
authorCampbell Barton <ideasman42@gmail.com>2009-06-14 00:58:43 +0400
committerCampbell Barton <ideasman42@gmail.com>2009-06-14 00:58:43 +0400
commit646d4041e2c3461f4494be126172cf10472914b7 (patch)
tree413a687276b3893dd22b788824c14a077067ff74 /source/blender
parent611e2f484c1d3c1c07abbe289a23623e714c700f (diff)
BGE events, not sure every event works as it should but keyboard looking and mouse focus seems to work ok.
Tested some basic logic brick blend files that use key input which run properly.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c35
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c2
-rw-r--r--source/blender/windowmanager/intern/wm_window.c6
-rw-r--r--source/blender/windowmanager/wm_event_system.h2
-rw-r--r--source/blender/windowmanager/wm_window.h1
5 files changed, 31 insertions, 15 deletions
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index eaa23061322..2db5f2c97fd 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -1382,21 +1382,29 @@ void VIEW3D_OT_localview(wmOperatorType *ot)
ot->poll= ED_operator_view3d_active;
}
-
-static void SaveState(void)
+static ListBase queue_back;
+static void SaveState(bContext *C)
{
+ wmWindow *win= CTX_wm_window(C);
+
glPushAttrib(GL_ALL_ATTRIB_BITS);
GPU_state_init();
if(G.f & G_TEXTUREPAINT)
GPU_paint_set_mipmap(1);
-
+
+ queue_back= win->queue;
+
+ win->queue.first= win->queue.last= NULL;
+
//XXX waitcursor(1);
}
-static void RestoreState(void)
+static void RestoreState(bContext *C)
{
+ wmWindow *win= CTX_wm_window(C);
+
if(G.f & G_TEXTUREPAINT)
GPU_paint_set_mipmap(0);
@@ -1407,34 +1415,33 @@ static void RestoreState(void)
//XXX reset_slowparents();
//XXX waitcursor(0);
//XXX G.qual= 0;
+
+ win->queue= queue_back;
+
glPopAttrib();
}
/* maybe we need this defined somewhere else */
-extern void StartKetsjiShell(wmWindow *win, ScrArea *area, struct ARegion *ar, struct Scene *scene, struct Main* maggie,int always_use_expand_framing);
+extern void StartKetsjiShell(struct bContext *C,int always_use_expand_framing);
static int game_engine_exec(bContext *C, wmOperator *unused)
{
- View3D *v3d= CTX_wm_view3d(C);
- ScrArea *sa= CTX_wm_area(C); // curarea
- ARegion *ar= CTX_wm_region(C);
- Scene *sc, *startscene = CTX_data_scene(C);
+ Scene *startscene = CTX_data_scene(C);
#if GAMEBLENDER == 1
- SaveState();
- StartKetsjiShell(CTX_wm_window(C), sa, ar, startscene, CTX_data_main(C), 1);
- RestoreState();
+ SaveState(C);
+ StartKetsjiShell(C, 1);
+ RestoreState(C);
//XXX restore_all_scene_cfra(scene_cfra_store);
set_scene_bg(startscene);
//XXX scene_update_for_newframe(G.scene, G.scene->lay);
- ED_area_tag_redraw(CTX_wm_area(C));
#else
printf("GameEngine Disabled\n");
#endif
-
+ ED_area_tag_redraw(CTX_wm_area(C));
return OPERATOR_FINISHED;
}
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index f5c8e535002..ea6a65859e5 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -76,7 +76,7 @@ void wm_event_add(wmWindow *win, wmEvent *event_to_add)
BLI_addtail(&win->queue, event);
}
-static void wm_event_free(wmEvent *event)
+void wm_event_free(wmEvent *event)
{
if(event->customdata && event->customdatafree)
MEM_freeN(event->customdata);
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index cb6bcb41366..2d320458543 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -595,6 +595,12 @@ void wm_window_process_events(const bContext *C)
PIL_sleep_ms(5);
}
+void wm_window_process_events_nosleep(const bContext *C)
+{
+ if(GHOST_ProcessEvents(g_system, 0))
+ GHOST_DispatchEvents(g_system);
+}
+
/* exported as handle callback to bke blender.c */
void wm_window_testbreak(void)
{
diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h
index 99853c77a55..9a3bba9af1d 100644
--- a/source/blender/windowmanager/wm_event_system.h
+++ b/source/blender/windowmanager/wm_event_system.h
@@ -82,6 +82,8 @@ enum {
/* wm_event_system.c */
void wm_event_add (wmWindow *win, wmEvent *event_to_add);
void wm_event_free_all (wmWindow *win);
+void wm_event_free (wmEvent *event);
+
/* goes over entire hierarchy: events -> window -> screen -> area -> region */
void wm_event_do_handlers (bContext *C);
diff --git a/source/blender/windowmanager/wm_window.h b/source/blender/windowmanager/wm_window.h
index 7bf08617fb6..45fa9bf6cf7 100644
--- a/source/blender/windowmanager/wm_window.h
+++ b/source/blender/windowmanager/wm_window.h
@@ -40,6 +40,7 @@ void wm_window_free (bContext *C, wmWindow *win);
void wm_window_title (wmWindowManager *wm, wmWindow *win);
void wm_window_add_ghostwindows (wmWindowManager *wm);
void wm_window_process_events (const bContext *C);
+void wm_window_process_events_nosleep(const bContext *C);
void wm_window_make_drawable(bContext *C, wmWindow *win);