[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36770] trunk/blender/source/blender/ editors/screen/screendump.c: screenshot operator can now be executed directly.
Campbell Barton
ideasman42 at gmail.com
Thu May 19 13:13:36 CEST 2011
Revision: 36770
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36770
Author: campbellbarton
Date: 2011-05-19 11:13:35 +0000 (Thu, 19 May 2011)
Log Message:
-----------
screenshot operator can now be executed directly.
so python can screenshot with: bpy.ops.screen.screenshot(filepath="some_image.png"):
Modified Paths:
--------------
trunk/blender/source/blender/editors/screen/screendump.c
Modified: trunk/blender/source/blender/editors/screen/screendump.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screendump.c 2011-05-19 11:05:34 UTC (rev 36769)
+++ trunk/blender/source/blender/editors/screen/screendump.c 2011-05-19 11:13:35 UTC (rev 36770)
@@ -72,41 +72,6 @@
int dumpsx, dumpsy;
} ScreenshotData;
-static int screenshot_exec(bContext *C, wmOperator *op)
-{
- ScreenshotData *scd= op->customdata;
-
- if(scd) {
- if(scd->dumprect) {
- Scene *scene= CTX_data_scene(C);
- ImBuf *ibuf;
- char path[FILE_MAX];
-
- RNA_string_get(op->ptr, "filepath", path);
-
- strcpy(G.ima, path);
- BLI_path_abs(path, G.main->name);
-
- /* BKE_add_image_extension() checks for if extension was already set */
- if(scene->r.scemode & R_EXTENSION)
- if(strlen(path)<FILE_MAXDIR+FILE_MAXFILE-5)
- BKE_add_image_extension(path, scene->r.imtype);
-
- ibuf= IMB_allocImBuf(scd->dumpsx, scd->dumpsy, 24, 0);
- ibuf->rect= scd->dumprect;
-
- BKE_write_ibuf(ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality);
-
- IMB_freeImBuf(ibuf);
-
- MEM_freeN(scd->dumprect);
- }
- MEM_freeN(scd);
- op->customdata= NULL;
- }
- return OPERATOR_FINISHED;
-}
-
/* get shot from frontbuffer */
static unsigned int *screenshot(bContext *C, int *dumpsx, int *dumpsy, int fscreen)
{
@@ -140,8 +105,8 @@
return dumprect;
}
-
-static int screenshot_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
+/* call from both exec and invoke */
+static int screenshot_data_create(bContext *C, wmOperator *op)
{
unsigned int *dumprect;
int dumpsx, dumpsy;
@@ -154,7 +119,68 @@
scd->dumpsy= dumpsy;
scd->dumprect= dumprect;
op->customdata= scd;
-
+ return TRUE;
+ }
+ else {
+ op->customdata= NULL;
+ return FALSE;
+ }
+}
+
+static void screenshot_data_free(wmOperator *op)
+{
+ ScreenshotData *scd= op->customdata;
+
+ if(scd) {
+ if(scd->dumprect)
+ MEM_freeN(scd->dumprect);
+ MEM_freeN(scd);
+ op->customdata= NULL;
+ }
+}
+
+static int screenshot_exec(bContext *C, wmOperator *op)
+{
+ ScreenshotData *scd= op->customdata;
+
+ if(scd == NULL) {
+ /* when running exec directly */
+ screenshot_data_create(C, op);
+ scd= op->customdata;
+ }
+
+ if(scd) {
+ if(scd->dumprect) {
+ Scene *scene= CTX_data_scene(C);
+ ImBuf *ibuf;
+ char path[FILE_MAX];
+
+ RNA_string_get(op->ptr, "filepath", path);
+
+ strcpy(G.ima, path);
+ BLI_path_abs(path, G.main->name);
+
+ /* BKE_add_image_extension() checks for if extension was already set */
+ if(scene->r.scemode & R_EXTENSION)
+ if(strlen(path)<FILE_MAXDIR+FILE_MAXFILE-5)
+ BKE_add_image_extension(path, scene->r.imtype);
+
+ ibuf= IMB_allocImBuf(scd->dumpsx, scd->dumpsy, 24, 0);
+ ibuf->rect= scd->dumprect;
+
+ BKE_write_ibuf(ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality);
+
+ IMB_freeImBuf(ibuf);
+ }
+ }
+
+ screenshot_data_free(op);
+ return OPERATOR_FINISHED;
+}
+
+static int screenshot_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
+{
+ if(screenshot_data_create(C, op)) {
if(RNA_property_is_set(op->ptr, "filepath"))
return screenshot_exec(C, op);
@@ -169,14 +195,7 @@
static int screenshot_cancel(bContext *UNUSED(C), wmOperator *op)
{
- ScreenshotData *scd= op->customdata;
-
- if(scd) {
- if(scd->dumprect)
- MEM_freeN(scd->dumprect);
- MEM_freeN(scd);
- op->customdata= NULL;
- }
+ screenshot_data_free(op);
return OPERATOR_CANCELLED;
}
More information about the Bf-blender-cvs
mailing list