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:
authorJoseph Eagar <joeedh@gmail.com>2009-10-23 03:22:05 +0400
committerJoseph Eagar <joeedh@gmail.com>2009-10-23 03:22:05 +0400
commit8f788c64db587e74079d812dbcea40c2bd4b91ff (patch)
treec767e8318a9e7aded16be6cab2042f3ea11e7912 /source/blender/editors/screen
parent36bb566d4e6e06e08d782d610d60d755cbda2396 (diff)
merge with trunk/2.5 at r23876
[[Split portion of a mixed commit.]]
Diffstat (limited to 'source/blender/editors/screen')
-rw-r--r--source/blender/editors/screen/SConscript7
-rw-r--r--source/blender/editors/screen/area.c49
-rw-r--r--source/blender/editors/screen/glutil.c12
-rw-r--r--source/blender/editors/screen/screen_context.c2
-rw-r--r--source/blender/editors/screen/screen_edit.c2
-rw-r--r--source/blender/editors/screen/screen_ops.c197
-rw-r--r--source/blender/editors/screen/screendump.c2
7 files changed, 177 insertions, 94 deletions
diff --git a/source/blender/editors/screen/SConscript b/source/blender/editors/screen/SConscript
index 00a5f08b70d..97ce70ad71d 100644
--- a/source/blender/editors/screen/SConscript
+++ b/source/blender/editors/screen/SConscript
@@ -15,4 +15,11 @@ if not env['WITH_BF_PYTHON']:
if env['WITH_BF_OPENEXR']:
defs += ' WITH_OPENEXR'
+if env['OURPLATFORM'] == 'linux2':
+ cflags='-pthread'
+ incs += ' ../../../extern/binreloc/include'
+
+if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
+ incs += ' ' + env['BF_PTHREADS_INC']
+
env.BlenderLib ( 'bf_editors_screen', sources, Split(incs), Split(defs), libtype=['core'], priority=[105] )
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 8940f560677..428f17886ec 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -193,7 +193,7 @@ static void area_draw_azone(short x1, short y1, short x2, short y2)
static void region_draw_azone(ScrArea *sa, AZone *az)
{
- GLUquadricObj *qobj = gluNewQuadric();
+ GLUquadricObj *qobj = NULL;
short midx = az->x1 + (az->x2 - az->x1)/2;
short midy = az->y1 + (az->y2 - az->y1)/2;
@@ -202,6 +202,8 @@ static void region_draw_azone(ScrArea *sa, AZone *az)
/* only display action zone icons when the region is hidden */
if (!(az->ar->flag & RGN_FLAG_HIDDEN)) return;
+ qobj = gluNewQuadric();
+
glPushMatrix();
glTranslatef(midx, midy, 0.);
@@ -824,24 +826,24 @@ static void ed_default_handlers(wmWindowManager *wm, ListBase *handlers, int fla
UI_add_region_handlers(handlers);
}
if(flag & ED_KEYMAP_VIEW2D) {
- ListBase *keymap= WM_keymap_listbase(wm, "View2D", 0, 0);
+ wmKeyMap *keymap= WM_keymap_find(wm->defaultconf, "View2D", 0, 0);
WM_event_add_keymap_handler(handlers, keymap);
}
if(flag & ED_KEYMAP_MARKERS) {
- ListBase *keymap= WM_keymap_listbase(wm, "Markers", 0, 0);
+ wmKeyMap *keymap= WM_keymap_find(wm->defaultconf, "Markers", 0, 0);
WM_event_add_keymap_handler(handlers, keymap);
// XXX need boundbox check urgently!!!
}
if(flag & ED_KEYMAP_ANIMATION) {
- ListBase *keymap= WM_keymap_listbase(wm, "Animation", 0, 0);
+ wmKeyMap *keymap= WM_keymap_find(wm->defaultconf, "Animation", 0, 0);
WM_event_add_keymap_handler(handlers, keymap);
}
if(flag & ED_KEYMAP_FRAMES) {
- ListBase *keymap= WM_keymap_listbase(wm, "Frames", 0, 0);
+ wmKeyMap *keymap= WM_keymap_find(wm->defaultconf, "Frames", 0, 0);
WM_event_add_keymap_handler(handlers, keymap);
}
if(flag & ED_KEYMAP_GPENCIL) {
- ListBase *keymap= WM_keymap_listbase(wm, "Grease Pencil", 0, 0);
+ wmKeyMap *keymap= WM_keymap_find(wm->defaultconf, "Grease Pencil", 0, 0);
WM_event_add_keymap_handler(handlers, keymap);
}
}
@@ -958,17 +960,22 @@ void area_copy_data(ScrArea *sa1, ScrArea *sa2, int swap_space)
/* Note; SPACE_EMPTY is possible on new screens */
/* regions */
- if(swap_space<2) {
- st= BKE_spacetype_from_id(sa1->spacetype);
- for(ar= sa1->regionbase.first; ar; ar= ar->next)
- BKE_area_region_free(st, ar);
- BLI_freelistN(&sa1->regionbase);
+ if(swap_space == 1) {
+ SWAP(ListBase, sa1->regionbase, sa2->regionbase);
}
-
- st= BKE_spacetype_from_id(sa2->spacetype);
- for(ar= sa2->regionbase.first; ar; ar= ar->next) {
- ARegion *newar= BKE_area_region_copy(st, ar);
- BLI_addtail(&sa1->regionbase, newar);
+ else {
+ if(swap_space<2) {
+ st= BKE_spacetype_from_id(sa1->spacetype);
+ for(ar= sa1->regionbase.first; ar; ar= ar->next)
+ BKE_area_region_free(st, ar);
+ BLI_freelistN(&sa1->regionbase);
+ }
+
+ st= BKE_spacetype_from_id(sa2->spacetype);
+ for(ar= sa2->regionbase.first; ar; ar= ar->next) {
+ ARegion *newar= BKE_area_region_copy(st, ar);
+ BLI_addtail(&sa1->regionbase, newar);
+ }
}
}
@@ -1254,7 +1261,7 @@ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *contex
pt->draw_header(C, panel);
- uiBlockLayoutResolve(C, block, &xco, &yco);
+ uiBlockLayoutResolve(block, &xco, &yco);
panel->labelofs= xco - triangle;
panel->layout= NULL;
}
@@ -1265,7 +1272,7 @@ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *contex
pt->draw(C, panel);
- uiBlockLayoutResolve(C, block, &xco, &yco);
+ uiBlockLayoutResolve(block, &xco, &yco);
panel->layout= NULL;
yco -= 2*style->panelspace;
@@ -1353,7 +1360,7 @@ void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *contex
void ED_region_panels_init(wmWindowManager *wm, ARegion *ar)
{
- ListBase *keymap;
+ wmKeyMap *keymap;
// XXX quick hacks for files saved with 2.5 already (i.e. the builtin defaults file)
// scrollbars for button regions
@@ -1366,7 +1373,7 @@ void ED_region_panels_init(wmWindowManager *wm, ARegion *ar)
UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_PANELS_UI, ar->winx, ar->winy);
- keymap= WM_keymap_listbase(wm, "View2D Buttons List", 0, 0);
+ keymap= WM_keymap_find(wm->defaultconf, "View2D Buttons List", 0, 0);
WM_event_add_keymap_handler(&ar->handlers, keymap);
}
@@ -1411,7 +1418,7 @@ void ED_region_header(const bContext *C, ARegion *ar)
maxco= xco;
}
- uiBlockLayoutResolve(C, block, &xco, &yco);
+ uiBlockLayoutResolve(block, &xco, &yco);
/* for view2d */
if(xco > maxco)
diff --git a/source/blender/editors/screen/glutil.c b/source/blender/editors/screen/glutil.c
index 5312ca26906..1445c6b5cf8 100644
--- a/source/blender/editors/screen/glutil.c
+++ b/source/blender/editors/screen/glutil.c
@@ -720,6 +720,18 @@ void bglBegin(int mode)
}
}
+int bglPointHack() {
+ float value[4];
+ int pointhack;
+ glGetFloatv(GL_POINT_SIZE_RANGE, value);
+ if(value[1]<2.0) {
+ glGetFloatv(GL_POINT_SIZE, value);
+ pointhack= floor(value[0]+0.5);
+ if(pointhack>4) pointhack= 4;
+ return pointhack;
+ }
+ return 0;
+}
void bglVertex3fv(float *vec)
{
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index 17c51a7b7d3..e573ef06247 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -52,7 +52,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
if(CTX_data_dir(member)) {
static const char *dir[] = {
"scene", "selected_objects", "selected_bases",
- "selected_editable_objects", "selected_editable_bases"
+ "selected_editable_objects", "selected_editable_bases",
"active_base", "active_object", "edit_object",
"sculpt_object", "vertex_paint_object", "weight_paint_object",
"texture_paint_object", "brush", "particle_edit_object", NULL};
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 5d938ba36cc..2cc5500c3ef 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -1140,7 +1140,7 @@ static void screen_cursor_set(wmWindow *win, wmEvent *event)
if(az->type==AZONE_AREA)
WM_cursor_set(win, CURSOR_EDIT);
else if(az->type==AZONE_REGION) {
- if(az->x1==az->x2)
+ if(az->edge == 'l' || az->edge == 'r')
WM_cursor_set(win, CURSOR_X_MOVE);
else
WM_cursor_set(win, CURSOR_Y_MOVE);
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 5a0e218cc49..fe29b574cf0 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -448,7 +448,7 @@ static int actionzone_invoke(bContext *C, wmOperator *op, wmEvent *event)
}
else {
/* add modal handler */
- WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
+ WM_event_add_modal_handler(C, op);
return OPERATOR_RUNNING_MODAL;
}
@@ -504,6 +504,7 @@ static void SCREEN_OT_actionzone(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Handle area action zones";
+ ot->description= "Handle area action zones for mouse actions/gestures.";
ot->idname= "SCREEN_OT_actionzone";
ot->invoke= actionzone_invoke;
@@ -580,7 +581,7 @@ static int area_swap_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* add modal handler */
WM_cursor_modal(CTX_wm_window(C), BC_SWAPAREA_CURSOR);
- WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
+ WM_event_add_modal_handler(C, op);
return OPERATOR_RUNNING_MODAL;
@@ -596,7 +597,7 @@ static int area_swap_modal(bContext *C, wmOperator *op, wmEvent *event)
sad->sa2= screen_areahascursor(CTX_wm_screen(C), event->x, event->y);
break;
case LEFTMOUSE: /* release LMB */
- if(event->val==0) {
+ if(event->val==KM_RELEASE) {
if(!sad->sa2 || sad->sa1 == sad->sa2) {
return area_swap_cancel(C, op);
@@ -620,6 +621,7 @@ static int area_swap_modal(bContext *C, wmOperator *op, wmEvent *event)
static void SCREEN_OT_area_swap(wmOperatorType *ot)
{
ot->name= "Swap areas";
+ ot->description= "Swap selected areas screen positions.";
ot->idname= "SCREEN_OT_area_swap";
ot->invoke= area_swap_invoke;
@@ -684,6 +686,7 @@ static int area_dupli_invoke(bContext *C, wmOperator *op, wmEvent *event)
static void SCREEN_OT_area_dupli(wmOperatorType *ot)
{
ot->name= "Duplicate Area into New Window";
+ ot->description= "Duplicate selected area into new window.";
ot->idname= "SCREEN_OT_area_dupli";
ot->invoke= area_dupli_invoke;
@@ -862,7 +865,7 @@ static int area_move_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_PASS_THROUGH;
/* add temp handler */
- WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
+ WM_event_add_modal_handler(C, op);
return OPERATOR_RUNNING_MODAL;
}
@@ -923,6 +926,7 @@ static void SCREEN_OT_area_move(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Move area edges";
+ ot->description= "Move selected area edges.";
ot->idname= "SCREEN_OT_area_move";
ot->exec= area_move_exec;
@@ -1152,7 +1156,7 @@ static int area_split_invoke(bContext *C, wmOperator *op, wmEvent *event)
area_move_set_limits(CTX_wm_screen(C), dir, &sd->bigger, &sd->smaller);
/* add temp handler for edge move or cancel */
- WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
+ WM_event_add_modal_handler(C, op);
return OPERATOR_RUNNING_MODAL;
}
@@ -1217,7 +1221,7 @@ static int area_split_modal(bContext *C, wmOperator *op, wmEvent *event)
break;
case LEFTMOUSE:
- if(event->val==0) { /* mouse up */
+ if(event->val==KM_RELEASE) { /* mouse up */
area_split_exit(C, op);
return OPERATOR_FINISHED;
}
@@ -1238,6 +1242,7 @@ static EnumPropertyItem prop_direction_items[] = {
static void SCREEN_OT_area_split(wmOperatorType *ot)
{
ot->name = "Split area";
+ ot->description= "Split selected area into new windows.";
ot->idname = "SCREEN_OT_area_split";
ot->exec= area_split_exec;
@@ -1288,7 +1293,7 @@ static int region_scale_invoke(bContext *C, wmOperator *op, wmEvent *event)
rmd->origval= rmd->ar->type->minsizey;
/* add temp handler */
- WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
+ WM_event_add_modal_handler(C, op);
return OPERATOR_RUNNING_MODAL;
}
@@ -1337,12 +1342,14 @@ static int region_scale_modal(bContext *C, wmOperator *op, wmEvent *event)
break;
case LEFTMOUSE:
- if(event->val==0) {
+ if(event->val==KM_RELEASE) {
if(ABS(event->x - rmd->origx) < 2 && ABS(event->y - rmd->origy) < 2) {
- ED_region_toggle_hidden(C, rmd->ar);
- WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
- }
+ if(rmd->ar->flag & RGN_FLAG_HIDDEN) {
+ ED_region_toggle_hidden(C, rmd->ar);
+ WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
+ }
+ }
MEM_freeN(op->customdata);
op->customdata = NULL;
@@ -1362,6 +1369,7 @@ static void SCREEN_OT_region_scale(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Scale Region Size";
+ ot->description= "Scale selected area.";
ot->idname= "SCREEN_OT_region_scale";
ot->invoke= region_scale_invoke;
@@ -1422,6 +1430,7 @@ static int frame_jump_exec(bContext *C, wmOperator *op)
static void SCREEN_OT_frame_jump(wmOperatorType *ot)
{
ot->name = "Jump to Endpoint";
+ ot->description= "Jump to first/last frame in frame range.";
ot->idname = "SCREEN_OT_frame_jump";
ot->exec= frame_jump_exec;
@@ -1436,29 +1445,6 @@ static void SCREEN_OT_frame_jump(wmOperatorType *ot)
/* ************** jump to keyframe operator ***************************** */
-/* helper function - find actkeycolumn that occurs on cframe, or the nearest one if not found */
-// TODO: make this an API func?
-static ActKeyColumn *cfra_find_nearest_next_ak (ActKeyColumn *ak, float cframe, short next)
-{
- ActKeyColumn *akn= NULL;
-
- /* sanity checks */
- if (ak == NULL)
- return NULL;
-
- /* check if this is a match, or whether it is in some subtree */
- if (cframe < ak->cfra)
- akn= cfra_find_nearest_next_ak(ak->left, cframe, next);
- else if (cframe > ak->cfra)
- akn= cfra_find_nearest_next_ak(ak->right, cframe, next);
-
- /* if no match found (or found match), just use the current one */
- if (akn == NULL)
- return ak;
- else
- return akn;
-}
-
/* function to be called outside UI context, or for redo */
static int keyframe_jump_exec(bContext *C, wmOperator *op)
{
@@ -1510,6 +1496,7 @@ static int keyframe_jump_exec(bContext *C, wmOperator *op)
static void SCREEN_OT_keyframe_jump(wmOperatorType *ot)
{
ot->name = "Jump to Keyframe";
+ ot->description= "Jump to previous/next keyframe.";
ot->idname = "SCREEN_OT_keyframe_jump";
ot->exec= keyframe_jump_exec;
@@ -1566,6 +1553,7 @@ static int screen_set_exec(bContext *C, wmOperator *op)
static void SCREEN_OT_screen_set(wmOperatorType *ot)
{
ot->name = "Set Screen";
+ ot->description= "Cycle through available screens.";
ot->idname = "SCREEN_OT_screen_set";
ot->exec= screen_set_exec;
@@ -1587,7 +1575,8 @@ static int screen_full_area_exec(bContext *C, wmOperator *op)
static void SCREEN_OT_screen_full_area(wmOperatorType *ot)
{
- ot->name = "Toggle Make Area Fullscreen";
+ ot->name = "Toggle Full Screen";
+ ot->description= "Toggle display selected area as fullscreen.";
ot->idname = "SCREEN_OT_screen_full_area";
ot->exec= screen_full_area_exec;
@@ -1741,7 +1730,7 @@ static int area_join_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_PASS_THROUGH;
/* add temp handler */
- WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
+ WM_event_add_modal_handler(C, op);
return OPERATOR_RUNNING_MODAL;
}
@@ -1841,7 +1830,7 @@ static int area_join_modal(bContext *C, wmOperator *op, wmEvent *event)
}
break;
case LEFTMOUSE:
- if(event->val==0) {
+ if(event->val==KM_RELEASE) {
area_join_apply(C, op);
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
area_join_exit(C, op);
@@ -1861,6 +1850,7 @@ static void SCREEN_OT_area_join(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Join area";
+ ot->description= "Join selected areas into new window.";
ot->idname= "SCREEN_OT_area_join";
/* api callbacks */
@@ -1894,6 +1884,7 @@ static void SCREEN_OT_repeat_last(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Repeat Last";
+ ot->description= "Repeat last action.";
ot->idname= "SCREEN_OT_repeat_last";
/* api callbacks */
@@ -1946,6 +1937,7 @@ static void SCREEN_OT_repeat_history(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Repeat History";
+ ot->description= "Display menu for previous actions performed.";
ot->idname= "SCREEN_OT_repeat_history";
/* api callbacks */
@@ -1979,6 +1971,7 @@ static void SCREEN_OT_redo_last(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Redo Last";
+ ot->description= "Display menu for last action performed.";
ot->idname= "SCREEN_OT_redo_last";
/* api callbacks */
@@ -2022,6 +2015,7 @@ static void SCREEN_OT_region_split(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Split Region";
+ ot->description= "Split area by directional position.";
ot->idname= "SCREEN_OT_region_split";
/* api callbacks */
@@ -2110,7 +2104,8 @@ static int region_foursplit_exec(bContext *C, wmOperator *op)
static void SCREEN_OT_region_foursplit(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Split Region in 4 Parts";
+ ot->name= "Toggle Quad View";
+ ot->description= "Split selected area into camera, front, right & top views.";
ot->idname= "SCREEN_OT_region_foursplit";
/* api callbacks */
@@ -2189,6 +2184,10 @@ static int match_region_with_redraws(int spacetype, int regiontype, int redraws)
if(redraws & (TIME_SEQ|TIME_ALL_ANIM_WIN))
return 1;
break;
+ case SPACE_NODE:
+ if(redraws & (TIME_NODES))
+ return 1;
+ break;
case SPACE_IMAGE:
if(redraws & TIME_ALL_IMAGE_WIN)
return 1;
@@ -2221,7 +2220,7 @@ static int screen_animation_step(bContext *C, wmOperator *op, wmEvent *event)
/* sync, don't sync, or follow scene setting */
if(sad->flag & ANIMPLAY_FLAG_SYNC) sync= 1;
else if(sad->flag & ANIMPLAY_FLAG_NO_SYNC) sync= 0;
- else sync= (scene->r.audio.flag & AUDIO_SYNC);
+ else sync= (scene->audio.flag & AUDIO_SYNC);
if(sync) {
/* skip frames */
@@ -2301,6 +2300,7 @@ static void SCREEN_OT_animation_step(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Animation Step";
+ ot->description= "Step through animation by position.";
ot->idname= "SCREEN_OT_animation_step";
/* api callbacks */
@@ -2339,7 +2339,14 @@ static int screen_animation_play(bContext *C, wmOperator *op, wmEvent *event)
ED_screen_animation_timer_update(C, stime->redraws);
}
else {
- ED_screen_animation_timer(C, TIME_REGION|TIME_ALL_3D_WIN, sync, mode);
+ int redraws = TIME_REGION|TIME_ALL_3D_WIN;
+
+ /* XXX - would like a better way to deal with this situation - Campbell */
+ if((sa) && (sa->spacetype == SPACE_SEQ)) {
+ redraws |= TIME_SEQ;
+ }
+
+ ED_screen_animation_timer(C, redraws, sync, mode);
if(screen->animtimer) {
wmTimer *wt= screen->animtimer;
@@ -2356,7 +2363,8 @@ static int screen_animation_play(bContext *C, wmOperator *op, wmEvent *event)
static void SCREEN_OT_animation_play(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Animation player";
+ ot->name= "Play Animation";
+ ot->description= "Play animation.";
ot->idname= "SCREEN_OT_animation_play";
/* api callbacks */
@@ -2368,6 +2376,29 @@ static void SCREEN_OT_animation_play(wmOperatorType *ot)
RNA_def_boolean(ot->srna, "sync", 0, "Sync", "Drop frames to maintain framerate and stay in sync with audio.");
}
+static int screen_animation_cancel(bContext *C, wmOperator *op, wmEvent *event)
+{
+ bScreen *screen= CTX_wm_screen(C);
+
+ if(screen->animtimer)
+ return screen_animation_play(C, op, event);
+
+ return OPERATOR_PASS_THROUGH;
+}
+
+static void SCREEN_OT_animation_cancel(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Cancel Animation";
+ ot->description= "Cancel animation.";
+ ot->idname= "SCREEN_OT_animation_cancel";
+
+ /* api callbacks */
+ ot->invoke= screen_animation_cancel;
+
+ ot->poll= ED_operator_screenactive;
+}
+
/* ************** border select operator (template) ***************************** */
/* operator state vars used: (added by default WM callbacks)
@@ -2534,7 +2565,7 @@ static ScrArea *find_empty_image_area(bContext *C)
static void screen_set_image_output(bContext *C, int mx, int my)
{
Scene *scene= CTX_data_scene(C);
- ScrArea *sa;
+ ScrArea *sa= NULL;
SpaceImage *sima;
if(scene->r.displaymode==R_OUTPUT_WINDOW) {
@@ -2564,8 +2595,8 @@ static void screen_set_image_output(bContext *C, int mx, int my)
ED_screen_full_newspace(C, CTX_wm_area(C), SPACE_IMAGE);
sa= CTX_wm_area(C);
}
- else {
+ if(!sa) {
sa= find_area_showing_r_result(C);
if(sa==NULL)
sa= find_area_image_empty(C);
@@ -2712,18 +2743,13 @@ static void image_renderinfo_cb(void *rjv, RenderStats *rs)
}
/* called inside thread! */
-static void image_rect_update(void *rjv, RenderResult *rr, volatile rcti *renrect)
+static void image_buffer_rect_update(RenderJob *rj, RenderResult *rr, ImBuf *ibuf, volatile rcti *renrect)
{
- RenderJob *rj= rjv;
- ImBuf *ibuf;
float x1, y1, *rectf= NULL;
int ymin, ymax, xmin, xmax;
int rymin, rxmin;
char *rectc;
- ibuf= BKE_image_get_ibuf(rj->image, &rj->iuser);
- if(ibuf==NULL) return;
-
/* if renrect argument, we only refresh scanlines */
if(renrect) {
/* if ymax==recty, rendering of layer is ready, we should not draw, other things happen... */
@@ -2823,6 +2849,18 @@ static void image_rect_update(void *rjv, RenderResult *rr, volatile rcti *renrec
*(rj->do_update)= 1;
}
+static void image_rect_update(void *rjv, RenderResult *rr, volatile rcti *renrect)
+{
+ RenderJob *rj= rjv;
+ ImBuf *ibuf;
+ void *lock;
+
+ ibuf= BKE_image_acquire_ibuf(rj->image, &rj->iuser, &lock);
+ if(ibuf)
+ image_buffer_rect_update(rj, rr, ibuf, renrect);
+ BKE_image_release_ibuf(rj->image, lock);
+}
+
static void render_startjob(void *rjv, short *stop, short *do_update)
{
RenderJob *rj= rjv;
@@ -2888,7 +2926,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
multires_force_update(CTX_data_active_object(C));
/* get editmode results */
- ED_object_exit_editmode(C, 0); /* 0 = does not exit editmode */
+ ED_object_exit_editmode(C, EM_DO_UNDO); /* 0 = does not exit editmode */
// store spare
// get view3d layer, local layer, make this nice api call to render
@@ -2906,7 +2944,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
rj->iuser.ok= 1;
/* setup job */
- steve= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene);
+ steve= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene, WM_JOB_EXCL_RENDER|WM_JOB_PRIORITY);
WM_jobs_customdata(steve, rj, render_freejob);
WM_jobs_timer(steve, 0.2, NC_SCENE|ND_RENDER_RESULT, 0);
WM_jobs_callbacks(steve, render_startjob, NULL, NULL);
@@ -2936,7 +2974,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
WM_event_add_notifier(C, NC_SCENE|ND_RENDER_RESULT, scene);
/* add modal handler for ESC */
- WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
+ WM_event_add_modal_handler(C, op);
return OPERATOR_RUNNING_MODAL;
}
@@ -2947,6 +2985,7 @@ static void SCREEN_OT_render(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Render";
+ ot->description= "Render active scene.";
ot->idname= "SCREEN_OT_render";
/* api callbacks */
@@ -2970,6 +3009,7 @@ static int render_view_cancel_exec(bContext *C, wmOperator *unused)
/* test if we have a temp screen in front */
if(CTX_wm_window(C)->screen->full==SCREENTEMP) {
wm_window_lower(CTX_wm_window(C));
+ return OPERATOR_FINISHED;
}
/* determine if render already shows */
else if(sima->flag & SI_PREVSPACE) {
@@ -2981,19 +3021,23 @@ static int render_view_cancel_exec(bContext *C, wmOperator *unused)
}
else
ED_area_prevspace(C);
+
+ return OPERATOR_FINISHED;
}
else if(sima->flag & SI_FULLWINDOW) {
sima->flag &= ~SI_FULLWINDOW;
ed_screen_fullarea(C, sa);
- }
-
- return OPERATOR_FINISHED;
+ return OPERATOR_FINISHED;
+ }
+
+ return OPERATOR_PASS_THROUGH;
}
static void SCREEN_OT_render_view_cancel(struct wmOperatorType *ot)
{
/* identifiers */
ot->name= "Cancel Render View";
+ ot->description= "Cancel show render view.";
ot->idname= "SCREEN_OT_render_view_cancel";
/* api callbacks */
@@ -3039,6 +3083,7 @@ static void SCREEN_OT_render_view_show(struct wmOperatorType *ot)
{
/* identifiers */
ot->name= "Show/Hide Render View";
+ ot->description= "Toggle show render view.";
ot->idname= "SCREEN_OT_render_view_show";
/* api callbacks */
@@ -3077,6 +3122,7 @@ static void SCREEN_OT_userpref_show(struct wmOperatorType *ot)
{
/* identifiers */
ot->name= "Show/Hide User Preferences";
+ ot->description= "Show/hide user preferences.";
ot->idname= "SCREEN_OT_userpref_show";
/* api callbacks */
@@ -3101,6 +3147,7 @@ void SCREEN_OT_new(wmOperatorType *ot)
{
/* identifiers */
ot->name= "New Screen";
+ ot->description= "Add a new screen.";
ot->idname= "SCREEN_OT_new";
/* api callbacks */
@@ -3124,7 +3171,8 @@ static int screen_delete_exec(bContext *C, wmOperator *op)
void SCREEN_OT_delete(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Delete Scene";
+ ot->name= "Delete Screen"; //was scene
+ ot->description= "Delete active screen.";
ot->idname= "SCREEN_OT_delete";
/* api callbacks */
@@ -3166,6 +3214,7 @@ void SCENE_OT_new(wmOperatorType *ot)
/* identifiers */
ot->name= "New Scene";
+ ot->description= "Add new scene by type.";
ot->idname= "SCENE_OT_new";
/* api callbacks */
@@ -3194,6 +3243,7 @@ void SCENE_OT_delete(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Delete Scene";
+ ot->description= "Delete active scene.";
ot->idname= "SCENE_OT_delete";
/* api callbacks */
@@ -3237,6 +3287,7 @@ void ED_operatortypes_screen(void)
WM_operatortype_append(SCREEN_OT_animation_step);
WM_operatortype_append(SCREEN_OT_animation_play);
+ WM_operatortype_append(SCREEN_OT_animation_cancel);
/* render */
WM_operatortype_append(SCREEN_OT_render);
@@ -3255,7 +3306,7 @@ void ED_operatortypes_screen(void)
}
-static void keymap_modal_set(wmWindowManager *wm)
+static void keymap_modal_set(wmKeyConfig *keyconf)
{
static EnumPropertyItem modal_items[] = {
{KM_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""},
@@ -3266,7 +3317,7 @@ static void keymap_modal_set(wmWindowManager *wm)
wmKeyMap *keymap;
/* Standard Modal keymap ------------------------------------------------ */
- keymap= WM_modalkeymap_add(wm, "Standard Modal Map", modal_items);
+ keymap= WM_modalkeymap_add(keyconf, "Standard Modal Map", modal_items);
WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, KM_MODAL_CANCEL);
WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_ANY, KM_ANY, 0, KM_MODAL_APPLY);
@@ -3281,21 +3332,17 @@ static void keymap_modal_set(wmWindowManager *wm)
}
/* called in spacetypes.c */
-void ED_keymap_screen(wmWindowManager *wm)
+void ED_keymap_screen(wmKeyConfig *keyconf)
{
- ListBase *keymap;
-
- /* Screen General ------------------------------------------------ */
- keymap= WM_keymap_listbase(wm, "Screen", 0, 0);
-
+ wmKeyMap *keymap;
- /* standard timers */
- WM_keymap_add_item(keymap, "SCREEN_OT_animation_step", TIMER0, KM_ANY, KM_ANY, 0);
+ /* Screen Editing ------------------------------------------------ */
+ keymap= WM_keymap_find(keyconf, "Screen Editing", 0, 0);
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_actionzone", LEFTMOUSE, KM_PRESS, 0, 0)->ptr, "modifier", 0);
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_actionzone", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "modifier", 1);
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_actionzone", LEFTMOUSE, KM_PRESS, KM_ALT, 0)->ptr, "modifier", 2);
-
+
/* screen tools */
WM_keymap_verify_item(keymap, "SCREEN_OT_area_split", EVT_ACTIONZONE_AREA, 0, 0, 0);
WM_keymap_verify_item(keymap, "SCREEN_OT_area_join", EVT_ACTIONZONE_AREA, 0, 0, 0);
@@ -3304,6 +3351,14 @@ void ED_keymap_screen(wmWindowManager *wm)
WM_keymap_verify_item(keymap, "SCREEN_OT_region_scale", EVT_ACTIONZONE_REGION, 0, 0, 0);
/* area move after action zones */
WM_keymap_verify_item(keymap, "SCREEN_OT_area_move", LEFTMOUSE, KM_PRESS, 0, 0);
+
+
+ /* Screen General ------------------------------------------------ */
+ keymap= WM_keymap_find(keyconf, "Screen", 0, 0);
+
+ /* standard timers */
+ WM_keymap_add_item(keymap, "SCREEN_OT_animation_step", TIMER0, KM_ANY, KM_ANY, 0);
+
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_screen_set", RIGHTARROWKEY, KM_PRESS, KM_CTRL, 0)->ptr, "delta", 1);
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_screen_set", LEFTARROWKEY, KM_PRESS, KM_CTRL, 0)->ptr, "delta", -1);
@@ -3328,6 +3383,7 @@ void ED_keymap_screen(wmWindowManager *wm)
/* files */
WM_keymap_add_item(keymap, "FILE_OT_execute", RETKEY, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "FILE_OT_execute", PADENTER, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "FILE_OT_cancel", ESCKEY, KM_PRESS, 0, 0);
/* undo */
@@ -3349,11 +3405,11 @@ void ED_keymap_screen(wmWindowManager *wm)
#ifdef __APPLE__
WM_keymap_add_item(keymap, "SCREEN_OT_userpref_show", COMMAKEY, KM_PRESS, KM_OSKEY, 0);
#endif
- WM_keymap_add_item(keymap, "SCREEN_OT_userpref_show", COMMAKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "SCREEN_OT_userpref_show", UKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
/* Anim Playback ------------------------------------------------ */
- keymap= WM_keymap_listbase(wm, "Frames", 0, 0);
+ keymap= WM_keymap_find(keyconf, "Frames", 0, 0);
/* frame offsets */
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", UPARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", 10);
@@ -3372,7 +3428,8 @@ void ED_keymap_screen(wmWindowManager *wm)
WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", AKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", KKEY, KM_PRESS, 0, LKEY);
RNA_boolean_set(WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", AKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0)->ptr, "reverse", 1);
+ WM_keymap_add_item(keymap, "SCREEN_OT_animation_cancel", ESCKEY, KM_PRESS, 0, 0);
- keymap_modal_set(wm);
+ keymap_modal_set(keyconf);
}
diff --git a/source/blender/editors/screen/screendump.c b/source/blender/editors/screen/screendump.c
index fb3da4a5353..81c3f4d6814 100644
--- a/source/blender/editors/screen/screendump.c
+++ b/source/blender/editors/screen/screendump.c
@@ -284,7 +284,7 @@ static void screenshot_startjob(void *sjv, short *stop, short *do_update)
static int screencast_exec(bContext *C, wmOperator *op)
{
bScreen *screen= CTX_wm_screen(C);
- wmJob *steve= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), screen);
+ wmJob *steve= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), screen, 0);
ScreenshotJob *sj= MEM_callocN(sizeof(ScreenshotJob), "screenshot job");
/* setup sj */