diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2015-04-02 23:54:54 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2015-04-02 23:54:54 +0300 |
commit | bbf2305155003e80f319c42eeca28f136236c8da (patch) | |
tree | 6ace6826bae4f8884d4ee4a19b3f08551bbfd636 | |
parent | 7fc167f10f35468a9a889b99ad5123a7d8945105 (diff) |
From review: sorted API/cleanups
-rw-r--r-- | source/blender/editors/include/ED_screen.h | 1 | ||||
-rw-r--r-- | source/blender/editors/screen/screen_edit.c | 82 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_operators.c | 5 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_stereo.c | 117 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_subwindow.c | 1 | ||||
-rw-r--r-- | source/blender/windowmanager/wm.h | 1 |
6 files changed, 98 insertions, 109 deletions
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index b4f7d806079..90b0b3510bc 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -112,6 +112,7 @@ void ED_screen_full_prevspace(struct bContext *C, ScrArea *sa); void ED_screen_full_restore(struct bContext *C, ScrArea *sa); struct ScrArea *ED_screen_state_toggle(struct bContext *C, struct wmWindow *win, struct ScrArea *sa, const short state); void ED_screens_header_tools_menu_create(struct bContext *C, struct uiLayout *layout, void *arg); +bool ED_screen_stereo3d_required(struct bScreen *screen); /* anim */ void ED_update_for_newframe(struct Main *bmain, struct Scene *scene, int mute); diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index e1c414b0031..3d76070f197 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -59,6 +59,7 @@ #include "ED_screen.h" #include "ED_screen_types.h" #include "ED_clip.h" +#include "ED_node.h" #include "ED_render.h" #include "UI_interface.h" @@ -2122,4 +2123,85 @@ void ED_update_for_newframe(Main *bmain, Scene *scene, int UNUSED(mute)) } +/* + * return true if any active area requires to see in 3D + */ +bool ED_screen_stereo3d_required(bScreen *screen) +{ + ScrArea *sa; + Scene *sce = screen->scene; + const bool is_multiview = (sce->r.scemode & R_MULTIVIEW) != 0; + + for (sa = screen->areabase.first; sa; sa = sa->next) { + switch (sa->spacetype) { + case SPACE_VIEW3D: + { + View3D *v3d; + + if (!is_multiview) + continue; + + v3d = sa->spacedata.first; + if (v3d->camera && v3d->stereo3d_camera == STEREO_3D_ID) { + ARegion *ar; + for (ar = sa->regionbase.first; ar; ar = ar->next) { + if (ar->regiondata && ar->regiontype == RGN_TYPE_WINDOW) { + RegionView3D *rv3d = ar->regiondata; + if (rv3d->persp == RV3D_CAMOB) { + return true; + } + } + } + } + break; + } + case SPACE_IMAGE: + { + SpaceImage *sima; + + /* images should always show in stereo, even if + * the file doesn't have views enabled */ + sima = sa->spacedata.first; + if (sima->image && (sima->image->flag & IMA_IS_STEREO) && + (sima->iuser.flag & IMA_SHOW_STEREO)) + { + return true; + } + break; + } + case SPACE_NODE: + { + SpaceNode *snode; + + if (!is_multiview) + continue; + snode = sa->spacedata.first; + if ((snode->flag & SNODE_BACKDRAW) && ED_node_is_compositor(snode)) { + return true; + } + break; + } + case SPACE_SEQ: + { + SpaceSeq *sseq; + + if (!is_multiview) + continue; + + sseq = sa->spacedata.first; + if (ELEM(sseq->view, SEQ_VIEW_PREVIEW, SEQ_VIEW_SEQUENCE_PREVIEW)) { + return true; + } + + if (sseq->draw_flag & SEQ_DRAW_BACKDROP) { + return true; + } + + break; + } + } + } + + return false; +} diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 5ff2936a4c7..398017c2aa6 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -4838,7 +4838,7 @@ static void operatortype_ghash_free_cb(wmOperatorType *ot) /* ******************************************************* */ /* toggle 3D for current window, turning it fullscreen if needed */ -static void WM_OT_set_stereo3d(wmOperatorType *ot) +static void WM_OT_stereo3d_set(wmOperatorType *ot) { PropertyRNA *prop; @@ -4850,7 +4850,6 @@ static void WM_OT_set_stereo3d(wmOperatorType *ot) ot->invoke = wm_set_stereo3d_invoke; ot->poll = WM_operator_winactive; ot->ui = wm_set_stereo3d_draw; - ot->check = wm_set_stereo3d_check; ot->cancel = wm_set_stereo3d_cancel; prop = RNA_def_enum(ot->srna, "display_mode", stereo3d_display_items, S3D_DISPLAY_ANAGLYPH, "Display Mode", ""); @@ -4909,7 +4908,7 @@ void wm_operatortype_init(void) WM_operatortype_append(WM_OT_call_menu); WM_operatortype_append(WM_OT_call_menu_pie); WM_operatortype_append(WM_OT_radial_control); - WM_operatortype_append(WM_OT_set_stereo3d); + WM_operatortype_append(WM_OT_stereo3d_set); #if defined(WIN32) WM_operatortype_append(WM_OT_console_toggle); #endif diff --git a/source/blender/windowmanager/intern/wm_stereo.c b/source/blender/windowmanager/intern/wm_stereo.c index d991541805f..7dd951986a6 100644 --- a/source/blender/windowmanager/intern/wm_stereo.c +++ b/source/blender/windowmanager/intern/wm_stereo.c @@ -4,7 +4,7 @@ * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -51,7 +51,6 @@ #include "GHOST_C-api.h" -#include "ED_node.h" #include "ED_screen.h" #include "GPU_glew.h" @@ -87,7 +86,7 @@ static GLuint right_interlace_mask[32]; static enum eStereo3dInterlaceType interlace_prev_type = -1; static char interlace_prev_swap = -1; -static void wm_interlace_create_masks(wmWindow *win) +static void wm_interlace_masks_create(wmWindow *win) { GLuint pattern; char i; @@ -141,7 +140,7 @@ static void wm_method_draw_stereo_interlace(wmWindow *win) wmDrawData *drawdata; int view; - wm_interlace_create_masks(win); + wm_interlace_masks_create(win); for (view = 0; view < 2; view ++) { drawdata = BLI_findlink(&win->drawdata, (view * 2) + 1); @@ -351,7 +350,7 @@ void wm_method_draw_stereo(const bContext *UNUSED(C), wmWindow *win) } } -static bool wm_stereo_need_fullscreen(eStereoDisplayMode stereo_display) +static bool wm_stereo_is_fullscreen_required(eStereoDisplayMode stereo_display) { return ELEM(stereo_display, S3D_DISPLAY_SIDEBYSIDE, @@ -359,98 +358,15 @@ static bool wm_stereo_need_fullscreen(eStereoDisplayMode stereo_display) S3D_DISPLAY_PAGEFLIP); } -/* - * return true if any active area requires to see in 3D - */ -static bool wm_stereo3d_required(bScreen *screen) -{ - ScrArea *sa; - Scene *sce = screen->scene; - const bool is_multiview = (sce->r.scemode & R_MULTIVIEW) != 0; - - for (sa = screen->areabase.first; sa; sa = sa->next) { - switch (sa->spacetype) { - case SPACE_VIEW3D: - { - View3D *v3d; - - if (!is_multiview) - continue; - - v3d = sa->spacedata.first; - if (v3d->camera && v3d->stereo3d_camera == STEREO_3D_ID) { - ARegion *ar; - for (ar = sa->regionbase.first; ar; ar = ar->next) { - if (ar->regiondata && ar->regiontype == RGN_TYPE_WINDOW) { - RegionView3D *rv3d = ar->regiondata; - if (rv3d->persp == RV3D_CAMOB) { - return true; - } - } - } - } - break; - } - case SPACE_IMAGE: - { - SpaceImage *sima; - - /* images should always show in stereo, even if - * the file doesn't have views enabled */ - sima = sa->spacedata.first; - if (sima->image && (sima->image->flag & IMA_IS_STEREO) && - (sima->iuser.flag & IMA_SHOW_STEREO)) - { - return true; - } - break; - } - case SPACE_NODE: - { - SpaceNode *snode; - - if (!is_multiview) - continue; - - snode = sa->spacedata.first; - if ((snode->flag & SNODE_BACKDRAW) && ED_node_is_compositor(snode)) { - return true; - } - break; - } - case SPACE_SEQ: - { - SpaceSeq *sseq; - - if (!is_multiview) - continue; - - sseq = sa->spacedata.first; - if (ELEM(sseq->view, SEQ_VIEW_PREVIEW, SEQ_VIEW_SEQUENCE_PREVIEW)) { - return true; - } - - if (sseq->draw_flag & SEQ_DRAW_BACKDROP) { - return true; - } - - break; - } - } - } - - return false; -} - -bool WM_stereo_enabled(wmWindow *win, bool only_fullscreen_test) +bool WM_stereo_enabled(wmWindow *win, bool skip_stereo_check) { bScreen *screen = win->screen; - if ((only_fullscreen_test == false) && (wm_stereo3d_required(screen) == false)) + if ((skip_stereo_check == false) && (ED_screen_stereo3d_required(screen) == false)) return false; - if (wm_stereo_need_fullscreen(win->stereo3d_format->display_mode)) - return (GHOST_GetWindowState(win->ghostwin) == GHOST_kWindowStateFullScreen); + if (wm_stereo_is_fullscreen_required(win->stereo3d_format->display_mode)) + return WM_window_is_fullscreen(win); return true; } @@ -521,14 +437,11 @@ int wm_set_stereo3d_exec(bContext *C, wmOperator *op) { wmWindowManager *wm = CTX_wm_manager(C); wmWindow *win = CTX_wm_window(C); - GHOST_TWindowState state; + const bool is_fullscreen = WM_window_is_fullscreen(win); if (G.background) return OPERATOR_CANCELLED; - /* FullScreen or Normal */ - state = GHOST_GetWindowState(win->ghostwin); - /* pagelfip requires a new window to be created with the proper OS flags */ if (win->stereo3d_format->display_mode == S3D_DISPLAY_PAGEFLIP) { if (wm_window_duplicate_exec(C, op) == OPERATOR_FINISHED) { @@ -542,9 +455,10 @@ int wm_set_stereo3d_exec(bContext *C, wmOperator *op) } } - if (wm_stereo_need_fullscreen(win->stereo3d_format->display_mode)) { - if (state != GHOST_kWindowStateFullScreen) - GHOST_SetWindowState(win->ghostwin, GHOST_kWindowStateFullScreen); + if (wm_stereo_is_fullscreen_required(win->stereo3d_format->display_mode)) { + if (!is_fullscreen) { + wm_window_fullscreen_toggle_exec(C, op); + } } if (op->customdata) { @@ -605,11 +519,6 @@ void wm_set_stereo3d_draw(bContext *C, wmOperator *op) } } -bool wm_set_stereo3d_check(bContext *UNUSED(C), wmOperator *UNUSED(op)) -{ - return true; -} - void wm_set_stereo3d_cancel(bContext *C, wmOperator *op) { Stereo3dData *s3dd = op->customdata; diff --git a/source/blender/windowmanager/intern/wm_subwindow.c b/source/blender/windowmanager/intern/wm_subwindow.c index f2df98866fb..4ce2415e310 100644 --- a/source/blender/windowmanager/intern/wm_subwindow.c +++ b/source/blender/windowmanager/intern/wm_subwindow.c @@ -40,7 +40,6 @@ #include "DNA_windowmanager_types.h" #include "DNA_screen_types.h" -#include "DNA_scene_types.h" #include "BLI_blenlib.h" #include "BLI_math.h" diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h index 9125ca8718c..305965498a1 100644 --- a/source/blender/windowmanager/wm.h +++ b/source/blender/windowmanager/wm.h @@ -81,7 +81,6 @@ void wm_method_draw_stereo(const bContext *C, wmWindow *win); int wm_set_stereo3d_exec(bContext *C, wmOperator *op); int wm_set_stereo3d_invoke(bContext *C, wmOperator *op, const wmEvent *event); void wm_set_stereo3d_draw(bContext *C, wmOperator *op); -bool wm_set_stereo3d_check(bContext *C, wmOperator *op); void wm_set_stereo3d_cancel(bContext *C, wmOperator *op); /* init operator properties */ |