From 46dceefc353ab8c84731c9f8f09a34733e004d1b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 28 Jun 2018 23:39:20 +0200 Subject: WM: Remove Screen Cast This feature is better handled by specialized tools. --- .../editors/interface/interface_templates.c | 3 - source/blender/editors/interface/resources.c | 4 - source/blender/editors/screen/screen_intern.h | 1 - source/blender/editors/screen/screen_ops.c | 2 - source/blender/editors/screen/screendump.c | 263 --------------------- source/blender/editors/space_info/space_info.c | 2 +- source/blender/editors/space_node/space_node.c | 2 - .../editors/space_sequencer/space_sequencer.c | 2 +- source/blender/makesdna/DNA_userdef_types.h | 3 +- source/blender/makesrna/intern/rna_userdef.c | 11 - source/blender/windowmanager/WM_api.h | 4 +- source/blender/windowmanager/WM_types.h | 2 - source/blender/windowmanager/intern/wm_window.c | 5 - 13 files changed, 4 insertions(+), 300 deletions(-) (limited to 'source') diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 574e1463857..21ed97eed36 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -3800,9 +3800,6 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C) NULL, 0.0f, 0.0f, 0, 0, TIP_("Stop this job")); } - if (WM_jobs_test(wm, screen, WM_JOB_TYPE_SCREENCAST)) - uiDefIconTextBut(block, UI_BTYPE_BUT, B_STOPCAST, ICON_CANCEL, IFACE_("Capture"), 0, 0, UI_UNIT_X * 4.25f, UI_UNIT_Y, - NULL, 0.0f, 0.0f, 0, 0, TIP_("Stop screencast")); if (screen->animtimer) uiDefIconTextBut(block, UI_BTYPE_BUT, B_STOPANIM, ICON_CANCEL, IFACE_("Anim Player"), 0, 0, UI_UNIT_X * 5.0f, UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, TIP_("Stop animation playback")); diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index f9ca2095390..b9da0923e07 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -2325,10 +2325,6 @@ void init_userdef_do_versions(Main *bmain) if (U.dbl_click_time == 0) { U.dbl_click_time = 350; } - if (U.scrcastfps == 0) { - U.scrcastfps = 10; - U.scrcastwait = 50; - } if (U.v2d_min_gridsize == 0) { U.v2d_min_gridsize = 35; } diff --git a/source/blender/editors/screen/screen_intern.h b/source/blender/editors/screen/screen_intern.h index 63d616e986e..a7cd9713973 100644 --- a/source/blender/editors/screen/screen_intern.h +++ b/source/blender/editors/screen/screen_intern.h @@ -72,7 +72,6 @@ extern const char *screen_context_dir[]; /* doc access */ /* screendump.c */ void SCREEN_OT_screenshot(struct wmOperatorType *ot); -void SCREEN_OT_screencast(struct wmOperatorType *ot); /* screen_ops.c */ void region_blend_start(struct bContext *C, struct ScrArea *sa, struct ARegion *ar); diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index 1f5b51d211c..6418db3e279 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -4493,7 +4493,6 @@ void ED_operatortypes_screen(void) WM_operatortype_append(SCREEN_OT_back_to_previous); WM_operatortype_append(SCREEN_OT_spacedata_cleanup); WM_operatortype_append(SCREEN_OT_screenshot); - WM_operatortype_append(SCREEN_OT_screencast); WM_operatortype_append(SCREEN_OT_userpref_show); WM_operatortype_append(SCREEN_OT_region_blend); WM_operatortype_append(SCREEN_OT_space_context_cycle); @@ -4625,7 +4624,6 @@ void ED_keymap_screen(wmKeyConfig *keyconf) RNA_boolean_set(kmi->ptr, "use_hide_panels", true); WM_keymap_add_item(keymap, "SCREEN_OT_screenshot", F3KEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_add_item(keymap, "SCREEN_OT_screencast", F3KEY, KM_PRESS, KM_ALT, 0); kmi = WM_keymap_add_item(keymap, "SCREEN_OT_space_context_cycle", TABKEY, KM_PRESS, KM_CTRL, 0); RNA_enum_set(kmi->ptr, "direction", SPACE_CONTEXT_CYCLE_NEXT); diff --git a/source/blender/editors/screen/screendump.c b/source/blender/editors/screen/screendump.c index 54ff3d51479..ec486954ba3 100644 --- a/source/blender/editors/screen/screendump.c +++ b/source/blender/editors/screen/screendump.c @@ -36,7 +36,6 @@ #include "BLI_blenlib.h" #include "BLI_utildefines.h" -#include "BLI_math.h" #include "IMB_imbuf_types.h" #include "IMB_imbuf.h" @@ -44,17 +43,14 @@ #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" -#include "DNA_userdef_types.h" #include "BKE_context.h" #include "BKE_global.h" #include "BKE_main.h" #include "BKE_image.h" #include "BKE_report.h" -#include "BKE_writeavi.h" #include "BIF_gl.h" -#include "BIF_glutil.h" #include "RNA_access.h" #include "RNA_define.h" @@ -64,9 +60,6 @@ #include "WM_types.h" #include "WM_api.h" -#include "PIL_time.h" - - #include "screen_intern.h" typedef struct ScreenshotData { @@ -305,259 +298,3 @@ void SCREEN_OT_screenshot(wmOperatorType *ot) RNA_def_boolean(ot->srna, "full", 1, "Full Screen", "Capture the whole window (otherwise only capture the active area)"); } - -/* *************** screenshot movie job ************************* */ - -typedef struct ScreenshotJob { - Main *bmain; - Scene *scene; - wmWindowManager *wm; - unsigned int *dumprect; - int x, y, dumpsx, dumpsy; - const short *stop; - const short *do_update; - ReportList reports; - - bMovieHandle *movie_handle; - void *movie_ctx; -} ScreenshotJob; - - -static void screenshot_freejob(void *sjv) -{ - ScreenshotJob *sj = sjv; - - if (sj->dumprect) - MEM_freeN(sj->dumprect); - - if (sj->movie_handle) { - bMovieHandle *mh = sj->movie_handle; - mh->end_movie(sj->movie_ctx); - mh->context_free(sj->movie_ctx); - } - - MEM_freeN(sj); -} - - -/* called before redraw notifiers, copies a new dumprect */ -static void screenshot_updatejob(void *sjv) -{ - ScreenshotJob *sj = sjv; - unsigned int *dumprect; - - if (sj->dumprect == NULL) { - dumprect = MEM_mallocN(sizeof(int) * sj->dumpsx * sj->dumpsy, "dumprect"); - screenshot_read_pixels(sj->x, sj->y, sj->dumpsx, sj->dumpsy, (unsigned char *)dumprect); - - sj->dumprect = dumprect; - } -} - - -/* only this runs inside thread */ -static void screenshot_startjob(void *sjv, short *stop, short *do_update, float *UNUSED(progress)) -{ - ScreenshotJob *sj = sjv; - RenderData rd = sj->scene->r; - bMovieHandle *mh = NULL; - - /* we need this as local variables for renderdata */ - rd.frs_sec = U.scrcastfps; - rd.frs_sec_base = 1.0f; - - if (BKE_imtype_is_movie(rd.im_format.imtype)) { - mh = BKE_movie_handle_get(sj->scene->r.im_format.imtype); - if (mh == NULL) { - printf("Movie format unsupported\n"); - return; - } - sj->movie_ctx = mh->context_create(); - sj->movie_handle = mh; - - if (!mh->start_movie(sj->movie_ctx, sj->scene, &rd, sj->dumpsx, sj->dumpsy, &sj->reports, false, "")) { - printf("screencast job stopped\n"); - return; - } - } - - sj->stop = stop; - sj->do_update = do_update; - - *do_update = true; /* wait for opengl rect */ - - while (*stop == 0) { - - if (sj->dumprect) { - - if (mh) { - if (mh->append_movie(sj->movie_ctx, &rd, rd.sfra, rd.cfra, (int *)sj->dumprect, - sj->dumpsx, sj->dumpsy, "", &sj->reports)) - { - BKE_reportf(&sj->reports, RPT_INFO, "Appended frame: %d", rd.cfra); - printf("Appended frame %d\n", rd.cfra); - } - else { - break; - } - } - else { - ImBuf *ibuf = IMB_allocImBuf(sj->dumpsx, sj->dumpsy, rd.im_format.planes, 0); - char name[FILE_MAX]; - int ok; - - BKE_image_path_from_imformat( - name, rd.pic, BKE_main_blendfile_path(sj->bmain), rd.cfra, - &rd.im_format, (rd.scemode & R_EXTENSION) != 0, true, NULL); - - ibuf->rect = sj->dumprect; - ok = BKE_imbuf_write(ibuf, name, &rd.im_format); - - if (ok == 0) { - printf("Write error: cannot save %s\n", name); - BKE_reportf(&sj->reports, RPT_INFO, "Write error: cannot save %s", name); - break; - } - else { - printf("Saved file: %s\n", name); - BKE_reportf(&sj->reports, RPT_INFO, "Saved file: %s", name); - } - - /* imbuf knows which rects are not part of ibuf */ - IMB_freeImBuf(ibuf); - } - - MEM_freeN(sj->dumprect); - sj->dumprect = NULL; - - *do_update = true; - - rd.cfra++; - - } - else - PIL_sleep_ms(U.scrcastwait); - } - - if (mh) { - mh->end_movie(sj->movie_ctx); - mh->context_free(sj->movie_ctx); - sj->movie_handle = NULL; - } - - BKE_report(&sj->reports, RPT_INFO, "Screencast job stopped"); -} - -/* Helper callback for drawing the cursor itself */ -static void screencast_draw_cursor(bContext *UNUSED(C), int x, int y, void *UNUSED(p_ptr)) -{ - - glPushMatrix(); - - glTranslatef((float)x, (float)y, 0.0f); - - - glEnable(GL_LINE_SMOOTH); - glEnable(GL_BLEND); - - glColor4ub(0, 0, 0, 32); - glutil_draw_filled_arc(0.0, M_PI * 2.0, 20, 40); - - glColor4ub(255, 255, 255, 128); - glutil_draw_lined_arc(0.0, M_PI * 2.0, 20, 40); - - glDisable(GL_BLEND); - glDisable(GL_LINE_SMOOTH); - - glPopMatrix(); -} - -/* Turn brush cursor in 3D view on/off */ -static void screencast_cursor_toggle(wmWindowManager *wm, short enable) -{ - static void *cursor = NULL; - - if (cursor && !enable) { - /* clear cursor */ - WM_paint_cursor_end(wm, cursor); - cursor = NULL; - } - else if (enable) { - /* enable cursor */ - cursor = WM_paint_cursor_activate(wm, NULL, screencast_draw_cursor, NULL); - } -} - -static void screenshot_endjob(void *sjv) -{ - ScreenshotJob *sj = sjv; - - screencast_cursor_toggle(sj->wm, 0); -} - - -static int screencast_exec(bContext *C, wmOperator *op) -{ - wmWindowManager *wm = CTX_wm_manager(C); - wmWindow *win = CTX_wm_window(C); - bScreen *screen = CTX_wm_screen(C); - wmJob *wm_job; - ScreenshotJob *sj; - - /* if called again, stop the running job */ - if (WM_jobs_test(wm, screen, WM_JOB_TYPE_SCREENCAST)) - WM_jobs_stop(wm, screen, screenshot_startjob); - - wm_job = WM_jobs_get(wm, win, screen, "Screencast", 0, WM_JOB_TYPE_SCREENCAST); - sj = MEM_callocN(sizeof(ScreenshotJob), "screenshot job"); - - /* setup sj */ - if (RNA_boolean_get(op->ptr, "full")) { - sj->x = 0; - sj->y = 0; - sj->dumpsx = WM_window_pixels_x(win); - sj->dumpsy = WM_window_pixels_y(win); - } - else { - ScrArea *curarea = CTX_wm_area(C); - sj->x = curarea->totrct.xmin; - sj->y = curarea->totrct.ymin; - sj->dumpsx = curarea->totrct.xmax - sj->x; - sj->dumpsy = curarea->totrct.ymax - sj->y; - } - sj->bmain = CTX_data_main(C); - sj->scene = CTX_data_scene(C); - sj->wm = wm; - - BKE_reports_init(&sj->reports, RPT_PRINT); - - /* setup job */ - WM_jobs_customdata_set(wm_job, sj, screenshot_freejob); - WM_jobs_timer(wm_job, 0.1, 0, NC_SCREEN | ND_SCREENCAST); - WM_jobs_callbacks(wm_job, screenshot_startjob, NULL, screenshot_updatejob, screenshot_endjob); - - WM_jobs_start(sj->wm, wm_job); - - screencast_cursor_toggle(sj->wm, 1); - - WM_event_add_notifier(C, NC_SCREEN | ND_SCREENCAST, screen); - - return OPERATOR_FINISHED; -} - -void SCREEN_OT_screencast(wmOperatorType *ot) -{ - ot->name = "Make Screencast"; - ot->idname = "SCREEN_OT_screencast"; - ot->description = "Capture a video of the active area or whole Blender window"; - - ot->invoke = WM_operator_confirm; - ot->exec = screencast_exec; - ot->poll = screenshot_poll; /* shared poll */ - - ot->flag = 0; - - RNA_def_property(ot->srna, "filepath", PROP_STRING, PROP_FILEPATH); - RNA_def_boolean(ot->srna, "full", 1, "Full Screen", - "Capture the whole window (otherwise only capture the active area)"); -} diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c index 92b1be066b0..9ffa73af52b 100644 --- a/source/blender/editors/space_info/space_info.c +++ b/source/blender/editors/space_info/space_info.c @@ -256,7 +256,7 @@ static void info_header_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegi /* context changes */ switch (wmn->category) { case NC_SCREEN: - if (ELEM(wmn->data, ND_SCREENCAST, ND_ANIMPLAY)) + if (ELEM(wmn->data, ND_ANIMPLAY)) ED_region_tag_redraw(ar); break; case NC_WM: diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index c954ebad4c9..b63d053b703 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -747,7 +747,6 @@ static void node_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegi break; case NC_SCREEN: switch (wmn->data) { - case ND_SCREENCAST: case ND_ANIMPLAY: ED_region_tag_redraw(ar); break; @@ -968,4 +967,3 @@ void ED_spacetype_node(void) BKE_spacetype_register(st); } - diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c index 47c134d02e1..155aafdb9a7 100644 --- a/source/blender/editors/space_sequencer/space_sequencer.c +++ b/source/blender/editors/space_sequencer/space_sequencer.c @@ -530,7 +530,7 @@ static void sequencer_main_region_listener(bScreen *UNUSED(sc), ScrArea *UNUSED( ED_region_tag_redraw(ar); break; case NC_SCREEN: - if (ELEM(wmn->data, ND_SCREENCAST, ND_ANIMPLAY)) + if (ELEM(wmn->data, ND_ANIMPLAY)) ED_region_tag_redraw(ar); break; } diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index 314ca1dfaa9..2d52c1a67de 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -527,8 +527,7 @@ typedef struct UserDef { int view_frame_keyframes; /* number of keyframes to zoom around current frame */ float view_frame_seconds; /* seconds to zoom around current frame */ - short scrcastfps; /* frame rate for screencast to be played back */ - short scrcastwait; /* milliseconds between screencast snapshots */ + char _pad0[4]; short widget_unit; /* private, defaults to 20 for 72 DPI setting */ short anisotropic_filter; diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 617d44a8626..487f62cdfe6 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -4207,17 +4207,6 @@ static void rna_def_userdef_system(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Audio Channels", "Audio channel count"); RNA_def_property_update(prop, 0, "rna_UserDef_audio_update"); - prop = RNA_def_property(srna, "screencast_fps", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "scrcastfps"); - RNA_def_property_range(prop, 10, 100); - RNA_def_property_ui_text(prop, "FPS", "Frame rate for the screencast to be played back"); - - prop = RNA_def_property(srna, "screencast_wait_time", PROP_INT, PROP_NONE); - RNA_def_property_int_sdna(prop, NULL, "scrcastwait"); - RNA_def_property_range(prop, 10, 1000); - RNA_def_property_ui_text(prop, "Wait Timer (ms)", - "Time in milliseconds between each frame recorded for screencast"); - prop = RNA_def_property(srna, "use_text_antialiasing", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_negative_sdna(prop, NULL, "text_render", USER_TEXT_DISABLE_AA); RNA_def_property_ui_text(prop, "Text Anti-aliasing", "Draw user interface text anti-aliased"); diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 3324fec4cac..cfaef2c3f58 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -447,7 +447,6 @@ enum { WM_JOB_TYPE_COMPOSITE, WM_JOB_TYPE_RENDER, WM_JOB_TYPE_RENDER_PREVIEW, /* UI preview */ - WM_JOB_TYPE_SCREENCAST, WM_JOB_TYPE_OBJECT_SIM_OCEAN, WM_JOB_TYPE_OBJECT_SIM_FLUID, WM_JOB_TYPE_OBJECT_BAKE_TEXTURE, @@ -462,7 +461,7 @@ enum { WM_JOB_TYPE_POINTCACHE, WM_JOB_TYPE_DPAINT_BAKE, WM_JOB_TYPE_ALEMBIC, - /* add as needed, screencast, seq proxy build + /* add as needed, seq proxy build * if having hard coded values is a problem */ }; @@ -554,4 +553,3 @@ void WM_tooltip_refresh(struct bContext *C, struct wmWindow *win); #endif #endif /* __WM_API_H__ */ - diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 8c53f5389e3..80f1e8e1ee1 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -261,7 +261,6 @@ typedef struct wmNotifier { /* NC_SCREEN screen */ #define ND_SCREENBROWSE (1<<16) #define ND_SCREENDELETE (2<<16) -#define ND_SCREENCAST (3<<16) #define ND_ANIMPLAY (4<<16) #define ND_GPENCIL (5<<16) #define ND_EDITOR_CHANGED (6<<16) /*sent to new editors after switching to them*/ @@ -715,4 +714,3 @@ extern struct CLG_LogRef *WM_LOG_KEYMAPS; #endif #endif /* __WM_TYPES_H__ */ - diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index 2d7ed9d0295..f6ebdae8414 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -1216,11 +1216,6 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr state = GHOST_GetWindowState(win->ghostwin); win->windowstate = state; - /* stop screencast if resize */ - if (type == GHOST_kEventWindowSize) { - WM_jobs_stop(wm, win->screen, NULL); - } - WM_window_set_dpi(win); /* win32: gives undefined window size when minimized */ -- cgit v1.2.3