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:
authorTon Roosendaal <ton@blender.org>2008-12-14 13:52:48 +0300
committerTon Roosendaal <ton@blender.org>2008-12-14 13:52:48 +0300
commit3a58eddec5d47973f19c1c6102fa3e45a27a71ba (patch)
tree19f33f95274d2a8f17154a11edc4bf4c12967945 /source/blender
parent616ab233fa1d91453dd1790d7126bdc41dcb12f9 (diff)
2.5
The basics for InfoSpace. Also added InfoSpace data to area by default, older files allowed to have nothing here (space empty). (prevents reported crasher in switching space info to others). Also: added ifdeffed code in readfile.c to debug missing memory frees from data read from files. (instead of "data from SCR" it will print the actual struct names).
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenloader/intern/readfile.c16
-rw-r--r--source/blender/editors/Makefile2
-rw-r--r--source/blender/editors/SConscript1
-rw-r--r--source/blender/editors/include/ED_space_api.h1
-rw-r--r--source/blender/editors/screen/screen_edit.c68
-rw-r--r--source/blender/editors/screen/screen_intern.h23
-rw-r--r--source/blender/editors/screen/screen_ops.c42
-rw-r--r--source/blender/editors/space_api/spacetypes.c1
-rw-r--r--source/blender/editors/space_info/Makefile53
-rw-r--r--source/blender/editors/space_info/SConscript9
-rw-r--r--source/blender/editors/space_info/info_header.c189
-rw-r--r--source/blender/editors/space_info/info_intern.h39
-rw-r--r--source/blender/editors/space_info/space_info.c235
13 files changed, 620 insertions, 59 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index d62c4e62535..db6d6ba801e 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4206,8 +4206,12 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
sa->type= NULL; /* spacetype callbacks */
/* accident can happen when read/save new file with older version */
- if(sa->spacedata.first==NULL && sa->spacetype>SPACE_NLA)
- sa->spacetype= SPACE_EMPTY;
+ /* 2.50: we now always add spacedata for info */
+ if(sa->spacedata.first==NULL) {
+ SpaceInfo *sinfo= MEM_callocN(sizeof(SpaceInfo), "spaceinfo");
+ sa->spacetype= SPACE_INFO;
+ BLI_addtail(&sa->spacedata, sinfo);
+ }
for(pa= sa->panels.first; pa; pa=pa->next) {
pa->paneltab= newdataadr(fd, pa->paneltab);
@@ -4513,15 +4517,17 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID
while(bhead && bhead->code==DATA) {
void *data;
- /* XXX BAD DEBUGGING OPTION TO GIVE NAMES */
+#if 0
+ /* XXX DUMB DEBUGGING OPTION TO GIVE NAMES for guarded malloc errors */
short *sp= fd->filesdna->structs[bhead->SDNAnr];
char *allocname = fd->filesdna->types[ sp[0] ];
char *tmp= malloc(100);
strcpy(tmp, allocname);
-
data= read_struct(fd, bhead, tmp);
-
+#endif
+ data= read_struct(fd, bhead, allocname);
+
if (data) {
oldnewmap_insert(fd->datamap, bhead->old, data, 0);
}
diff --git a/source/blender/editors/Makefile b/source/blender/editors/Makefile
index dc90db4f47b..7503f5a025b 100644
--- a/source/blender/editors/Makefile
+++ b/source/blender/editors/Makefile
@@ -29,6 +29,6 @@
# Bounces make to subdirectories.
SOURCEDIR = source/blender/editors
-DIRS = datafiles screen space_outliner space_time space_view3d interface util space_api space_ipo space_image space_node space_buttons
+DIRS = datafiles screen space_outliner space_time space_view3d interface util space_api space_ipo space_image space_node space_buttons space_info
include nan_subdirs.mk
diff --git a/source/blender/editors/SConscript b/source/blender/editors/SConscript
index b21bcd3f221..b2f391afe54 100644
--- a/source/blender/editors/SConscript
+++ b/source/blender/editors/SConscript
@@ -15,5 +15,6 @@ SConscript(['datafiles/SConscript',
'space_image/SConscript',
'space_node/SConscript',
'space_buttons/SConscript',
+ 'space_info/SConscript',
'transform/SConscript',
'screen/SConscript'])
diff --git a/source/blender/editors/include/ED_space_api.h b/source/blender/editors/include/ED_space_api.h
index b1eb4d152cb..de406af30c9 100644
--- a/source/blender/editors/include/ED_space_api.h
+++ b/source/blender/editors/include/ED_space_api.h
@@ -39,6 +39,7 @@ void ED_spacetype_ipo(void);
void ED_spacetype_image(void);
void ED_spacetype_node(void);
void ED_spacetype_buttons(void);
+void ED_spacetype_info(void);
#endif /* ED_AREA_H */
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 24778674dda..3af5ac2652c 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -521,6 +521,47 @@ int screen_area_join(bScreen* scr, ScrArea *sa1, ScrArea *sa2)
return 1;
}
+void select_connected_scredge(bScreen *sc, ScrEdge *edge)
+{
+ ScrEdge *se;
+ ScrVert *sv;
+ int oneselected;
+ char dir;
+
+ /* select connected, only in the right direction */
+ /* 'dir' is the direction of EDGE */
+
+ if(edge->v1->vec.x==edge->v2->vec.x) dir= 'v';
+ else dir= 'h';
+
+ sv= sc->vertbase.first;
+ while(sv) {
+ sv->flag = 0;
+ sv= sv->next;
+ }
+
+ edge->v1->flag= 1;
+ edge->v2->flag= 1;
+
+ oneselected= 1;
+ while(oneselected) {
+ se= sc->edgebase.first;
+ oneselected= 0;
+ while(se) {
+ if(se->v1->flag + se->v2->flag==1) {
+ if(dir=='h') if(se->v1->vec.y==se->v2->vec.y) {
+ se->v1->flag= se->v2->flag= 1;
+ oneselected= 1;
+ }
+ if(dir=='v') if(se->v1->vec.x==se->v2->vec.x) {
+ se->v1->flag= se->v2->flag= 1;
+ oneselected= 1;
+ }
+ }
+ se= se->next;
+ }
+ }
+}
/* test if screen vertices should be scaled */
static void screen_test_scale(bScreen *sc, int winsizex, int winsizey)
@@ -580,6 +621,33 @@ static void screen_test_scale(bScreen *sc, int winsizex, int winsizey)
if(sa->v1==sa->v2 || sa->v3==sa->v4 || sa->v2==sa->v3)
screen_delarea(sc, sa);
}
+
+ /* make each window at least HEADERY high */
+ for(sa= sc->areabase.first; sa; sa= sa->next) {
+ int headery= HEADERY+1;
+
+ if(sa->v1->vec.y+headery > sa->v2->vec.y) {
+ /* lower edge */
+ ScrEdge *se= screen_findedge(sc, sa->v4, sa->v1);
+ if(se && sa->v1!=sa->v2 ) {
+ int yval;
+
+ select_connected_scredge(sc, se);
+
+ /* all selected vertices get the right offset */
+ yval= sa->v2->vec.y-headery;
+ sv= sc->vertbase.first;
+ while(sv) {
+ /* if is a collapsed area */
+ if(sv!=sa->v2 && sv!=sa->v3) {
+ if(sv->flag) sv->vec.y= yval;
+ }
+ sv= sv->next;
+ }
+ }
+ }
+ }
+
}
/* *********************** DRAWING **************************************** */
diff --git a/source/blender/editors/screen/screen_intern.h b/source/blender/editors/screen/screen_intern.h
index 6d8bd9e0434..7b44b1910c7 100644
--- a/source/blender/editors/screen/screen_intern.h
+++ b/source/blender/editors/screen/screen_intern.h
@@ -32,19 +32,20 @@
struct wmWindow;
/* area.c */
-void area_copy_data(ScrArea *sa1, ScrArea *sa2, int swap_space);
+void area_copy_data (ScrArea *sa1, ScrArea *sa2, int swap_space);
/* screen_edit.c */
-bScreen *screen_add(struct wmWindow *win, char *name);
-ScrEdge *screen_findedge(bScreen *sc, ScrVert *v1, ScrVert *v2);
-ScrArea *area_split(wmWindow *win, bScreen *sc, ScrArea *sa, char dir, float fac);
-int screen_area_join(bScreen* scr, ScrArea *sa1, ScrArea *sa2);
-int area_getorientation(bScreen *screen, ScrArea *sa, ScrArea *sb);
-
-void removenotused_scrverts(bScreen *sc);
-void removedouble_scrverts(bScreen *sc);
-void removedouble_scredges(bScreen *sc);
-void removenotused_scredges(bScreen *sc);
+bScreen *screen_add(struct wmWindow *win, char *name);
+ScrEdge *screen_findedge(bScreen *sc, ScrVert *v1, ScrVert *v2);
+ScrArea *area_split(wmWindow *win, bScreen *sc, ScrArea *sa, char dir, float fac);
+int screen_area_join(bScreen* scr, ScrArea *sa1, ScrArea *sa2);
+int area_getorientation(bScreen *screen, ScrArea *sa, ScrArea *sb);
+void select_connected_scredge(bScreen *sc, ScrEdge *edge);
+
+void removenotused_scrverts(bScreen *sc);
+void removedouble_scrverts(bScreen *sc);
+void removedouble_scredges(bScreen *sc);
+void removenotused_scredges(bScreen *sc);
#endif /* ED_SCREEN_INTERN_H */
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 2a065afca69..e36e843b846 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -416,48 +416,6 @@ static void area_move_set_limits(bScreen *sc, int dir, int *bigger, int *smaller
}
}
-static void select_connected_scredge(bScreen *sc, ScrEdge *edge)
-{
- ScrEdge *se;
- ScrVert *sv;
- int oneselected;
- char dir;
-
- /* select connected, only in the right direction */
- /* 'dir' is the direction of EDGE */
-
- if(edge->v1->vec.x==edge->v2->vec.x) dir= 'v';
- else dir= 'h';
-
- sv= sc->vertbase.first;
- while(sv) {
- sv->flag = 0;
- sv= sv->next;
- }
-
- edge->v1->flag= 1;
- edge->v2->flag= 1;
-
- oneselected= 1;
- while(oneselected) {
- se= sc->edgebase.first;
- oneselected= 0;
- while(se) {
- if(se->v1->flag + se->v2->flag==1) {
- if(dir=='h') if(se->v1->vec.y==se->v2->vec.y) {
- se->v1->flag= se->v2->flag= 1;
- oneselected= 1;
- }
- if(dir=='v') if(se->v1->vec.x==se->v2->vec.x) {
- se->v1->flag= se->v2->flag= 1;
- oneselected= 1;
- }
- }
- se= se->next;
- }
- }
-}
-
/* validate selection inside screen, set variables OK */
/* return 0: init failed */
static int area_move_init (bContext *C, wmOperator *op)
diff --git a/source/blender/editors/space_api/spacetypes.c b/source/blender/editors/space_api/spacetypes.c
index 466eb3e4fe6..063dcb6c1a0 100644
--- a/source/blender/editors/space_api/spacetypes.c
+++ b/source/blender/editors/space_api/spacetypes.c
@@ -68,6 +68,7 @@ void ED_spacetypes_init(void)
ED_spacetype_image();
ED_spacetype_node();
ED_spacetype_buttons();
+ ED_spacetype_info();
// ...
/* register operator types for screen and all spaces */
diff --git a/source/blender/editors/space_info/Makefile b/source/blender/editors/space_info/Makefile
new file mode 100644
index 00000000000..31401d8f628
--- /dev/null
+++ b/source/blender/editors/space_info/Makefile
@@ -0,0 +1,53 @@
+#
+# $Id: Makefile 14 2002-10-13 15:57:19Z hans $
+#
+# ***** 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) 2007 Blender Foundation
+# All rights reserved.
+#
+# The Original Code is: all of this file.
+#
+# Contributor(s): none yet.
+#
+# ***** END GPL LICENSE BLOCK *****
+#
+# Makes module object directory and bounces make to subdirectories.
+
+LIBNAME = ed_info
+DIR = $(OCGDIR)/blender/$(LIBNAME)
+
+include nan_compile.mk
+
+CFLAGS += $(LEVEL_1_C_WARNINGS)
+
+CPPFLAGS += -I$(NAN_GLEW)/include
+CPPFLAGS += -I$(OPENGL_HEADERS)
+
+# not very neat....
+CPPFLAGS += -I../../windowmanager
+CPPFLAGS += -I../../blenloader
+CPPFLAGS += -I../../blenkernel
+CPPFLAGS += -I../../blenlib
+CPPFLAGS += -I../../makesdna
+CPPFLAGS += -I../../imbuf
+CPPFLAGS += -I../../python
+CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
+
+# own include
+
+CPPFLAGS += -I../include
diff --git a/source/blender/editors/space_info/SConscript b/source/blender/editors/space_info/SConscript
new file mode 100644
index 00000000000..c967cf9c4b6
--- /dev/null
+++ b/source/blender/editors/space_info/SConscript
@@ -0,0 +1,9 @@
+#!/usr/bin/python
+Import ('env')
+
+sources = env.Glob('*.c')
+
+incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
+incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
+
+env.BlenderLib ( 'bf_editors_space_info', sources, Split(incs), [], libtype=['core','intern'], priority=[35, 40] )
diff --git a/source/blender/editors/space_info/info_header.c b/source/blender/editors/space_info/info_header.c
new file mode 100644
index 00000000000..e41177f196a
--- /dev/null
+++ b/source/blender/editors/space_info/info_header.c
@@ -0,0 +1,189 @@
+/**
+ * $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) 2008 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <string.h>
+#include <stdio.h>
+
+#include "DNA_space_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_windowmanager_types.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_blenlib.h"
+
+#include "BKE_global.h"
+#include "BKE_screen.h"
+
+#include "ED_screen.h"
+#include "ED_util.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "BIF_gl.h"
+#include "BIF_glutil.h"
+
+#include "UI_interface.h"
+#include "UI_resources.h"
+#include "UI_view2d.h"
+
+#include "info_intern.h"
+
+
+/* ************************ header area region *********************** */
+
+static void do_viewmenu(bContext *C, void *arg, int event)
+{
+
+}
+
+static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
+{
+ ScrArea *curarea= C->area;
+ uiBlock *block;
+ short yco= 0, menuwidth=120;
+
+ block= uiBeginBlock(C, handle->region, "dummy_viewmenu", UI_EMBOSSP, UI_HELV);
+ uiBlockSetButmFunc(block, do_viewmenu, NULL);
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Nothing yet", 0, yco-=20,
+ menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
+
+ if(curarea->headertype==HEADERTOP) {
+ uiBlockSetDirection(block, UI_DOWN);
+ }
+ else {
+ uiBlockSetDirection(block, UI_TOP);
+ uiBlockFlipOrder(block);
+ }
+
+ uiTextBoundsBlock(block, 50);
+ uiEndBlock(C, block);
+
+ return block;
+}
+
+#define B_NEWSPACE 100
+
+static void do_info_buttons(bContext *C, void *arg, int event)
+{
+ switch(event) {
+ case B_NEWSPACE:
+ ED_newspace(C->area, C->area->butspacetype);
+ WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL);
+ break;
+ }
+}
+
+
+void info_header_buttons(const bContext *C, ARegion *ar)
+{
+ ScrArea *sa= C->area;
+ uiBlock *block;
+ int xco, yco= 3;
+
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ uiBlockSetHandleFunc(block, do_info_buttons, NULL);
+
+ if(ED_screen_area_active(C)) uiBlockSetCol(block, TH_HEADER);
+ else uiBlockSetCol(block, TH_HEADERDESEL);
+
+ xco = 8;
+
+ uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D,
+ windowtype_pup(), xco, yco, XIC+10, YIC,
+ &(C->area->butspacetype), 1.0, SPACEICONMAX, 0, 0,
+ "Displays Current Window Type. "
+ "Click for menu of available types.");
+
+ xco += XIC + 14;
+
+ uiBlockSetEmboss(block, UI_EMBOSSN);
+ if (sa->flag & HEADER_NO_PULLDOWN) {
+ uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, 0,
+ ICON_DISCLOSURE_TRI_RIGHT,
+ xco,yco,XIC,YIC-2,
+ &(sa->flag), 0, 0, 0, 0,
+ "Show pulldown menus");
+ }
+ else {
+ uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, 0,
+ ICON_DISCLOSURE_TRI_DOWN,
+ xco,yco,XIC,YIC-2,
+ &(sa->flag), 0, 0, 0, 0,
+ "Hide pulldown menus");
+ }
+ uiBlockSetEmboss(block, UI_EMBOSS);
+ xco+=XIC;
+
+ if((sa->flag & HEADER_NO_PULLDOWN)==0) {
+ int xmax;
+
+ /* pull down menus */
+ uiBlockSetEmboss(block, UI_EMBOSSP);
+
+ xmax= GetButStringLength("File");
+ uiDefPulldownBut(block, dummy_viewmenu, C->area, "File", xco, yco, xmax-3, 22, "");
+ xco+= xmax;
+
+ xmax= GetButStringLength("Add");
+ uiDefPulldownBut(block, dummy_viewmenu, C->area, "Add", xco, yco, xmax-3, 22, "");
+ xco+= xmax;
+
+ xmax= GetButStringLength("Timeline");
+ uiDefPulldownBut(block, dummy_viewmenu, C->area, "Timeline", xco, yco, xmax-3, 22, "");
+ xco+= xmax;
+
+ xmax= GetButStringLength("Game");
+ uiDefPulldownBut(block, dummy_viewmenu, C->area, "Game", xco, yco, xmax-3, 22, "");
+ xco+= xmax;
+
+ xmax= GetButStringLength("Render");
+ uiDefPulldownBut(block, dummy_viewmenu, C->area, "Render", xco, yco, xmax-3, 22, "");
+ xco+= xmax;
+
+ xmax= GetButStringLength("Help");
+ uiDefPulldownBut(block, dummy_viewmenu, NULL, "Help", xco, yco, xmax-3, 22, "");
+ xco+= xmax;
+
+
+
+ }
+
+ uiBlockSetEmboss(block, UI_EMBOSS);
+
+ /* always as last */
+ sa->headbutlen= xco+XIC+80; // +80 because the last button is not an icon
+
+ uiEndBlock(C, block);
+ uiDrawBlock(block);
+}
+
+
diff --git a/source/blender/editors/space_info/info_intern.h b/source/blender/editors/space_info/info_intern.h
new file mode 100644
index 00000000000..213c0688f20
--- /dev/null
+++ b/source/blender/editors/space_info/info_intern.h
@@ -0,0 +1,39 @@
+/**
+ * $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) 2008 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef ED_INFO_INTERN_H
+#define ED_INFO_INTERN_H
+
+/* internal exports only */
+
+
+/* info_header.c */
+void info_header_buttons(const bContext *C, ARegion *ar);
+
+
+#endif /* ED_INFO_INTERN_H */
+
diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c
new file mode 100644
index 00000000000..7a54297a2f3
--- /dev/null
+++ b/source/blender/editors/space_info/space_info.c
@@ -0,0 +1,235 @@
+/**
+ * $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) 2008 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <string.h>
+#include <stdio.h>
+
+#include "DNA_object_types.h"
+#include "DNA_space_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_arithb.h"
+#include "BLI_rand.h"
+
+#include "BKE_colortools.h"
+#include "BKE_global.h"
+#include "BKE_screen.h"
+
+#include "ED_space_api.h"
+#include "ED_screen.h"
+
+#include "BIF_gl.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "UI_interface.h"
+#include "UI_resources.h"
+#include "UI_view2d.h"
+
+#include "ED_markers.h"
+
+#include "info_intern.h" // own include
+
+/* ******************** default callbacks for info space ***************** */
+
+static SpaceLink *info_new(void)
+{
+ ARegion *ar;
+ SpaceInfo *sinfo;
+
+ sinfo= MEM_callocN(sizeof(SpaceInfo), "initinfo");
+ sinfo->spacetype= SPACE_INFO;
+
+ /* header */
+ ar= MEM_callocN(sizeof(ARegion), "header for info");
+
+ BLI_addtail(&sinfo->regionbase, ar);
+ ar->regiontype= RGN_TYPE_HEADER;
+ ar->alignment= RGN_ALIGN_BOTTOM;
+ UI_view2d_header_default(&ar->v2d);
+
+ /* main area */
+ ar= MEM_callocN(sizeof(ARegion), "main area for info");
+
+ BLI_addtail(&sinfo->regionbase, ar);
+ ar->regiontype= RGN_TYPE_WINDOW;
+
+ /* channel list region XXX */
+
+
+ return (SpaceLink *)sinfo;
+}
+
+/* not spacelink itself */
+static void info_free(SpaceLink *sl)
+{
+// SpaceInfo *sinfo= (SpaceInfo*) sl;
+
+}
+
+
+/* spacetype; init callback */
+static void info_init(struct wmWindowManager *wm, ScrArea *sa)
+{
+
+}
+
+static SpaceLink *info_duplicate(SpaceLink *sl)
+{
+ SpaceInfo *sinfon= MEM_dupallocN(sl);
+
+ /* clear or remove stuff from old */
+
+ return (SpaceLink *)sinfon;
+}
+
+
+
+/* add handlers, stuff you only do once or on area/region changes */
+static void info_main_area_init(wmWindowManager *wm, ARegion *ar)
+{
+ ListBase *keymap;
+
+ UI_view2d_size_update(&ar->v2d, ar->winx, ar->winy);
+
+ /* own keymap */
+ keymap= WM_keymap_listbase(wm, "info", SPACE_INFO, 0); /* XXX weak? */
+ WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct);
+}
+
+static void info_main_area_draw(const bContext *C, ARegion *ar)
+{
+ /* draw entirely, view changes should be handled here */
+ // SpaceInfo *sinfo= C->area->spacedata.first;
+ View2D *v2d= &ar->v2d;
+ float col[3];
+
+ /* clear and setup matrix */
+ UI_GetThemeColor3fv(TH_BACK, col);
+ glClearColor(col[0], col[1], col[2], 0.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ UI_view2d_view_ortho(C, v2d);
+
+ /* data... */
+
+
+ /* reset view matrix */
+ UI_view2d_view_restore(C);
+
+ /* scrollers? */
+}
+
+void info_operatortypes(void)
+{
+
+}
+
+void info_keymap(struct wmWindowManager *wm)
+{
+
+}
+
+/* add handlers, stuff you only do once or on area/region changes */
+static void info_header_area_init(wmWindowManager *wm, ARegion *ar)
+{
+ UI_view2d_size_update(&ar->v2d, ar->winx, ar->winy);
+}
+
+static void info_header_area_draw(const bContext *C, ARegion *ar)
+{
+ float col[3];
+
+ /* clear */
+ if(ED_screen_area_active(C))
+ UI_GetThemeColor3fv(TH_HEADER, col);
+ else
+ UI_GetThemeColor3fv(TH_HEADERDESEL, col);
+
+ glClearColor(col[0], col[1], col[2], 0.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ /* set view2d view matrix for scrolling (without scrollers) */
+ UI_view2d_view_ortho(C, &ar->v2d);
+
+ info_header_buttons(C, ar);
+
+ /* restore view matrix? */
+ UI_view2d_view_restore(C);
+}
+
+static void info_main_area_listener(ARegion *ar, wmNotifier *wmn)
+{
+ /* context changes */
+}
+
+/* only called once, from space/spacetypes.c */
+void ED_spacetype_info(void)
+{
+ SpaceType *st= MEM_callocN(sizeof(SpaceType), "spacetype info");
+ ARegionType *art;
+
+ st->spaceid= SPACE_INFO;
+
+ st->new= info_new;
+ st->free= info_free;
+ st->init= info_init;
+ st->duplicate= info_duplicate;
+ st->operatortypes= info_operatortypes;
+ st->keymap= info_keymap;
+
+ /* regions: main window */
+ art= MEM_callocN(sizeof(ARegionType), "spacetype info region");
+ art->regionid = RGN_TYPE_WINDOW;
+ art->init= info_main_area_init;
+ art->draw= info_main_area_draw;
+ art->listener= info_main_area_listener;
+ art->keymapflag= ED_KEYMAP_VIEW2D;
+
+ BLI_addhead(&st->regiontypes, art);
+
+ /* regions: header */
+ art= MEM_callocN(sizeof(ARegionType), "spacetype info region");
+ art->regionid = RGN_TYPE_HEADER;
+ art->minsizey= HEADERY;
+ art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
+
+ art->init= info_header_area_init;
+ art->draw= info_header_area_draw;
+
+ BLI_addhead(&st->regiontypes, art);
+
+
+ BKE_spacetype_register(st);
+}
+