[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19601] branches/blender2.5/blender/source /blender: RNA:

Brecht Van Lommel brecht at blender.org
Wed Apr 8 18:40:46 CEST 2009


Revision: 19601
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19601
Author:   blendix
Date:     2009-04-08 18:40:46 +0200 (Wed, 08 Apr 2009)

Log Message:
-----------
RNA:
* Added the build system code to compile files named
  editors/*/*_api.c into the makesrna preprocessing.

  The reason to do this is to keep operators and API
  close together, but it doesn't fit well with the build
  system, especially Makefiles use an ugly hack here.

* Some fixes to pass an RNA AnyType through the API,
  this will give a PointerRNA, for use in the interface
  code for example.

* Added RNA wrapping of some UI template code as a test.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/interface/SConscript
    branches/blender2.5/blender/source/blender/makesrna/SConscript
    branches/blender2.5/blender/source/blender/makesrna/intern/CMakeLists.txt
    branches/blender2.5/blender/source/blender/makesrna/intern/Makefile
    branches/blender2.5/blender/source/blender/makesrna/intern/SConscript
    branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_screen.c

Added Paths:
-----------
    branches/blender2.5/blender/source/blender/editors/interface/interface_api.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_ui.c

Modified: branches/blender2.5/blender/source/blender/editors/interface/SConscript
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/SConscript	2009-04-08 16:25:00 UTC (rev 19600)
+++ branches/blender2.5/blender/source/blender/editors/interface/SConscript	2009-04-08 16:40:46 UTC (rev 19601)
@@ -3,6 +3,9 @@
 
 sources = env.Glob('*.c')
 
+for source in env.Glob('*_api.c'):
+	sources.remove(source)
+
 incs = '../include ../../blenlib ../../blenfont ../../blenkernel ../../makesdna ../../imbuf'
 incs += ' ../../makesrna ../../windowmanager #/intern/guardedalloc #intern/bmfont'
 incs += ' #/extern/glew/include'

Added: branches/blender2.5/blender/source/blender/editors/interface/interface_api.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_api.c	                        (rev 0)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_api.c	2009-04-08 16:40:46 UTC (rev 19601)
@@ -0,0 +1,67 @@
+/**
+ * $Id:
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * 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. 
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2009 Blender Foundation.
+ * All rights reserved.
+ *
+ * 
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "RNA_define.h"
+#include "RNA_types.h"
+
+void RNA_api_ui_layout(StructRNA *srna)
+{
+	FunctionRNA *func;
+
+	/* templates */
+	func= RNA_def_function(srna, "template_column", "uiTemplateColumn");
+	func= RNA_def_function(srna, "template_left_right", "uiTemplateLeftRight");
+	func= RNA_def_function(srna, "template_stack", "uiTemplateStack");
+
+	func= RNA_def_function(srna, "template_header_menus", "uiTemplateHeaderMenus");
+	func= RNA_def_function(srna, "template_header_buttons", "uiTemplateHeaderButtons");
+	//func= RNA_def_function(srna, "template_header_ID", "uiTemplateHeaderID");
+
+	/* items */
+	func= RNA_def_function(srna, "itemR", "uiItemR");
+	RNA_def_int(func, "slot", 0, 0, 5, "", "", 0, 5);
+	RNA_def_string(func, "name", "", 0, "", "");
+	RNA_def_int(func, "icon", 0, 0, INT_MAX, "", "", 0, INT_MAX);
+	RNA_def_pointer(func, "data", "AnyType", "", "");
+	RNA_def_string(func, "property", "", 0, "", "");
+
+	func= RNA_def_function(srna, "itemO", "uiItemO");
+	RNA_def_int(func, "slot", 0, 0, 5, "", "", 0, 5);
+	RNA_def_string(func, "name", "", 0, "", "");
+	RNA_def_int(func, "icon", 0, 0, INT_MAX, "", "", 0, INT_MAX);
+	RNA_def_string(func, "operator", "", 0, "", "");
+
+	func= RNA_def_function(srna, "itemL", "uiItemLabel");
+	RNA_def_int(func, "slot", 0, 0, 5, "", "", 0, 5);
+	RNA_def_string(func, "name", "", 0, "", "");
+	RNA_def_int(func, "icon", 0, 0, INT_MAX, "", "", 0, INT_MAX);
+}
+

Modified: branches/blender2.5/blender/source/blender/makesrna/SConscript
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/SConscript	2009-04-08 16:25:00 UTC (rev 19600)
+++ branches/blender2.5/blender/source/blender/makesrna/SConscript	2009-04-08 16:40:46 UTC (rev 19601)
@@ -7,6 +7,6 @@
 objs += o
 
 incs = '#/intern/guardedalloc ../blenkernel ../blenlib ../makesdna intern .'
-incs += ' ../windowmanager ../editors'
+incs += ' ../windowmanager ../editors/include'
 
 env.BlenderLib ( 'bf_rna', objs, Split(incs), [], libtype=['core'], priority = [195] )

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/CMakeLists.txt
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/CMakeLists.txt	2009-04-08 16:25:00 UTC (rev 19600)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/CMakeLists.txt	2009-04-08 16:40:46 UTC (rev 19601)
@@ -26,17 +26,19 @@
 
 FILE(GLOB DEFSRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.c")
 LIST(REMOVE_ITEM DEFSRC rna_access.c rna_define.c makesrna.c)
-
+FILE(GLOB_RECURSE APISRC "../../editors/*/*_api.c")
+ 
 STRING(REGEX REPLACE "rna_([a-zA-Z0-9_-]*).c" "${CMAKE_CURRENT_BINARY_DIR}/rna_\\1_gen.c" GENSRC "${DEFSRC}")
 
 SET(SRC
      makesrna.c
      rna_define.c
      ${DEFSRC}
+     ${APISRC}
      ../../../../intern/guardedalloc/intern/mallocn.c
      ../../../../intern/guardedalloc/intern/mmap_win.c)
 
-INCLUDE_DIRECTORIES(../../../../intern/guardedalloc .. ../../makesdna ../../blenkernel ../../blenlib ../../windowmanager ../../editors .)
+INCLUDE_DIRECTORIES(../../../../intern/guardedalloc .. ../../makesdna ../../blenkernel ../../blenlib ../../windowmanager ../../editors/include .)
 FILE(GLOB INC_FILES ../*.h ../../makesdna/*.h)
 
 # Build makesrna executable

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/Makefile
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/Makefile	2009-04-08 16:25:00 UTC (rev 19600)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/Makefile	2009-04-08 16:40:46 UTC (rev 19601)
@@ -31,8 +31,8 @@
 GENSRCS = $(patsubst rna_%.c, rna_%_gen.c, $(DEFRNA))
 GENTARGET = $(patsubst %.c, $(DIR)/$(DEBUG_DIR)%.c, $(GENSRCS))
 
-MAKESRCS = $(DEFRNA) makesrna.c rna_define.c
-MAKEOBJS = $(patsubst %.c, $(DIR)/$(DEBUG_DIR)%.o, $(MAKESRCS))
+MAKESRCS = $(DEFRNA) makesrna.c rna_define.c $(wildcard ../../editors/*/*_api.c)
+MAKEOBJS = $(patsubst %.c, $(DIR)/$(DEBUG_DIR)%.o, $(notdir $(MAKESRCS)))
 
 CSRCS = $(GENSRCS) rna_access.c
 
@@ -49,6 +49,7 @@
 CPPFLAGS += -I../../blenkernel
 CPPFLAGS += -I../../makesdna
 CPPFLAGS += -I../../windowmanager
+CPPFLAGS += -I../../editors/include
 CPPFLAGS += -I..
 CPPFLAGS += -I.
 
@@ -72,6 +73,24 @@
 
 # TODO include right .mk for ldflags
 
+# XXX this is an ugly hack, copying code from nan_compile.mk
+# we want the .o's to be in the makesrna/ directory, but the
+# .c's are in the editors/*/ directories
+
+$(DIR)/$(DEBUG_DIR)%_api.o: ../../editors/*/%_api.c
+    ifdef NAN_DEPEND
+	@set -e; $(CC) -M $(CPPFLAGS) $< 2>/dev/null \
+		| sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
+		> $(DIR)/$(DEBUG_DIR)$*.d; \
+		[ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$*.d
+    endif
+    ifdef NAN_QUIET
+	@echo " -- $< -- "
+	@$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
+    else
+	$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@)
+    endif
+
 # A small note: we do not use the debug version of the alloc lib. That
 # is done quite intentionally. If there is a bug in that lib, it needs
 # to be fixed by the module maintainer.

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/SConscript
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/SConscript	2009-04-08 16:25:00 UTC (rev 19600)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/SConscript	2009-04-08 16:40:46 UTC (rev 19601)
@@ -11,17 +11,15 @@
 root_build_dir=normpath(env['BF_BUILDDIR'])
 
 source_files = env.Glob('*.c')
-
-# making rna_access.c part of both makesrna and blender seems to
-# give conflict, how to solve?
 source_files.remove('rna_access.c')
 
 generated_files = source_files[:]
 generated_files.remove('rna_define.c')
 generated_files.remove('makesrna.c')
-
 generated_files = [filename[:-2] + '_gen.c' for filename in generated_files]
 
+source_files.extend(env.Glob('../../editors/*/*_api.c'))
+
 makesrna_tool = env.Clone()
 rna = env.Clone()
 makesrna_tool.Append(CCFLAGS = '-DBASE_HEADER="\\"source/blender/makesrna/\\"" ')
@@ -32,7 +30,7 @@
                                  '../../makesdna',
                                  '../../makesrna',
 								 '../../windowmanager',
-								 '../../editors'])
+								 '../../editors/include'])
 
 if env['OURPLATFORM'] == 'linuxcross':
 	USE_WINE = True # when cross compiling on linux 64bit this is useful

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-04-08 16:25:00 UTC (rev 19600)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c	2009-04-08 16:40:46 UTC (rev 19601)
@@ -1116,12 +1116,20 @@
 
 	dparm= dfunc->cont.properties.first;
 	for(; dparm; dparm= dparm->next) {
-		ptrstr= (dparm->prop->type == PROP_POINTER || dparm->prop->arraylength > 0)? "*" : "";
-
 		if(dparm->prop==func->ret) 
 			fprintf(f, "\t_retdata= _data;\n");
+		else if(dparm->prop->arraylength)
+			fprintf(f, "\t%s= ((%s%s*)_data);\n", dparm->prop->identifier, rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop));
+		else if(dparm->prop->type == PROP_POINTER) {
+			PointerPropertyRNA *pprop= (PointerPropertyRNA*)dparm->prop;
+
+			if(strcmp((char*)pprop->type, "AnyType") == 0)
+				fprintf(f, "\t%s= ((%s%s*)_data);\n", dparm->prop->identifier, rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop));
+			else
+				fprintf(f, "\t%s= *((%s%s**)_data);\n", dparm->prop->identifier, rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop));
+		}
 		else
-			fprintf(f, "\t%s= *((%s%s%s*)_data);\n", dparm->prop->identifier, rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), ptrstr);
+			fprintf(f, "\t%s= *((%s%s*)_data);\n", dparm->prop->identifier, rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop));
 
 		if(dparm->next)
 			fprintf(f, "\t_data+= %d;\n", rna_parameter_size(dparm->prop));
@@ -1694,6 +1702,7 @@
 	{"rna_text.c", RNA_def_text},
 	{"rna_timeline.c", RNA_def_timeline_marker},
 	{"rna_sound.c", RNA_def_sound},
+	{"rna_ui.c", RNA_def_ui},
 	{"rna_userdef.c", RNA_def_userdef},
 	{"rna_vfont.c", RNA_def_vfont},

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list