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. --- source/blender/editors/screen/screen_intern.h | 1 - source/blender/editors/screen/screen_ops.c | 2 - source/blender/editors/screen/screendump.c | 263 -------------------------- 3 files changed, 266 deletions(-) (limited to 'source/blender/editors/screen') 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)"); -} -- cgit v1.2.3