2002-10-12 11:37:38 +00:00
|
|
|
/**
|
|
|
|
|
* $Id$
|
|
|
|
|
*
|
|
|
|
|
* ***** BEGIN GPL/BL DUAL 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. The Blender
|
|
|
|
|
* Foundation also sells licenses for use in proprietary software under
|
|
|
|
|
* the Blender License. See http://www.blender.org/BL/ for information
|
|
|
|
|
* about this.
|
|
|
|
|
*
|
|
|
|
|
* 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) 2001-2002 by NaN Holding BV.
|
|
|
|
|
* All rights reserved.
|
|
|
|
|
*
|
|
|
|
|
* The Original Code is: all of this file.
|
|
|
|
|
*
|
|
|
|
|
* Contributor(s): none yet.
|
|
|
|
|
*
|
|
|
|
|
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
2003-04-30 13:22:26 +00:00
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* - here initialize and free and handling SPACE data
|
2002-10-12 11:37:38 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <string.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
2002-11-25 12:02:15 +00:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
|
#include <config.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
#ifdef WIN32
|
|
|
|
|
#include "BLI_winstuff.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#include "MEM_guardedalloc.h"
|
|
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
#ifdef INTERNATIONAL
|
|
|
|
|
#include "BIF_language.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
#include "IMB_imbuf_types.h"
|
|
|
|
|
#include "IMB_imbuf.h"
|
|
|
|
|
|
|
|
|
|
#include "BLI_blenlib.h"
|
|
|
|
|
#include "BLI_arithb.h"
|
|
|
|
|
#include "BLI_editVert.h"
|
|
|
|
|
#include "BLI_linklist.h"
|
|
|
|
|
|
|
|
|
|
#include "DNA_action_types.h"
|
|
|
|
|
#include "DNA_curve_types.h"
|
|
|
|
|
#include "DNA_image_types.h"
|
|
|
|
|
#include "DNA_ipo_types.h"
|
|
|
|
|
#include "DNA_mesh_types.h"
|
|
|
|
|
#include "DNA_object_types.h"
|
|
|
|
|
#include "DNA_scene_types.h"
|
|
|
|
|
#include "DNA_screen_types.h"
|
|
|
|
|
#include "DNA_sequence_types.h"
|
|
|
|
|
#include "DNA_sound_types.h"
|
|
|
|
|
#include "DNA_space_types.h"
|
|
|
|
|
#include "DNA_userdef_types.h"
|
|
|
|
|
#include "DNA_view2d_types.h"
|
|
|
|
|
#include "DNA_view3d_types.h"
|
|
|
|
|
|
|
|
|
|
#include "BKE_blender.h"
|
|
|
|
|
#include "BKE_curve.h"
|
|
|
|
|
#include "BKE_displist.h"
|
|
|
|
|
#include "BKE_global.h"
|
|
|
|
|
#include "BKE_ipo.h"
|
|
|
|
|
#include "BKE_main.h"
|
|
|
|
|
#include "BKE_scene.h"
|
|
|
|
|
#include "BKE_utildefines.h"
|
|
|
|
|
|
2003-10-07 18:24:02 +00:00
|
|
|
#include "BIF_butspace.h"
|
2002-10-12 11:37:38 +00:00
|
|
|
#include "BIF_drawimage.h"
|
|
|
|
|
#include "BIF_drawseq.h"
|
|
|
|
|
#include "BIF_drawtext.h"
|
|
|
|
|
#include "BIF_editarmature.h"
|
|
|
|
|
#include "BIF_editfont.h"
|
|
|
|
|
#include "BIF_editika.h"
|
|
|
|
|
#include "BIF_editkey.h"
|
|
|
|
|
#include "BIF_editlattice.h"
|
|
|
|
|
#include "BIF_editmesh.h"
|
|
|
|
|
#include "BIF_editoops.h"
|
|
|
|
|
#include "BIF_editseq.h"
|
|
|
|
|
#include "BIF_editsima.h"
|
|
|
|
|
#include "BIF_editsound.h"
|
|
|
|
|
#include "BIF_editview.h"
|
|
|
|
|
#include "BIF_gl.h"
|
|
|
|
|
#include "BIF_imasel.h"
|
|
|
|
|
#include "BIF_interface.h"
|
|
|
|
|
#include "BIF_mywindow.h"
|
|
|
|
|
#include "BIF_oops.h"
|
|
|
|
|
#include "BIF_resources.h"
|
|
|
|
|
#include "BIF_screen.h"
|
|
|
|
|
#include "BIF_space.h"
|
|
|
|
|
#include "BIF_spacetypes.h"
|
|
|
|
|
#include "BIF_toets.h"
|
|
|
|
|
#include "BIF_toolbox.h"
|
|
|
|
|
#include "BIF_usiblender.h"
|
|
|
|
|
#include "BIF_previewrender.h"
|
|
|
|
|
|
|
|
|
|
#include "BSE_edit.h"
|
|
|
|
|
#include "BSE_view.h"
|
|
|
|
|
#include "BSE_editipo.h"
|
|
|
|
|
#include "BSE_drawipo.h"
|
|
|
|
|
#include "BSE_drawview.h"
|
|
|
|
|
#include "BSE_drawnla.h"
|
|
|
|
|
#include "BSE_filesel.h"
|
|
|
|
|
#include "BSE_headerbuttons.h"
|
|
|
|
|
#include "BSE_editnla_types.h"
|
|
|
|
|
|
|
|
|
|
#include "BDR_vpaint.h"
|
|
|
|
|
#include "BDR_editmball.h"
|
|
|
|
|
#include "BDR_editobject.h"
|
|
|
|
|
#include "BDR_editcurve.h"
|
|
|
|
|
#include "BDR_editface.h"
|
|
|
|
|
#include "BDR_drawmesh.h"
|
2003-10-07 18:24:02 +00:00
|
|
|
#include "BDR_drawobject.h"
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
#include "BLO_readfile.h" /* for BLO_blendhandle_close */
|
|
|
|
|
|
|
|
|
|
#include "mydevice.h"
|
|
|
|
|
#include "blendef.h"
|
|
|
|
|
#include "datatoc.h"
|
|
|
|
|
|
|
|
|
|
#include "BPY_extern.h" // Blender Python library
|
|
|
|
|
|
|
|
|
|
#include "TPT_DependKludge.h"
|
|
|
|
|
#ifdef NAN_TPT
|
|
|
|
|
#include "BSE_trans_types.h"
|
2002-11-29 17:07:58 +00:00
|
|
|
#include "IMG_Api.h"
|
2002-10-12 11:37:38 +00:00
|
|
|
#endif /* NAN_TPT */
|
|
|
|
|
|
|
|
|
|
#include "SYS_System.h" /* for the user def menu ... should move elsewhere. */
|
|
|
|
|
|
|
|
|
|
extern void StartKetsjiShell(ScrArea *area, char* startscenename, struct Main* maggie, int always_use_expand_framing);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* When the mipmap setting changes, we want to redraw the view right
|
|
|
|
|
* away to reflect this setting.
|
|
|
|
|
*/
|
|
|
|
|
void space_mipmap_button_function(int event);
|
|
|
|
|
|
|
|
|
|
unsigned short convert_for_nonumpad(unsigned short event);
|
|
|
|
|
void free_soundspace(SpaceSound *ssound);
|
|
|
|
|
|
2003-10-15 12:26:26 +00:00
|
|
|
/* *************************************** */
|
|
|
|
|
|
|
|
|
|
/* don't know yet how the handlers will evolve, for simplicity
|
|
|
|
|
i choose for an array with eventcodes, this saves in a file!
|
|
|
|
|
*/
|
2003-10-15 16:01:08 +00:00
|
|
|
void add_blockhandler(ScrArea *sa, short eventcode, short val)
|
2003-10-15 12:26:26 +00:00
|
|
|
{
|
|
|
|
|
SpaceLink *sl= sa->spacedata.first;
|
|
|
|
|
short a;
|
|
|
|
|
|
|
|
|
|
// find empty spot
|
2003-10-15 16:01:08 +00:00
|
|
|
for(a=0; a<SPACE_MAXHANDLER; a+=2) {
|
2003-10-16 00:17:24 +00:00
|
|
|
if( sl->blockhandler[a]==eventcode ) {
|
|
|
|
|
sl->blockhandler[a+1]= val;
|
|
|
|
|
break;
|
|
|
|
|
}
|
2003-10-15 12:26:26 +00:00
|
|
|
else if( sl->blockhandler[a]==0) {
|
|
|
|
|
sl->blockhandler[a]= eventcode;
|
2003-10-15 16:01:08 +00:00
|
|
|
sl->blockhandler[a+1]= val;
|
2003-10-15 12:26:26 +00:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-10-15 16:01:08 +00:00
|
|
|
if(a==SPACE_MAXHANDLER) printf("error; max (4) blockhandlers reached!\n");
|
2003-10-15 12:26:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void rem_blockhandler(ScrArea *sa, short eventcode)
|
|
|
|
|
{
|
|
|
|
|
SpaceLink *sl= sa->spacedata.first;
|
|
|
|
|
short a;
|
|
|
|
|
|
2003-10-15 16:01:08 +00:00
|
|
|
for(a=0; a<SPACE_MAXHANDLER; a+=2) {
|
2003-10-15 12:26:26 +00:00
|
|
|
if( sl->blockhandler[a]==eventcode) {
|
|
|
|
|
sl->blockhandler[a]= 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
/* ************* SPACE: VIEW3D ************* */
|
|
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
/* extern void drawview3dspace(ScrArea *sa, void *spacedata); BSE_drawview.h */
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
void copy_view3d_lock(short val)
|
|
|
|
|
{
|
|
|
|
|
bScreen *sc;
|
|
|
|
|
int bit;
|
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
/* from G.scene copy to the other views */
|
2002-10-12 11:37:38 +00:00
|
|
|
sc= G.main->screen.first;
|
|
|
|
|
|
|
|
|
|
while(sc) {
|
|
|
|
|
if(sc->scene==G.scene) {
|
|
|
|
|
ScrArea *sa= sc->areabase.first;
|
|
|
|
|
while(sa) {
|
|
|
|
|
SpaceLink *sl= sa->spacedata.first;
|
|
|
|
|
while(sl) {
|
|
|
|
|
if(sl->spacetype==SPACE_OOPS && val==REDRAW) {
|
|
|
|
|
if(sa->win) scrarea_queue_winredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_VIEW3D) {
|
|
|
|
|
View3D *vd= (View3D*) sl;
|
|
|
|
|
if(vd->scenelock && vd->localview==0) {
|
|
|
|
|
vd->lay= G.scene->lay;
|
|
|
|
|
vd->camera= G.scene->camera;
|
|
|
|
|
|
|
|
|
|
if(vd->camera==0 && vd->persp>1) vd->persp= 1;
|
|
|
|
|
|
|
|
|
|
if( (vd->lay & vd->layact) == 0) {
|
|
|
|
|
bit= 0;
|
|
|
|
|
while(bit<32) {
|
|
|
|
|
if(vd->lay & (1<<bit)) {
|
|
|
|
|
vd->layact= 1<<bit;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
bit++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(val==REDRAW && vd==sa->spacedata.first) {
|
2003-07-04 20:15:13 +00:00
|
|
|
if(sa->win) scrarea_queue_redraw(sa);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sl= sl->next;
|
|
|
|
|
}
|
|
|
|
|
sa= sa->next;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sc= sc->id.next;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void handle_view3d_lock()
|
|
|
|
|
{
|
|
|
|
|
if (G.vd != NULL) {
|
|
|
|
|
if(G.vd->localview==0 && G.vd->scenelock && curarea->spacetype==SPACE_VIEW3D) {
|
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
/* copy to scene */
|
2002-10-12 11:37:38 +00:00
|
|
|
G.scene->lay= G.vd->lay;
|
|
|
|
|
G.scene->camera= G.vd->camera;
|
|
|
|
|
|
|
|
|
|
copy_view3d_lock(REDRAW);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void space_set_commmandline_options(void) {
|
|
|
|
|
SYS_SystemHandle syshandle;
|
|
|
|
|
int a;
|
|
|
|
|
|
|
|
|
|
if ( (syshandle = SYS_GetSystem()) ) {
|
|
|
|
|
/* User defined settings */
|
|
|
|
|
a= (U.gameflags & USERDEF_VERTEX_ARRAYS);
|
|
|
|
|
SYS_WriteCommandLineInt(syshandle, "vertexarrays", a);
|
|
|
|
|
|
|
|
|
|
a= (U.gameflags & USERDEF_DISABLE_SOUND);
|
|
|
|
|
SYS_WriteCommandLineInt(syshandle, "noaudio", a);
|
|
|
|
|
|
|
|
|
|
a= (U.gameflags & USERDEF_DISABLE_MIPMAP);
|
|
|
|
|
set_mipmap(!a);
|
|
|
|
|
SYS_WriteCommandLineInt(syshandle, "nomipmap", a);
|
|
|
|
|
|
|
|
|
|
/* File specific settings: */
|
|
|
|
|
/* Only test the first one. These two are switched
|
|
|
|
|
* simultaneously. */
|
|
|
|
|
a= (G.fileflags & G_FILE_SHOW_FRAMERATE);
|
|
|
|
|
SYS_WriteCommandLineInt(syshandle, "show_framerate", a);
|
|
|
|
|
SYS_WriteCommandLineInt(syshandle, "show_profile", a);
|
|
|
|
|
|
|
|
|
|
/* When in wireframe mode, always draw debug props. */
|
|
|
|
|
if (G.vd) {
|
|
|
|
|
a = ( (G.fileflags & G_FILE_SHOW_DEBUG_PROPS)
|
|
|
|
|
|| (G.vd->drawtype == OB_WIRE)
|
|
|
|
|
|| (G.vd->drawtype == OB_SOLID) );
|
|
|
|
|
SYS_WriteCommandLineInt(syshandle, "show_properties", a);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
a= (G.fileflags & G_FILE_ENABLE_ALL_FRAMES);
|
|
|
|
|
SYS_WriteCommandLineInt(syshandle, "fixedtime", a);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
#if GAMEBLENDER == 1
|
2002-10-12 11:37:38 +00:00
|
|
|
/**
|
|
|
|
|
* These two routines imported from the gameengine,
|
|
|
|
|
* I suspect a lot of the resetting stuff is cruft
|
|
|
|
|
* and can be removed, but it should be checked.
|
|
|
|
|
*/
|
|
|
|
|
static void SaveState(void)
|
|
|
|
|
{
|
|
|
|
|
glPushAttrib(GL_ALL_ATTRIB_BITS);
|
|
|
|
|
|
|
|
|
|
init_realtime_GL();
|
|
|
|
|
init_gl_stuff();
|
|
|
|
|
|
|
|
|
|
if(G.scene->camera==0 || G.scene->camera->type!=OB_CAMERA)
|
|
|
|
|
error("no (correct) camera");
|
|
|
|
|
|
|
|
|
|
waitcursor(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void RestoreState(void)
|
|
|
|
|
{
|
|
|
|
|
curarea->win_swap = 0;
|
|
|
|
|
curarea->head_swap=0;
|
|
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
|
|
|
|
allqueue(REDRAWBUTSALL, 0);
|
|
|
|
|
reset_slowparents();
|
|
|
|
|
waitcursor(0);
|
|
|
|
|
G.qual= 0;
|
|
|
|
|
glPopAttrib();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static LinkNode *save_and_reset_all_scene_cfra(void)
|
|
|
|
|
{
|
|
|
|
|
LinkNode *storelist= NULL;
|
|
|
|
|
Scene *sc;
|
|
|
|
|
|
|
|
|
|
for (sc= G.main->scene.first; sc; sc= sc->id.next) {
|
2003-07-09 16:02:39 +00:00
|
|
|
BLI_linklist_prepend(&storelist, (void*) (long) sc->r.cfra);
|
2002-10-12 11:37:38 +00:00
|
|
|
sc->r.cfra= 1;
|
|
|
|
|
|
|
|
|
|
set_scene_bg(sc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BLI_linklist_reverse(&storelist);
|
|
|
|
|
|
|
|
|
|
return storelist;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void restore_all_scene_cfra(LinkNode *storelist) {
|
|
|
|
|
LinkNode *sc_store= storelist;
|
|
|
|
|
Scene *sc;
|
|
|
|
|
|
|
|
|
|
for (sc= G.main->scene.first; sc; sc= sc->id.next) {
|
|
|
|
|
int stored_cfra= (int) sc_store->link;
|
|
|
|
|
|
|
|
|
|
sc->r.cfra= stored_cfra;
|
|
|
|
|
set_scene_bg(sc);
|
|
|
|
|
|
|
|
|
|
sc_store= sc_store->next;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BLI_linklist_free(storelist, NULL);
|
|
|
|
|
}
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
#endif
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
void start_game(void)
|
|
|
|
|
{
|
2002-11-29 17:07:58 +00:00
|
|
|
#if GAMEBLENDER == 1
|
2002-10-12 11:37:38 +00:00
|
|
|
Scene *sc, *startscene = G.scene;
|
|
|
|
|
LinkNode *scene_cfra_store;
|
|
|
|
|
|
|
|
|
|
/* XXX, silly code - the game engine can
|
|
|
|
|
* access any scene through logic, so we try
|
|
|
|
|
* to make sure each scene has a valid camera,
|
|
|
|
|
* just in case the game engine tries to use it.
|
|
|
|
|
*
|
|
|
|
|
* Better would be to make a better routine
|
|
|
|
|
* in the game engine for finding the camera.
|
|
|
|
|
* - zr
|
|
|
|
|
*/
|
|
|
|
|
for (sc= G.main->scene.first; sc; sc= sc->id.next) {
|
|
|
|
|
if (!sc->camera) {
|
|
|
|
|
Base *base;
|
|
|
|
|
|
|
|
|
|
for (base= sc->base.first; base; base= base->next)
|
|
|
|
|
if (base->object->type==OB_CAMERA)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
sc->camera= base?base->object:NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* these two lines make sure front and backbuffer are equal. for swapbuffers */
|
|
|
|
|
markdirty_all();
|
|
|
|
|
screen_swapbuffers();
|
|
|
|
|
|
|
|
|
|
/* can start from header */
|
|
|
|
|
mywinset(curarea->win);
|
|
|
|
|
|
|
|
|
|
scene_cfra_store= save_and_reset_all_scene_cfra();
|
|
|
|
|
|
|
|
|
|
BPY_end_python();
|
|
|
|
|
|
|
|
|
|
sound_stop_all_sounds();
|
|
|
|
|
|
|
|
|
|
/* Before jumping into Ketsji, we configure some settings. */
|
|
|
|
|
space_set_commmandline_options();
|
|
|
|
|
|
|
|
|
|
SaveState();
|
|
|
|
|
StartKetsjiShell(curarea, startscene->id.name+2, G.main, 1);
|
|
|
|
|
RestoreState();
|
|
|
|
|
|
|
|
|
|
BPY_start_python();
|
|
|
|
|
|
|
|
|
|
restore_all_scene_cfra(scene_cfra_store);
|
|
|
|
|
set_scene_bg(startscene);
|
|
|
|
|
|
|
|
|
|
if (G.flags & G_FLAGS_AUTOPLAY)
|
|
|
|
|
exit_usiblender();
|
|
|
|
|
|
|
|
|
|
/* groups could have changed ipo */
|
|
|
|
|
allqueue(REDRAWNLA, 0);
|
|
|
|
|
allqueue(REDRAWACTION, 0);
|
|
|
|
|
allspace(REMAKEIPO, 0);
|
|
|
|
|
allqueue(REDRAWIPO, 0);
|
2003-02-09 19:34:22 +00:00
|
|
|
#else
|
|
|
|
|
notice("Game engine is disabled in this release!");
|
2002-11-29 17:07:58 +00:00
|
|
|
#endif
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
static void changeview3dspace(ScrArea *sa, void *spacedata)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
2003-04-30 13:22:26 +00:00
|
|
|
setwinmatrixview3d(0); /* 0= no pick rect */
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Callable from editmode and faceselect mode from the
|
|
|
|
|
* moment, would be nice (and is easy) to generalize
|
|
|
|
|
* to any mode.
|
|
|
|
|
*/
|
|
|
|
|
static void align_view_to_selected(View3D *v3d)
|
|
|
|
|
{
|
|
|
|
|
int nr= pupmenu("Align view%t|To selection (top)%x2|To selection (front)%x1|To selection (side)%x0");
|
|
|
|
|
|
|
|
|
|
if (nr!=-1) {
|
|
|
|
|
int axis= nr;
|
|
|
|
|
|
2003-10-27 23:55:38 +00:00
|
|
|
if ((G.obedit) && (G.obedit->type == OB_MESH)) {
|
2002-10-12 11:37:38 +00:00
|
|
|
editmesh_align_view_to_selected(v3d, axis);
|
|
|
|
|
addqueue(v3d->area->win, REDRAW, 1);
|
|
|
|
|
} else if (G.f & G_FACESELECT) {
|
|
|
|
|
Object *obact= OBACT;
|
|
|
|
|
if (obact && obact->type==OB_MESH) {
|
|
|
|
|
Mesh *me= obact->data;
|
|
|
|
|
|
|
|
|
|
if (me->tface) {
|
|
|
|
|
faceselect_align_view_to_selected(v3d, me, axis);
|
|
|
|
|
addqueue(v3d->area->win, REDRAW, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2003-07-18 15:50:33 +00:00
|
|
|
void select_children(Object *ob, int recursive)
|
2003-04-29 16:24:56 +00:00
|
|
|
{
|
|
|
|
|
Base *base;
|
|
|
|
|
|
|
|
|
|
for (base= FIRSTBASE; base; base= base->next)
|
|
|
|
|
if (ob == base->object->parent) {
|
|
|
|
|
base->flag |= SELECT;
|
2003-07-18 15:50:33 +00:00
|
|
|
base->object->flag |= SELECT;
|
|
|
|
|
if (recursive) select_children(base->object, 1);
|
2003-04-29 16:24:56 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2003-07-18 15:50:33 +00:00
|
|
|
void select_parent(void) /* Makes parent active and de-selected OBACT */
|
|
|
|
|
{
|
2003-10-04 20:35:50 +00:00
|
|
|
Base *base, *startbase, *basact=NULL, *oldbasact;
|
2003-07-18 15:50:33 +00:00
|
|
|
|
|
|
|
|
if (!(OBACT->parent)) return;
|
|
|
|
|
BASACT->flag &= (~SELECT);
|
|
|
|
|
BASACT->object->flag &= (~SELECT);
|
|
|
|
|
startbase= FIRSTBASE;
|
|
|
|
|
if(BASACT && BASACT->next) startbase= BASACT->next;
|
|
|
|
|
base = startbase;
|
|
|
|
|
while(base) {
|
|
|
|
|
if(base->object==BASACT->object->parent) { basact=base; break; }
|
|
|
|
|
base=base->next;
|
|
|
|
|
if(base==0) base= FIRSTBASE;
|
|
|
|
|
if(base==startbase) break;
|
|
|
|
|
}
|
|
|
|
|
oldbasact = BASACT;
|
|
|
|
|
BASACT = basact;
|
|
|
|
|
basact->flag |= SELECT;
|
|
|
|
|
if(oldbasact) if(oldbasact != basact) draw_object_ext(oldbasact);
|
|
|
|
|
basact->object->flag= basact->flag;
|
|
|
|
|
draw_object_ext(basact);
|
|
|
|
|
set_active_base(basact);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void group_menu(void)
|
|
|
|
|
{
|
|
|
|
|
Base *base;
|
2003-08-14 15:18:45 +00:00
|
|
|
short nr;
|
|
|
|
|
char *str;
|
2003-07-18 15:50:33 +00:00
|
|
|
|
|
|
|
|
/* make menu string */
|
|
|
|
|
|
|
|
|
|
str= MEM_mallocN(160, "groupmenu");
|
|
|
|
|
strcpy(str, "Group selection%t|Children%x1|"
|
|
|
|
|
"Immediate children%x2|Parent%x3|"
|
|
|
|
|
"Objects on shared layers%x4");
|
|
|
|
|
|
|
|
|
|
/* here we go */
|
|
|
|
|
|
|
|
|
|
nr= pupmenu(str);
|
|
|
|
|
MEM_freeN(str);
|
|
|
|
|
|
|
|
|
|
if(nr==4) {
|
|
|
|
|
base= FIRSTBASE;
|
|
|
|
|
while(base) {
|
|
|
|
|
if (base->lay & OBACT->lay) {
|
|
|
|
|
base->flag |= SELECT;
|
|
|
|
|
base->object->flag |= SELECT;
|
|
|
|
|
}
|
|
|
|
|
base= base->next;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(nr==2) select_children(OBACT, 0);
|
|
|
|
|
else if(nr==1) select_children(OBACT, 1);
|
|
|
|
|
else if(nr==3) select_parent();
|
|
|
|
|
|
|
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
2003-10-07 18:24:02 +00:00
|
|
|
allqueue(REDRAWBUTSOBJECT, 0);
|
2003-07-18 15:50:33 +00:00
|
|
|
allspace(REMAKEIPO, 0);
|
|
|
|
|
allqueue(REDRAWIPO, 0);
|
|
|
|
|
}
|
|
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
2003-03-24 01:46:05 +00:00
|
|
|
unsigned short event= evt->event;
|
|
|
|
|
short val= evt->val;
|
|
|
|
|
char ascii= evt->ascii;
|
2002-10-12 11:37:38 +00:00
|
|
|
View3D *v3d= curarea->spacedata.first;
|
|
|
|
|
Object *ob;
|
|
|
|
|
float *curs;
|
|
|
|
|
int doredraw= 0, pupval;
|
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
if(curarea->win==0) return; /* when it comes from sa->headqread() */
|
2003-10-15 12:26:26 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
if(val) {
|
|
|
|
|
|
|
|
|
|
if( uiDoBlocks(&curarea->uiblocks, event)!=UI_NOTHING ) event= 0;
|
2003-10-15 12:26:26 +00:00
|
|
|
if(event==MOUSEY) return;
|
|
|
|
|
|
|
|
|
|
if(event==UI_BUT_EVENT) do_butspace(val); // temporal, view3d deserves own queue?
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-10-15 12:26:26 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
/* TEXTEDITING?? */
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.obedit) && G.obedit->type==OB_FONT) {
|
2002-10-12 11:37:38 +00:00
|
|
|
switch(event) {
|
|
|
|
|
|
|
|
|
|
case LEFTMOUSE:
|
|
|
|
|
mouse_cursor();
|
|
|
|
|
break;
|
|
|
|
|
case MIDDLEMOUSE:
|
2003-11-06 15:28:40 +00:00
|
|
|
/* use '&' here, because of alt+leftmouse which emulates middlemouse */
|
2002-10-12 11:37:38 +00:00
|
|
|
if(U.flag & VIEWMOVE) {
|
2003-11-07 01:52:31 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY) || ((U.flag & TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_SHIFTKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(0);
|
2003-11-07 01:52:31 +00:00
|
|
|
else if((G.qual==LR_CTRLKEY) || ((U.flag & TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_CTRLKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(2);
|
2003-11-07 01:52:31 +00:00
|
|
|
else if((G.qual==0) || ((U.flag & TWOBUTTONMOUSE) && (G.qual==LR_ALTKEY)))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(1);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2003-11-07 01:52:31 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY) || ((U.flag & TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_SHIFTKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(1);
|
2003-11-07 01:52:31 +00:00
|
|
|
else if((G.qual==LR_CTRLKEY) || ((U.flag & TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_CTRLKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(2);
|
2003-11-06 15:28:40 +00:00
|
|
|
else
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(0);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-10-29 22:53:09 +00:00
|
|
|
break;
|
|
|
|
|
|
2003-06-10 21:07:56 +00:00
|
|
|
case WHEELUPMOUSE:
|
|
|
|
|
/* Regular: Zoom in */
|
|
|
|
|
/* Shift: Scroll up */
|
|
|
|
|
/* Ctrl: Scroll right */
|
|
|
|
|
/* Alt-Shift: Rotate up */
|
|
|
|
|
/* Alt-Ctrl: Rotate right */
|
|
|
|
|
|
|
|
|
|
if( G.qual & LR_SHIFTKEY ) {
|
|
|
|
|
if( G.qual & LR_ALTKEY ) {
|
|
|
|
|
G.qual &= ~LR_SHIFTKEY;
|
|
|
|
|
persptoetsen(PAD2);
|
|
|
|
|
G.qual |= LR_SHIFTKEY;
|
|
|
|
|
} else {
|
|
|
|
|
persptoetsen(PAD2);
|
|
|
|
|
}
|
|
|
|
|
} else if( G.qual & LR_CTRLKEY ) {
|
|
|
|
|
if( G.qual & LR_ALTKEY ) {
|
|
|
|
|
G.qual &= ~LR_CTRLKEY;
|
|
|
|
|
persptoetsen(PAD4);
|
|
|
|
|
G.qual |= LR_CTRLKEY;
|
|
|
|
|
} else {
|
|
|
|
|
persptoetsen(PAD4);
|
|
|
|
|
}
|
|
|
|
|
} else if(U.uiflag & WHEELZOOMDIR)
|
|
|
|
|
persptoetsen(PADMINUS);
|
|
|
|
|
else
|
|
|
|
|
persptoetsen(PADPLUSKEY);
|
|
|
|
|
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case WHEELDOWNMOUSE:
|
|
|
|
|
/* Regular: Zoom out */
|
|
|
|
|
/* Shift: Scroll down */
|
|
|
|
|
/* Ctrl: Scroll left */
|
|
|
|
|
/* Alt-Shift: Rotate down */
|
|
|
|
|
/* Alt-Ctrl: Rotate left */
|
|
|
|
|
|
|
|
|
|
if( G.qual & LR_SHIFTKEY ) {
|
|
|
|
|
if( G.qual & LR_ALTKEY ) {
|
|
|
|
|
G.qual &= ~LR_SHIFTKEY;
|
|
|
|
|
persptoetsen(PAD8);
|
|
|
|
|
G.qual |= LR_SHIFTKEY;
|
|
|
|
|
} else {
|
|
|
|
|
persptoetsen(PAD8);
|
|
|
|
|
}
|
|
|
|
|
} else if( G.qual & LR_CTRLKEY ) {
|
|
|
|
|
if( G.qual & LR_ALTKEY ) {
|
|
|
|
|
G.qual &= ~LR_CTRLKEY;
|
|
|
|
|
persptoetsen(PAD6);
|
|
|
|
|
G.qual |= LR_CTRLKEY;
|
|
|
|
|
} else {
|
|
|
|
|
persptoetsen(PAD6);
|
|
|
|
|
}
|
|
|
|
|
} else if(U.uiflag & WHEELZOOMDIR)
|
|
|
|
|
persptoetsen(PADPLUSKEY);
|
|
|
|
|
else
|
|
|
|
|
persptoetsen(PADMINUS);
|
|
|
|
|
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
break;
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
case UKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_ALTKEY) {
|
2002-10-12 11:37:38 +00:00
|
|
|
remake_editText();
|
|
|
|
|
doredraw= 1;
|
2003-10-27 23:55:38 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2002-10-12 11:37:38 +00:00
|
|
|
do_textedit(event, val, ascii);
|
|
|
|
|
}
|
|
|
|
|
break;
|
2003-04-28 11:17:21 +00:00
|
|
|
case VKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_ALTKEY) {
|
2003-04-28 11:17:21 +00:00
|
|
|
paste_editText();
|
|
|
|
|
doredraw= 1;
|
2003-10-27 23:55:38 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2003-04-28 11:17:21 +00:00
|
|
|
do_textedit(event, val, ascii);
|
|
|
|
|
}
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
case PAD0: case PAD1: case PAD2: case PAD3: case PAD4:
|
|
|
|
|
case PAD5: case PAD6: case PAD7: case PAD8: case PAD9:
|
|
|
|
|
case PADENTER:
|
|
|
|
|
persptoetsen(event);
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
do_textedit(event, val, ascii);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
switch(event) {
|
|
|
|
|
|
|
|
|
|
case BACKBUFDRAW:
|
|
|
|
|
backdrawview3d(1);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case LEFTMOUSE:
|
2003-10-27 23:55:38 +00:00
|
|
|
if ((G.obedit) || !(G.f&(G_VERTEXPAINT|G_WEIGHTPAINT|G_TEXTUREPAINT))) {
|
2002-10-12 11:37:38 +00:00
|
|
|
mouse_cursor();
|
|
|
|
|
}
|
|
|
|
|
else if (G.f & G_VERTEXPAINT) {
|
|
|
|
|
vertex_paint();
|
|
|
|
|
}
|
|
|
|
|
else if (G.f & G_WEIGHTPAINT){
|
|
|
|
|
weight_paint();
|
|
|
|
|
}
|
|
|
|
|
else if (G.f & G_TEXTUREPAINT) {
|
|
|
|
|
face_draw();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MIDDLEMOUSE:
|
2003-11-06 15:28:40 +00:00
|
|
|
/* use '&' here, because of alt+leftmouse which emulates middlemouse */
|
2002-10-12 11:37:38 +00:00
|
|
|
if(U.flag & VIEWMOVE) {
|
2003-11-07 01:52:31 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY) || ((U.flag & TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_SHIFTKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(0);
|
2003-11-07 01:52:31 +00:00
|
|
|
else if((G.qual==LR_CTRLKEY) || ((U.flag & TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_CTRLKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(2);
|
2003-11-07 01:52:31 +00:00
|
|
|
else if((G.qual==0) || ((U.flag & TWOBUTTONMOUSE) && (G.qual==LR_ALTKEY)))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(1);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2003-11-07 01:52:31 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY) || ((U.flag & TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_SHIFTKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(1);
|
2003-11-07 01:52:31 +00:00
|
|
|
else if((G.qual==LR_CTRLKEY) || ((U.flag & TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_CTRLKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(2);
|
2003-11-07 01:52:31 +00:00
|
|
|
else if((G.qual==0) || ((U.flag & TWOBUTTONMOUSE) && (G.qual==LR_ALTKEY)))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(0);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case RIGHTMOUSE:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.obedit) && (G.qual & LR_CTRLKEY)==0) {
|
|
|
|
|
if(G.obedit->type==OB_MESH)
|
|
|
|
|
mouse_mesh();
|
|
|
|
|
else if ELEM(G.obedit->type, OB_CURVE, OB_SURF)
|
|
|
|
|
mouse_nurb();
|
|
|
|
|
else if(G.obedit->type==OB_MBALL)
|
|
|
|
|
mouse_mball();
|
|
|
|
|
else if(G.obedit->type==OB_LATTICE)
|
|
|
|
|
mouse_lattice();
|
|
|
|
|
else if(G.obedit->type==OB_ARMATURE)
|
|
|
|
|
mouse_armature();
|
|
|
|
|
}
|
2003-11-14 12:29:05 +00:00
|
|
|
else if((G.obedit) && (G.qual & (LR_CTRLKEY|LR_ALTKEY)))
|
2003-11-08 18:37:28 +00:00
|
|
|
mouse_mesh(); // edge select
|
2002-10-12 11:37:38 +00:00
|
|
|
else if(G.obpose) {
|
2003-10-27 23:55:38 +00:00
|
|
|
if (G.obpose->type==OB_ARMATURE)
|
|
|
|
|
mousepose_armature();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_CTRLKEY)
|
|
|
|
|
mouse_select();
|
|
|
|
|
else if(G.f & G_FACESELECT)
|
|
|
|
|
face_select();
|
|
|
|
|
else if( G.f & (G_VERTEXPAINT|G_TEXTUREPAINT))
|
|
|
|
|
sample_vpaint();
|
2002-10-12 11:37:38 +00:00
|
|
|
else
|
|
|
|
|
mouse_select();
|
|
|
|
|
break;
|
2003-01-28 11:14:38 +00:00
|
|
|
|
|
|
|
|
case WHEELUPMOUSE:
|
|
|
|
|
/* Regular: Zoom in */
|
|
|
|
|
/* Shift: Scroll up */
|
|
|
|
|
/* Ctrl: Scroll right */
|
|
|
|
|
/* Alt-Shift: Rotate up */
|
|
|
|
|
/* Alt-Ctrl: Rotate right */
|
|
|
|
|
|
|
|
|
|
if( G.qual & LR_SHIFTKEY ) {
|
|
|
|
|
if( G.qual & LR_ALTKEY ) {
|
|
|
|
|
G.qual &= ~LR_SHIFTKEY;
|
|
|
|
|
persptoetsen(PAD2);
|
|
|
|
|
G.qual |= LR_SHIFTKEY;
|
|
|
|
|
} else {
|
|
|
|
|
persptoetsen(PAD2);
|
|
|
|
|
}
|
|
|
|
|
} else if( G.qual & LR_CTRLKEY ) {
|
|
|
|
|
if( G.qual & LR_ALTKEY ) {
|
|
|
|
|
G.qual &= ~LR_CTRLKEY;
|
|
|
|
|
persptoetsen(PAD4);
|
|
|
|
|
G.qual |= LR_CTRLKEY;
|
|
|
|
|
} else {
|
|
|
|
|
persptoetsen(PAD4);
|
|
|
|
|
}
|
|
|
|
|
} else if(U.uiflag & WHEELZOOMDIR)
|
|
|
|
|
persptoetsen(PADMINUS);
|
|
|
|
|
else
|
|
|
|
|
persptoetsen(PADPLUSKEY);
|
|
|
|
|
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
break;
|
|
|
|
|
case WHEELDOWNMOUSE:
|
|
|
|
|
/* Regular: Zoom out */
|
|
|
|
|
/* Shift: Scroll down */
|
|
|
|
|
/* Ctrl: Scroll left */
|
|
|
|
|
/* Alt-Shift: Rotate down */
|
|
|
|
|
/* Alt-Ctrl: Rotate left */
|
|
|
|
|
|
|
|
|
|
if( G.qual & LR_SHIFTKEY ) {
|
|
|
|
|
if( G.qual & LR_ALTKEY ) {
|
|
|
|
|
G.qual &= ~LR_SHIFTKEY;
|
|
|
|
|
persptoetsen(PAD8);
|
|
|
|
|
G.qual |= LR_SHIFTKEY;
|
|
|
|
|
} else {
|
|
|
|
|
persptoetsen(PAD8);
|
|
|
|
|
}
|
|
|
|
|
} else if( G.qual & LR_CTRLKEY ) {
|
|
|
|
|
if( G.qual & LR_ALTKEY ) {
|
|
|
|
|
G.qual &= ~LR_CTRLKEY;
|
|
|
|
|
persptoetsen(PAD6);
|
|
|
|
|
G.qual |= LR_CTRLKEY;
|
|
|
|
|
} else {
|
|
|
|
|
persptoetsen(PAD6);
|
|
|
|
|
}
|
|
|
|
|
} else if(U.uiflag & WHEELZOOMDIR)
|
|
|
|
|
persptoetsen(PADPLUSKEY);
|
|
|
|
|
else
|
|
|
|
|
persptoetsen(PADMINUS);
|
|
|
|
|
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
case ONEKEY:
|
2003-05-07 19:27:29 +00:00
|
|
|
ob= OBACT;
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_CTRLKEY) {
|
2003-05-07 19:27:29 +00:00
|
|
|
if(G.obedit) {
|
|
|
|
|
flip_subdivison(G.obedit, 1);
|
|
|
|
|
}
|
|
|
|
|
else if(ob->type == OB_MESH) {
|
|
|
|
|
flip_subdivison(ob, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
do_layer_buttons(0); break;
|
2002-10-12 11:37:38 +00:00
|
|
|
case TWOKEY:
|
2003-05-07 19:27:29 +00:00
|
|
|
ob= OBACT;
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_CTRLKEY) {
|
2003-05-07 19:27:29 +00:00
|
|
|
if(G.obedit) {
|
|
|
|
|
flip_subdivison(G.obedit, 2);
|
|
|
|
|
}
|
|
|
|
|
else if(ob->type == OB_MESH) {
|
|
|
|
|
flip_subdivison(ob, 2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
do_layer_buttons(1);
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
case THREEKEY:
|
2003-05-07 19:27:29 +00:00
|
|
|
ob= OBACT;
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_CTRLKEY) {
|
2003-05-07 19:27:29 +00:00
|
|
|
if(G.obedit) {
|
|
|
|
|
flip_subdivison(G.obedit, 3);
|
|
|
|
|
}
|
|
|
|
|
else if(ob->type == OB_MESH) {
|
|
|
|
|
flip_subdivison(ob, 3);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
2003-10-27 23:55:38 +00:00
|
|
|
do_layer_buttons(2); break;
|
2002-10-12 11:37:38 +00:00
|
|
|
case FOURKEY:
|
2003-05-07 19:27:29 +00:00
|
|
|
ob= OBACT;
|
|
|
|
|
if(G.qual & LR_CTRLKEY) {
|
|
|
|
|
if(G.obedit) {
|
|
|
|
|
flip_subdivison(G.obedit, 4);
|
|
|
|
|
}
|
|
|
|
|
else if(ob->type == OB_MESH) {
|
|
|
|
|
flip_subdivison(ob, 4);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
2002-10-12 11:37:38 +00:00
|
|
|
do_layer_buttons(3); break;
|
|
|
|
|
case FIVEKEY:
|
|
|
|
|
do_layer_buttons(4); break;
|
|
|
|
|
case SIXKEY:
|
|
|
|
|
do_layer_buttons(5); break;
|
|
|
|
|
case SEVENKEY:
|
|
|
|
|
do_layer_buttons(6); break;
|
|
|
|
|
case EIGHTKEY:
|
|
|
|
|
do_layer_buttons(7); break;
|
|
|
|
|
case NINEKEY:
|
|
|
|
|
do_layer_buttons(8); break;
|
|
|
|
|
case ZEROKEY:
|
|
|
|
|
do_layer_buttons(9); break;
|
|
|
|
|
case MINUSKEY:
|
|
|
|
|
do_layer_buttons(10); break;
|
|
|
|
|
case EQUALKEY:
|
|
|
|
|
do_layer_buttons(11); break;
|
|
|
|
|
case ACCENTGRAVEKEY:
|
|
|
|
|
do_layer_buttons(-1); break;
|
|
|
|
|
|
|
|
|
|
case AKEY:
|
2003-10-28 21:28:13 +00:00
|
|
|
if(G.qual & LR_CTRLKEY) apply_object(); // also with shift!
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==LR_SHIFTKEY)) {
|
2003-10-29 00:23:16 +00:00
|
|
|
toolbox_n_add();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
if(G.obedit) {
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.obedit->type==OB_MESH)
|
|
|
|
|
deselectall_mesh();
|
|
|
|
|
else if ELEM(G.obedit->type, OB_CURVE, OB_SURF)
|
|
|
|
|
deselectall_nurb();
|
|
|
|
|
else if(G.obedit->type==OB_MBALL)
|
|
|
|
|
deselectall_mball();
|
|
|
|
|
else if(G.obedit->type==OB_LATTICE)
|
|
|
|
|
deselectall_Latt();
|
|
|
|
|
else if(G.obedit->type==OB_ARMATURE)
|
|
|
|
|
deselectall_armature();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
else if (G.obpose){
|
|
|
|
|
switch (G.obpose->type){
|
|
|
|
|
case OB_ARMATURE:
|
|
|
|
|
deselectall_posearmature(1);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
if(G.f & G_FACESELECT) deselectall_tface();
|
2003-02-16 00:12:06 +00:00
|
|
|
else {
|
|
|
|
|
/* by design, the center of the active object
|
|
|
|
|
* (which need not necessarily by selected) will
|
|
|
|
|
* still be drawn as if it were selected.
|
|
|
|
|
*/
|
|
|
|
|
deselectall();
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case BKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
set_render_border();
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
borderselect();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case CKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_CTRLKEY) {
|
2002-10-12 11:37:38 +00:00
|
|
|
copymenu();
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_ALTKEY) {
|
2002-10-12 11:37:38 +00:00
|
|
|
convertmenu(); /* editobject.c */
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==LR_SHIFTKEY)) {
|
2002-10-12 11:37:38 +00:00
|
|
|
view3d_home(1);
|
|
|
|
|
curs= give_cursor();
|
|
|
|
|
curs[0]=curs[1]=curs[2]= 0.0;
|
2003-08-17 13:02:17 +00:00
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.obedit) && ELEM(G.obedit->type, OB_CURVE, OB_SURF) ) {
|
2002-10-12 11:37:38 +00:00
|
|
|
makecyclicNurb();
|
|
|
|
|
makeDispList(G.obedit);
|
|
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==0)){
|
2002-10-12 11:37:38 +00:00
|
|
|
curs= give_cursor();
|
|
|
|
|
G.vd->ofs[0]= -curs[0];
|
|
|
|
|
G.vd->ofs[1]= -curs[1];
|
|
|
|
|
G.vd->ofs[2]= -curs[2];
|
|
|
|
|
scrarea_queue_winredraw(curarea);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case DKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY)) {
|
2003-03-24 01:46:05 +00:00
|
|
|
duplicate_context_selected();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_ALTKEY) {
|
|
|
|
|
if(G.obpose)
|
|
|
|
|
error ("Duplicate not possible in posemode.");
|
|
|
|
|
else if((G.obedit==0))
|
|
|
|
|
adduplicate(0);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_CTRLKEY) {
|
2002-10-12 11:37:38 +00:00
|
|
|
imagestodisplist();
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==0)){
|
2003-07-17 19:25:36 +00:00
|
|
|
pupval= pupmenu("Draw mode%t|BoundBox %x1|Wire %x2|OpenGL Solid %x3|Shaded Solid %x4|Textured Solid %x5");
|
2002-10-12 11:37:38 +00:00
|
|
|
if(pupval>0) {
|
|
|
|
|
G.vd->drawtype= pupval;
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case EKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if (G.qual==0){
|
|
|
|
|
if(G.obedit) {
|
|
|
|
|
if(G.obedit->type==OB_MESH)
|
|
|
|
|
extrude_mesh();
|
|
|
|
|
else if(G.obedit->type==OB_CURVE)
|
|
|
|
|
addvert_Nurb('e');
|
|
|
|
|
else if(G.obedit->type==OB_SURF)
|
|
|
|
|
extrude_nurb();
|
|
|
|
|
else if(G.obedit->type==OB_ARMATURE)
|
|
|
|
|
extrude_armature();
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
ob= OBACT;
|
|
|
|
|
if(ob && ob->type==OB_IKA) if(okee("extrude IKA"))
|
|
|
|
|
extrude_ika(ob, 1);
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case FKEY:
|
|
|
|
|
if(G.obedit) {
|
|
|
|
|
if(G.obedit->type==OB_MESH) {
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
fill_mesh();
|
|
|
|
|
else if(G.qual==LR_ALTKEY)
|
|
|
|
|
beauty_fill();
|
|
|
|
|
else if(G.qual==LR_CTRLKEY)
|
|
|
|
|
edge_flip();
|
|
|
|
|
else if (G.qual==0)
|
|
|
|
|
addedgevlak_mesh();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
else if ELEM(G.obedit->type, OB_CURVE, OB_SURF) addsegment_nurb();
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_CTRLKEY)
|
|
|
|
|
sort_faces();
|
|
|
|
|
else if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
fly();
|
2002-10-12 11:37:38 +00:00
|
|
|
else {
|
|
|
|
|
set_faceselect();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case GKEY:
|
|
|
|
|
/* RMGRP if(G.qual & LR_CTRLKEY) add_selected_to_group();
|
2003-07-18 15:50:33 +00:00
|
|
|
else if(G.qual & LR_ALTKEY) rem_selected_from_group(); */
|
|
|
|
|
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
group_menu();
|
|
|
|
|
else if(G.qual==LR_ALTKEY)
|
|
|
|
|
clear_object('g');
|
|
|
|
|
else if((G.qual==0))
|
2002-10-12 11:37:38 +00:00
|
|
|
transform('g');
|
|
|
|
|
break;
|
|
|
|
|
case HKEY:
|
|
|
|
|
if(G.obedit) {
|
|
|
|
|
if(G.obedit->type==OB_MESH) {
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_ALTKEY)
|
|
|
|
|
reveal_mesh();
|
|
|
|
|
else if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
hide_mesh(1);
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
hide_mesh(0);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
else if(G.obedit->type== OB_SURF) {
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_ALTKEY)
|
|
|
|
|
revealNurb();
|
|
|
|
|
else if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
hideNurb(1);
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
hideNurb(0);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
else if(G.obedit->type==OB_CURVE) {
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_CTRLKEY)
|
|
|
|
|
autocalchandlesNurb_all(1); /* flag=1, selected */
|
|
|
|
|
else if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
sethandlesNurb(1);
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
sethandlesNurb(3);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
makeDispList(G.obedit);
|
|
|
|
|
|
|
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.f & G_FACESELECT)
|
|
|
|
|
hide_tface();
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case IKEY:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case JKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_CTRLKEY) {
|
2002-10-12 11:37:38 +00:00
|
|
|
if( (ob= OBACT) ) {
|
2003-10-27 23:55:38 +00:00
|
|
|
if(ob->type == OB_MESH)
|
|
|
|
|
join_mesh();
|
|
|
|
|
else if(ob->type == OB_CURVE)
|
|
|
|
|
join_curve(OB_CURVE);
|
|
|
|
|
else if(ob->type == OB_SURF)
|
|
|
|
|
join_curve(OB_SURF);
|
|
|
|
|
else if(ob->type == OB_ARMATURE)
|
|
|
|
|
join_armature ();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if ((G.obedit) && ELEM(G.obedit->type, OB_CURVE, OB_SURF))
|
|
|
|
|
addsegment_nurb();
|
|
|
|
|
}
|
|
|
|
|
else if(G.obedit) {
|
2002-10-12 11:37:38 +00:00
|
|
|
if(G.obedit->type==OB_MESH) {
|
|
|
|
|
join_triangles();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case KKEY:
|
|
|
|
|
if(G.obedit) {
|
2003-10-26 21:22:32 +00:00
|
|
|
if (G.obedit->type==OB_MESH) {
|
2003-10-27 23:55:38 +00:00
|
|
|
if (G.qual==LR_SHIFTKEY)
|
|
|
|
|
KnifeSubdivide(KNIFE_PROMPT);
|
|
|
|
|
else if (G.qual==0)
|
|
|
|
|
LoopMenu();
|
2003-10-12 23:43:26 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.obedit->type==OB_SURF)
|
|
|
|
|
printknots();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY)) {
|
|
|
|
|
if(G.f & G_FACESELECT)
|
|
|
|
|
clear_vpaint_selectedfaces();
|
|
|
|
|
else if(G.f & G_VERTEXPAINT)
|
|
|
|
|
clear_vpaint();
|
|
|
|
|
else
|
|
|
|
|
select_select_keys();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_CTRLKEY)
|
|
|
|
|
make_skeleton();
|
2002-10-12 11:37:38 +00:00
|
|
|
/* else if(G.qual & LR_ALTKEY) delete_skeleton(); */
|
2003-10-27 23:55:38 +00:00
|
|
|
else if (G.qual==0)
|
|
|
|
|
set_ob_ipoflags();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case LKEY:
|
|
|
|
|
if(G.obedit) {
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.obedit->type==OB_MESH)
|
2003-10-28 21:28:13 +00:00
|
|
|
selectconnected_mesh(G.qual);
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.obedit->type==OB_ARMATURE)
|
|
|
|
|
selectconnected_armature();
|
|
|
|
|
else if ELEM(G.obedit->type, OB_CURVE, OB_SURF)
|
|
|
|
|
selectconnected_nurb();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
else if(G.obpose) {
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.obpose->type==OB_ARMATURE)
|
|
|
|
|
selectconnected_posearmature();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
selectlinks();
|
|
|
|
|
else if(G.qual==LR_CTRLKEY)
|
|
|
|
|
linkmenu();
|
|
|
|
|
else if(G.f & G_FACESELECT)
|
|
|
|
|
select_linked_tfaces();
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
make_local();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
break;
|
2003-05-10 12:22:26 +00:00
|
|
|
case MKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.obedit){
|
|
|
|
|
if(G.qual==LR_ALTKEY) {
|
2003-11-16 00:31:27 +00:00
|
|
|
if(G.obedit->type==OB_MESH) {
|
2003-11-12 23:34:24 +00:00
|
|
|
undo_push_mesh("Merge");
|
2003-10-27 23:55:38 +00:00
|
|
|
mergemenu();
|
2003-11-16 00:31:27 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
}
|
2003-11-16 00:31:27 +00:00
|
|
|
else if((G.qual==0)) {
|
|
|
|
|
if(G.obedit->type==OB_MESH) {
|
2003-11-12 23:34:24 +00:00
|
|
|
undo_push_mesh("Mirror");
|
2003-11-16 00:31:27 +00:00
|
|
|
mirrormenu();
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-05-10 12:22:26 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==0)){
|
|
|
|
|
movetolayer();
|
2003-05-10 12:22:26 +00:00
|
|
|
}
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
case NKEY:
|
2003-10-28 16:26:51 +00:00
|
|
|
if((G.qual==0)) {
|
|
|
|
|
add_blockhandler(curarea, VIEW3D_HANDLER_OBJECT, UI_PNL_TO_MOUSE);
|
|
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
|
|
|
|
}
|
|
|
|
|
else if(G.obedit) {
|
2002-10-12 11:37:38 +00:00
|
|
|
switch (G.obedit->type){
|
|
|
|
|
case OB_ARMATURE:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_CTRLKEY){
|
|
|
|
|
if (okee("Recalc bone roll angles")) {
|
|
|
|
|
auto_align_armature();
|
|
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case OB_MESH:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==(LR_SHIFTKEY|LR_CTRLKEY)) {
|
2003-10-22 00:52:26 +00:00
|
|
|
if(okee("Recalc normals inside")) {
|
|
|
|
|
undo_push_mesh("Recalc normals inside");
|
|
|
|
|
righthandfaces(2);
|
2003-10-27 23:55:38 +00:00
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
2003-10-22 00:52:26 +00:00
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_CTRLKEY){
|
2003-10-22 00:52:26 +00:00
|
|
|
if(okee("Recalc normals outside")) {
|
|
|
|
|
undo_push_mesh("Recalc normals outside");
|
|
|
|
|
righthandfaces(1);
|
2003-10-27 23:55:38 +00:00
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
2003-10-22 00:52:26 +00:00
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-10-28 16:26:51 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case OKEY:
|
2003-05-07 19:27:29 +00:00
|
|
|
ob= OBACT;
|
2003-07-21 17:44:23 +00:00
|
|
|
if(G.obedit) {
|
2002-10-12 11:37:38 +00:00
|
|
|
extern int prop_mode;
|
|
|
|
|
|
2003-10-27 23:55:38 +00:00
|
|
|
if (G.qual==LR_SHIFTKEY) {
|
|
|
|
|
prop_mode= !prop_mode;
|
|
|
|
|
allqueue(REDRAWHEADERS, 0);
|
|
|
|
|
}
|
|
|
|
|
else if((G.qual==0)) {
|
|
|
|
|
G.f ^= G_PROPORTIONAL;
|
|
|
|
|
allqueue(REDRAWHEADERS, 0);
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==LR_SHIFTKEY)) {
|
2003-07-23 00:24:42 +00:00
|
|
|
if(ob && ob->type == OB_MESH) {
|
2003-07-21 17:44:23 +00:00
|
|
|
flip_subdivison(ob, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_ALTKEY) clear_object('o');
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
2003-07-21 17:44:23 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
case PKEY:
|
|
|
|
|
|
|
|
|
|
if(G.obedit) {
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_CTRLKEY)
|
|
|
|
|
make_parent();
|
|
|
|
|
else if((G.qual==0) && G.obedit->type==OB_MESH)
|
|
|
|
|
separatemenu();
|
|
|
|
|
else if ((G.qual==0) && ELEM(G.obedit->type, OB_CURVE, OB_SURF))
|
|
|
|
|
separate_nurb();
|
|
|
|
|
}
|
|
|
|
|
else if(G.qual==LR_CTRLKEY)
|
|
|
|
|
make_parent();
|
|
|
|
|
else if(G.qual==LR_ALTKEY)
|
|
|
|
|
clear_parent();
|
|
|
|
|
else if((G.qual==0)) {
|
2002-10-12 11:37:38 +00:00
|
|
|
start_game();
|
|
|
|
|
}
|
2003-10-17 19:59:32 +00:00
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
case RKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.obedit==0) && (G.f & G_FACESELECT) && (G.qual==0))
|
|
|
|
|
rotate_uv_tface();
|
|
|
|
|
else if(G.qual==LR_ALTKEY)
|
|
|
|
|
clear_object('r');
|
2003-10-17 19:59:32 +00:00
|
|
|
else if (G.obedit) {
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY)) {
|
2003-10-17 19:59:32 +00:00
|
|
|
if ELEM(G.obedit->type, OB_CURVE, OB_SURF)
|
|
|
|
|
selectrow_nurb();
|
|
|
|
|
else if (G.obedit->type==OB_MESH)
|
|
|
|
|
loop('s');
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_CTRLKEY) {
|
2003-10-17 19:59:32 +00:00
|
|
|
if (G.obedit->type==OB_MESH)
|
|
|
|
|
loop('c');
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==0))
|
|
|
|
|
transform('r');
|
2003-10-17 19:59:32 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==0))
|
|
|
|
|
transform('r');
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case SKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.obedit) {
|
|
|
|
|
if(G.qual==LR_ALTKEY)
|
|
|
|
|
transform('N'); /* scale along normal */
|
|
|
|
|
else if(G.qual==LR_CTRLKEY)
|
|
|
|
|
transform('S');
|
2003-10-28 07:15:02 +00:00
|
|
|
else if(G.qual==LR_SHIFTKEY)
|
|
|
|
|
snapmenu();
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==0))
|
|
|
|
|
transform('s');
|
|
|
|
|
}
|
|
|
|
|
else if(G.qual==LR_ALTKEY) {
|
|
|
|
|
clear_object('s');
|
|
|
|
|
}
|
|
|
|
|
else if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
snapmenu();
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
transform('s');
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case TKEY:
|
2003-10-28 07:15:02 +00:00
|
|
|
if(G.obedit){
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_CTRLKEY) && G.obedit->type==OB_MESH) {
|
|
|
|
|
convert_to_triface(0);
|
|
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
|
|
|
|
countall();
|
|
|
|
|
makeDispList(G.obedit);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==LR_ALTKEY) && G.obedit->type==OB_CURVE)
|
|
|
|
|
clear_tilt();
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
transform('t');
|
2003-10-28 07:15:02 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_CTRLKEY) {
|
|
|
|
|
make_track();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_ALTKEY) {
|
|
|
|
|
clear_track();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==0)){
|
|
|
|
|
texspace_edit();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case UKEY:
|
|
|
|
|
if(G.obedit) {
|
2003-10-19 20:52:34 +00:00
|
|
|
if(G.obedit->type==OB_MESH){
|
2003-10-27 23:55:38 +00:00
|
|
|
if (G.qual==LR_ALTKEY)
|
|
|
|
|
undo_menu_mesh();
|
|
|
|
|
else if (G.qual==LR_SHIFTKEY)
|
|
|
|
|
undo_redo_mesh();
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
undo_pop_mesh(1);
|
2003-10-19 20:52:34 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.obedit->type==OB_ARMATURE)
|
|
|
|
|
remake_editArmature();
|
|
|
|
|
else if ELEM(G.obedit->type, OB_CURVE, OB_SURF)
|
|
|
|
|
remake_editNurb();
|
|
|
|
|
else if(G.obedit->type==OB_LATTICE)
|
|
|
|
|
remake_editLatt();
|
|
|
|
|
}
|
|
|
|
|
else if((G.qual==0)){
|
|
|
|
|
if (G.f & G_FACESELECT)
|
|
|
|
|
uv_autocalc_tface();
|
|
|
|
|
else if(G.f & G_WEIGHTPAINT)
|
|
|
|
|
wpaint_undo();
|
|
|
|
|
else if(G.f & G_VERTEXPAINT)
|
|
|
|
|
vpaint_undo();
|
|
|
|
|
else
|
|
|
|
|
single_user();
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case VKEY:
|
2003-10-28 03:08:50 +00:00
|
|
|
ob= OBACT;
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY)) {
|
|
|
|
|
if ((G.obedit) && G.obedit->type==OB_MESH) {
|
2002-10-12 11:37:38 +00:00
|
|
|
align_view_to_selected(v3d);
|
2003-10-27 23:55:38 +00:00
|
|
|
}
|
|
|
|
|
else if (G.f & G_FACESELECT) {
|
2002-10-12 11:37:38 +00:00
|
|
|
align_view_to_selected(v3d);
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
}
|
|
|
|
|
else if(G.qual==LR_ALTKEY)
|
|
|
|
|
image_aspect();
|
|
|
|
|
else if (G.qual==0){
|
2002-10-12 11:37:38 +00:00
|
|
|
if(G.obedit) {
|
|
|
|
|
if(G.obedit->type==OB_CURVE) {
|
|
|
|
|
sethandlesNurb(2);
|
|
|
|
|
makeDispList(G.obedit);
|
|
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(ob && ob->type == OB_MESH)
|
|
|
|
|
set_vpaint();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case WKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY)) {
|
2002-10-12 11:37:38 +00:00
|
|
|
transform('w');
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_ALTKEY) {
|
2002-10-12 11:37:38 +00:00
|
|
|
/* if(G.obedit && G.obedit->type==OB_MESH) write_videoscape(); */
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_CTRLKEY) {
|
2002-10-12 11:37:38 +00:00
|
|
|
if(G.obedit) {
|
|
|
|
|
if ELEM(G.obedit->type, OB_CURVE, OB_SURF) {
|
|
|
|
|
switchdirectionNurb2();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==0))
|
|
|
|
|
special_editmenu();
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case XKEY:
|
|
|
|
|
case DELKEY:
|
2003-10-28 03:08:50 +00:00
|
|
|
if(G.qual==0)
|
|
|
|
|
delete_context_selected();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case YKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0) && (G.obedit)) {
|
2002-10-12 11:37:38 +00:00
|
|
|
if(G.obedit->type==OB_MESH) split_mesh();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case ZKEY:
|
2003-03-24 01:46:05 +00:00
|
|
|
toggle_shading();
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
scrarea_queue_headredraw(curarea);
|
|
|
|
|
scrarea_queue_winredraw(curarea);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case HOMEKEY:
|
2003-10-28 03:08:50 +00:00
|
|
|
if(G.qual==0)
|
|
|
|
|
view3d_home(0);
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case COMMAKEY:
|
2003-10-28 03:08:50 +00:00
|
|
|
if(G.qual==0) {
|
|
|
|
|
G.vd->around= V3D_CENTRE;
|
|
|
|
|
scrarea_queue_headredraw(curarea);
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PERIODKEY:
|
2003-10-28 03:08:50 +00:00
|
|
|
if(G.qual==0) {
|
|
|
|
|
G.vd->around= V3D_CURSOR;
|
|
|
|
|
scrarea_queue_headredraw(curarea);
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PADSLASHKEY:
|
2003-10-28 03:08:50 +00:00
|
|
|
if(G.qual==0) {
|
|
|
|
|
if(G.vd->localview) {
|
|
|
|
|
G.vd->localview= 0;
|
|
|
|
|
endlocalview(curarea);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
G.vd->localview= 1;
|
|
|
|
|
initlocalview();
|
|
|
|
|
}
|
|
|
|
|
scrarea_queue_headredraw(curarea);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case PADASTERKEY: /* '*' */
|
2003-10-28 03:08:50 +00:00
|
|
|
if(G.qual==0) {
|
|
|
|
|
ob= OBACT;
|
|
|
|
|
if(ob) {
|
|
|
|
|
obmat_to_viewmat(ob);
|
|
|
|
|
if(G.vd->persp==2) G.vd->persp= 1;
|
|
|
|
|
scrarea_queue_winredraw(curarea);
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case PADPERIOD: /* '.' */
|
2003-10-28 03:08:50 +00:00
|
|
|
if(G.qual==0)
|
|
|
|
|
centreview();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PAGEUPKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_CTRLKEY)
|
|
|
|
|
movekey_obipo(1);
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
nextkey_obipo(1); /* in editipo.c */
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PAGEDOWNKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_CTRLKEY)
|
|
|
|
|
movekey_obipo(-1);
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
nextkey_obipo(-1);
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PAD0: case PAD1: case PAD2: case PAD3: case PAD4:
|
|
|
|
|
case PAD5: case PAD6: case PAD7: case PAD8: case PAD9:
|
|
|
|
|
case PADMINUS: case PADPLUSKEY: case PADENTER:
|
|
|
|
|
persptoetsen(event);
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ESCKEY:
|
2003-10-28 03:08:50 +00:00
|
|
|
if(G.qual==0) {
|
|
|
|
|
if (G.vd->flag & V3D_DISPIMAGE) {
|
|
|
|
|
G.vd->flag &= ~V3D_DISPIMAGE;
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(doredraw) {
|
|
|
|
|
scrarea_queue_winredraw(curarea);
|
|
|
|
|
scrarea_queue_headredraw(curarea);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void initview3d(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
View3D *vd;
|
|
|
|
|
|
|
|
|
|
vd= MEM_callocN(sizeof(View3D), "initview3d");
|
2003-04-30 13:22:26 +00:00
|
|
|
BLI_addhead(&sa->spacedata, vd); /* addhead! not addtail */
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
vd->spacetype= SPACE_VIEW3D;
|
|
|
|
|
vd->viewquat[0]= 1.0;
|
|
|
|
|
vd->viewquat[1]= vd->viewquat[2]= vd->viewquat[3]= 0.0;
|
|
|
|
|
vd->persp= 1;
|
|
|
|
|
vd->drawtype= OB_WIRE;
|
|
|
|
|
vd->view= 7;
|
|
|
|
|
vd->dist= 10.0;
|
2003-10-28 03:08:50 +00:00
|
|
|
vd->lens= 35.0f;
|
|
|
|
|
vd->near= 0.01f;
|
|
|
|
|
vd->far= 500.0f;
|
|
|
|
|
vd->grid= 1.0f;
|
2002-10-12 11:37:38 +00:00
|
|
|
vd->gridlines= 16;
|
|
|
|
|
vd->lay= vd->layact= 1;
|
|
|
|
|
if(G.scene) {
|
|
|
|
|
vd->lay= vd->layact= G.scene->lay;
|
|
|
|
|
vd->camera= G.scene->camera;
|
|
|
|
|
}
|
|
|
|
|
vd->scenelock= 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ******************** SPACE: IPO ********************** */
|
|
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
static void changeview2dspace(ScrArea *sa, void *spacedata)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
|
|
|
|
if(G.v2d==0) return;
|
|
|
|
|
|
|
|
|
|
test_view2d(G.v2d, curarea->winx, curarea->winy);
|
|
|
|
|
myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax);
|
|
|
|
|
}
|
|
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
void winqreadipospace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
2003-10-28 14:20:03 +00:00
|
|
|
extern void do_ipobuts(unsigned short event); // drawipo.c
|
2003-03-24 01:46:05 +00:00
|
|
|
unsigned short event= evt->event;
|
|
|
|
|
short val= evt->val;
|
2002-10-12 11:37:38 +00:00
|
|
|
SpaceIpo *sipo= curarea->spacedata.first;
|
|
|
|
|
View2D *v2d= &sipo->v2d;
|
|
|
|
|
float dx, dy;
|
|
|
|
|
int cfra, doredraw= 0;
|
|
|
|
|
short mval[2];
|
|
|
|
|
|
2003-10-28 14:20:03 +00:00
|
|
|
|
|
|
|
|
if(sa->win==0) return;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
if(val) {
|
2003-10-28 14:20:03 +00:00
|
|
|
if( uiDoBlocks(&sa->uiblocks, event)!=UI_NOTHING ) event= 0;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
switch(event) {
|
|
|
|
|
case UI_BUT_EVENT:
|
2003-10-28 14:20:03 +00:00
|
|
|
/* note: bad bad code, will be cleaned! is because event queues are all shattered */
|
|
|
|
|
if(val>0 && val < 32) do_ipowin_buts(val-1);
|
|
|
|
|
else do_ipobuts(val);
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
2003-10-28 14:20:03 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
case LEFTMOUSE:
|
|
|
|
|
if( in_ipo_buttons() ) {
|
|
|
|
|
do_ipo_selectbuttons();
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
}
|
|
|
|
|
else if(G.qual & LR_CTRLKEY) add_vert_ipo();
|
|
|
|
|
else {
|
|
|
|
|
do {
|
|
|
|
|
getmouseco_areawin(mval);
|
|
|
|
|
areamouseco_to_ipoco(v2d, mval, &dx, &dy);
|
|
|
|
|
|
|
|
|
|
cfra= (int)dx;
|
|
|
|
|
if(cfra< 1) cfra= 1;
|
|
|
|
|
|
|
|
|
|
if( cfra!=CFRA ) {
|
|
|
|
|
CFRA= cfra;
|
|
|
|
|
update_for_newframe();
|
|
|
|
|
force_draw_plus(SPACE_VIEW3D);
|
|
|
|
|
force_draw_plus(SPACE_ACTION);
|
|
|
|
|
force_draw_plus(SPACE_BUTS); /* To make constraint sliders redraw */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} while(get_mbut()&L_MOUSE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case MIDDLEMOUSE:
|
|
|
|
|
if(in_ipo_buttons()) {
|
|
|
|
|
scroll_ipobuts();
|
|
|
|
|
}
|
2003-01-28 12:14:47 +00:00
|
|
|
else view2dmove(event); /* in drawipo.c */
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
2003-01-28 11:14:38 +00:00
|
|
|
|
|
|
|
|
case WHEELUPMOUSE:
|
|
|
|
|
case WHEELDOWNMOUSE:
|
|
|
|
|
view2dmove(event); /* in drawipo.c */
|
|
|
|
|
break;
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
case RIGHTMOUSE:
|
|
|
|
|
mouse_select_ipo();
|
|
|
|
|
allqueue (REDRAWACTION, 0);
|
|
|
|
|
allqueue(REDRAWNLA, 0);
|
|
|
|
|
break;
|
|
|
|
|
case PADPLUSKEY:
|
2003-10-28 14:20:03 +00:00
|
|
|
view2d_zoom(v2d, 0.1154, sa->winx, sa->winy);
|
2002-10-12 11:37:38 +00:00
|
|
|
doredraw= 1;
|
|
|
|
|
break;
|
|
|
|
|
case PADMINUS:
|
2003-10-28 14:20:03 +00:00
|
|
|
view2d_zoom(v2d, -0.15, sa->winx, sa->winy);
|
2002-10-12 11:37:38 +00:00
|
|
|
doredraw= 1;
|
|
|
|
|
break;
|
|
|
|
|
case PAGEUPKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_CTRLKEY)
|
|
|
|
|
movekey_ipo(1);
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
nextkey_ipo(1);
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case PAGEDOWNKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_CTRLKEY)
|
|
|
|
|
movekey_ipo(-1);
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
nextkey_ipo(-1);
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case HOMEKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
do_ipo_buttons(B_IPOHOME);
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case AKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0)) {
|
|
|
|
|
if(in_ipo_buttons()) {
|
|
|
|
|
swap_visible_editipo();
|
|
|
|
|
}
|
|
|
|
|
else swap_selectall_editipo();
|
|
|
|
|
allspace (REMAKEIPO, 0);
|
|
|
|
|
allqueue (REDRAWNLA, 0);
|
|
|
|
|
allqueue (REDRAWACTION, 0);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case BKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
borderselect_ipo();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case CKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
move_to_frame();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case DKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
add_duplicate_editipo();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case GKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
transform_ipo('g');
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case HKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
sethandles_ipo(HD_AUTO);
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
sethandles_ipo(HD_ALIGN);
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case JKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
join_ipo();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case KKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0)) {
|
|
|
|
|
ipo_toggle_showkey();
|
|
|
|
|
scrarea_queue_headredraw(curarea);
|
|
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
2003-10-28 14:20:03 +00:00
|
|
|
case NKEY:
|
|
|
|
|
add_blockhandler(sa, IPO_HANDLER_PROPERTIES, UI_PNL_TO_MOUSE);
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
case RKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
ipo_record();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case SKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
ipo_snapmenu();
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
transform_ipo('s');
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case TKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
set_ipotype();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case VKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
sethandles_ipo(HD_VECT);
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case XKEY:
|
|
|
|
|
case DELKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
delete_key();
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
del_ipo();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2003-10-28 14:20:03 +00:00
|
|
|
if(doredraw) scrarea_queue_winredraw(sa);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void initipo(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
SpaceIpo *sipo;
|
|
|
|
|
|
|
|
|
|
sipo= MEM_callocN(sizeof(SpaceIpo), "initipo");
|
|
|
|
|
BLI_addhead(&sa->spacedata, sipo);
|
|
|
|
|
|
|
|
|
|
sipo->spacetype= SPACE_IPO;
|
|
|
|
|
/* sipo space loopt van (0,-?) tot (??,?) */
|
|
|
|
|
sipo->v2d.tot.xmin= 0.0;
|
|
|
|
|
sipo->v2d.tot.ymin= -10.0;
|
|
|
|
|
sipo->v2d.tot.xmax= G.scene->r.efra;
|
|
|
|
|
sipo->v2d.tot.ymax= 10.0;
|
|
|
|
|
|
|
|
|
|
sipo->v2d.cur= sipo->v2d.tot;
|
|
|
|
|
|
2003-10-28 03:08:50 +00:00
|
|
|
sipo->v2d.min[0]= 0.01f;
|
|
|
|
|
sipo->v2d.min[1]= 0.01f;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-10-28 03:08:50 +00:00
|
|
|
sipo->v2d.max[0]= 15000.0f;
|
|
|
|
|
sipo->v2d.max[1]= 10000.0f;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
sipo->v2d.scroll= L_SCROLL+B_SCROLL;
|
|
|
|
|
sipo->v2d.keeptot= 0;
|
|
|
|
|
|
|
|
|
|
sipo->blocktype= ID_OB;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ******************** SPACE: INFO ********************** */
|
|
|
|
|
|
|
|
|
|
void space_mipmap_button_function(int event) {
|
|
|
|
|
set_mipmap(!(U.gameflags & USERDEF_DISABLE_MIPMAP));
|
|
|
|
|
|
|
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void space_sound_button_function(int event)
|
|
|
|
|
{
|
|
|
|
|
int a;
|
|
|
|
|
SYS_SystemHandle syshandle;
|
|
|
|
|
|
|
|
|
|
if ((syshandle = SYS_GetSystem()))
|
|
|
|
|
{
|
|
|
|
|
a = (U.gameflags & USERDEF_DISABLE_SOUND);
|
|
|
|
|
SYS_WriteCommandLineInt(syshandle, "noaudio", a);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
#define B_ADD_THEME 3301
|
|
|
|
|
#define B_DEL_THEME 3302
|
|
|
|
|
#define B_NAME_THEME 3303
|
|
|
|
|
#define B_THEMECOL 3304
|
|
|
|
|
#define B_UPDATE_THEME 3305
|
|
|
|
|
#define B_CHANGE_THEME 3306
|
|
|
|
|
#define B_THEME_COPY 3307
|
|
|
|
|
#define B_THEME_PASTE 3308
|
|
|
|
|
|
2003-10-25 16:53:50 +00:00
|
|
|
#define B_RECALCLIGHT 3310
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
|
|
|
|
|
// needed for event; choose new 'curmain' resets it...
|
|
|
|
|
static short th_curcol= TH_BACK;
|
|
|
|
|
static char *th_curcol_ptr= NULL;
|
|
|
|
|
static char th_curcol_arr[4]={0, 0, 0, 255};
|
|
|
|
|
|
|
|
|
|
void info_user_themebuts(uiBlock *block, short y1, short y2, short y3)
|
|
|
|
|
{
|
|
|
|
|
bTheme *btheme, *bt;
|
|
|
|
|
int spacetype= 0;
|
|
|
|
|
static short cur=1, curmain=2;
|
|
|
|
|
short a, tot=0, isbuiltin= 0;
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
char string[20*32], *strp, *col;
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
|
|
|
|
|
y3= y2+23; // exception!
|
|
|
|
|
|
|
|
|
|
/* count total, max 16! */
|
|
|
|
|
for(bt= U.themes.first; bt; bt= bt->next) tot++;
|
|
|
|
|
|
|
|
|
|
/* if cur not is 1; move that to front of list */
|
|
|
|
|
if(cur!=1) {
|
|
|
|
|
a= 1;
|
|
|
|
|
for(bt= U.themes.first; bt; bt= bt->next, a++) {
|
|
|
|
|
if(a==cur) {
|
|
|
|
|
BLI_remlink(&U.themes, bt);
|
|
|
|
|
BLI_addhead(&U.themes, bt);
|
|
|
|
|
cur= 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* the current theme */
|
|
|
|
|
btheme= U.themes.first;
|
|
|
|
|
if(strcmp(btheme->name, "Default")==0) isbuiltin= 1;
|
|
|
|
|
|
|
|
|
|
/* construct popup script */
|
|
|
|
|
string[0]= 0;
|
|
|
|
|
for(bt= U.themes.first; bt; bt= bt->next) {
|
|
|
|
|
strcat(string, bt->name);
|
|
|
|
|
if(btheme->next) strcat(string, " |");
|
|
|
|
|
}
|
|
|
|
|
uiDefButS(block, MENU, B_UPDATE_THEME, string, 45,y3,200,20, &cur, 0, 0, 0, 0, "Current theme");
|
|
|
|
|
|
|
|
|
|
/* add / delete / name */
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
if(tot<16)
|
|
|
|
|
uiDefBut(block, BUT, B_ADD_THEME, "Add", 45,y2,200,20, NULL, 0, 0, 0, 0, "Makes new copy of this theme");
|
|
|
|
|
if(tot>1 && isbuiltin==0)
|
|
|
|
|
uiDefBut(block, BUT, B_DEL_THEME, "Delete", 45,y1,200,20, NULL, 0, 0, 0, 0, "Delete theme");
|
|
|
|
|
|
|
|
|
|
if(isbuiltin) return;
|
|
|
|
|
|
|
|
|
|
/* name */
|
|
|
|
|
uiDefBut(block, TEX, B_NAME_THEME, "", 255,y3,200,20, btheme->name, 1.0, 30.0, 0, 0, "Rename theme");
|
|
|
|
|
|
|
|
|
|
/* main choices pup */
|
2003-10-22 23:20:44 +00:00
|
|
|
uiDefButS(block, MENU, B_CHANGE_THEME, "UI and Buttons %x1|3D View %x2|Ipo Curve Editor %x3|Action Editor %x4|"
|
|
|
|
|
"NLA Editor %x5|UV/Image Editor %x6|Sequence Editor %x7|Sound Editor %x8|Text Editor %x9|User Preferences %x10|"
|
|
|
|
|
"OOPS Schematic %x11|Buttons Window %x12|File Window %x13|Image Browser %x14",
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
255,y2,200,20, &curmain, 0, 0, 0, 0, "Specify theme for...");
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
if(curmain==1) spacetype= 0;
|
|
|
|
|
else if(curmain==2) spacetype= SPACE_VIEW3D;
|
|
|
|
|
else if(curmain==3) spacetype= SPACE_IPO;
|
2003-10-22 23:20:44 +00:00
|
|
|
else if(curmain==4) spacetype= SPACE_ACTION;
|
|
|
|
|
else if(curmain==5) spacetype= SPACE_NLA;
|
|
|
|
|
else if(curmain==6) spacetype= SPACE_IMAGE;
|
|
|
|
|
else if(curmain==7) spacetype= SPACE_SEQ;
|
|
|
|
|
else if(curmain==8) spacetype= SPACE_SOUND;
|
|
|
|
|
else if(curmain==9) spacetype= SPACE_TEXT;
|
|
|
|
|
else if(curmain==10) spacetype= SPACE_INFO;
|
|
|
|
|
else if(curmain==11) spacetype= SPACE_OOPS;
|
|
|
|
|
else if(curmain==12) spacetype= SPACE_BUTS;
|
|
|
|
|
else if(curmain==13) spacetype= SPACE_FILE;
|
|
|
|
|
else if(curmain==14) spacetype= SPACE_IMASEL;
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
else return; // only needed while coding... when adding themes for more windows
|
|
|
|
|
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
/* color choices pup */
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
if(curmain==1) {
|
|
|
|
|
strp= BIF_ThemeColorsPup(0);
|
|
|
|
|
if(th_curcol==TH_BACK) th_curcol= TH_BUT_NEUTRAL; // switching main choices...
|
|
|
|
|
}
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
else strp= BIF_ThemeColorsPup(spacetype);
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
uiDefButS(block, MENU, B_REDR, strp, 255,y1,200,20, &th_curcol, 0, 0, 0, 0, "Current color");
|
|
|
|
|
MEM_freeN(strp);
|
|
|
|
|
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
th_curcol_ptr= col= BIF_ThemeGetColorPtr(btheme, spacetype, th_curcol);
|
|
|
|
|
if(col==NULL) return;
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
/* first handle exceptions, special single values, row selection, etc */
|
|
|
|
|
if(th_curcol==TH_VERTEX_SIZE) {
|
|
|
|
|
uiDefButC(block, NUMSLI, B_UPDATE_THEME,"Vertex size ", 465,y3,200,20, col, 1.0, 10.0, 0, 0, "");
|
|
|
|
|
}
|
|
|
|
|
else if(th_curcol==TH_BUT_DRAWTYPE) {
|
2003-11-17 14:31:25 +00:00
|
|
|
uiBlockBeginAlign(block);
|
2003-11-14 00:44:48 +00:00
|
|
|
uiDefButC(block, ROW, B_UPDATE_THEME, "Minimal", 465,y3,100,20, col, 2.0, 0.0, 0, 0, "");
|
|
|
|
|
uiDefButC(block, ROW, B_UPDATE_THEME, "Shaded", 565,y3,100,20, col, 2.0, 1.0, 0, 0, "");
|
|
|
|
|
uiDefButC(block, ROW, B_UPDATE_THEME, "Rounded", 465,y2,100,20, col, 2.0, 2.0, 0, 0, "");
|
|
|
|
|
uiDefButC(block, ROW, B_UPDATE_THEME, "OldSkool", 565,y2,100,20, col, 2.0, 3.0, 0, 0, "");
|
2003-11-17 14:31:25 +00:00
|
|
|
uiBlockEndAlign(block);
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
}
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
else {
|
2003-11-17 14:31:25 +00:00
|
|
|
uiBlockBeginAlign(block);
|
|
|
|
|
if ELEM3(th_curcol, TH_PANEL, TH_FACE, TH_FACE_SELECT) {
|
|
|
|
|
uiDefButC(block, NUMSLI, B_UPDATE_THEME,"A ", 465,y3+25,200,20, col+3, 0.0, 255.0, B_THEMECOL, 0, "");
|
|
|
|
|
}
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
uiDefButC(block, NUMSLI, B_UPDATE_THEME,"R ", 465,y3,200,20, col, 0.0, 255.0, B_THEMECOL, 0, "");
|
|
|
|
|
uiDefButC(block, NUMSLI, B_UPDATE_THEME,"G ", 465,y2,200,20, col+1, 0.0, 255.0, B_THEMECOL, 0, "");
|
|
|
|
|
uiDefButC(block, NUMSLI, B_UPDATE_THEME,"B ", 465,y1,200,20, col+2, 0.0, 255.0, B_THEMECOL, 0, "");
|
2003-11-17 14:31:25 +00:00
|
|
|
uiBlockEndAlign(block);
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
|
|
|
|
|
uiDefButC(block, COL, B_THEMECOL, "", 675,y1,50,y3-y1+20, col, 0, 0, 0, 0, "");
|
2003-11-17 14:31:25 +00:00
|
|
|
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
/* copy paste */
|
2003-11-17 14:31:25 +00:00
|
|
|
uiBlockBeginAlign(block);
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
uiDefBut(block, BUT, B_THEME_COPY, "Copy Color", 755,y2,120,20, NULL, 0, 0, 0, 0, "Stores current color in buffer");
|
|
|
|
|
uiDefBut(block, BUT, B_THEME_PASTE, "Paste Color", 755,y1,120,20, NULL, 0, 0, 0, 0, "Pastes buffer color");
|
2003-11-17 14:31:25 +00:00
|
|
|
uiBlockEndAlign(block);
|
|
|
|
|
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
uiDefButC(block, COL, 0, "", 885,y1,50,y2-y1+20, th_curcol_arr, 0, 0, 0, 0, "");
|
|
|
|
|
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
|
2003-05-04 11:20:14 +00:00
|
|
|
void drawinfospace(ScrArea *sa, void *spacedata)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
|
|
|
|
uiBlock *block;
|
2003-10-25 16:53:50 +00:00
|
|
|
static short cur_light=0, cur_light_var=0;
|
2003-10-22 23:20:44 +00:00
|
|
|
float fac, col[3];
|
2003-05-01 12:50:49 +00:00
|
|
|
short xpos, ypos, ypostab, buth, rspace, dx, y1, y2, y3, y4, y2label, y3label, y4label;
|
2003-04-28 11:17:21 +00:00
|
|
|
short smallprefbut, medprefbut, largeprefbut, smfileselbut;
|
|
|
|
|
short edgespace, midspace;
|
2002-10-12 11:37:38 +00:00
|
|
|
char naam[32];
|
|
|
|
|
|
|
|
|
|
if(curarea->win==0) return;
|
|
|
|
|
|
2003-10-22 23:20:44 +00:00
|
|
|
BIF_GetThemeColor3fv(TH_BACK, col);
|
|
|
|
|
glClearColor(col[0], col[1], col[2], 0.0);
|
2002-10-12 11:37:38 +00:00
|
|
|
glClear(GL_COLOR_BUFFER_BIT);
|
|
|
|
|
|
2003-10-28 03:08:50 +00:00
|
|
|
fac= ((float)curarea->winx)/1280.0f;
|
2002-10-12 11:37:38 +00:00
|
|
|
myortho2(0.0, 1280.0, 0.0, curarea->winy/fac);
|
|
|
|
|
|
|
|
|
|
sprintf(naam, "infowin %d", curarea->win);
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
block= uiNewBlock(&curarea->uiblocks, naam, UI_EMBOSS, UI_HELV, curarea->win);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-04-28 11:17:21 +00:00
|
|
|
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
dx= (1280-90)/7; /* spacing for use in equally dividing 'tab' row */
|
2003-05-01 12:50:49 +00:00
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
xpos = 45; /* left padding */
|
|
|
|
|
ypos = 50; /* bottom padding for buttons */
|
|
|
|
|
ypostab = 10; /* bottom padding for 'tab' row */
|
2003-05-01 12:50:49 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
buth = 20; /* standard button height */
|
|
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
smallprefbut = 94; /* standard size for small preferences button */
|
|
|
|
|
medprefbut = 193; /* standard size for medium preferences button */
|
|
|
|
|
largeprefbut = 292; /* standard size for large preferences button */
|
|
|
|
|
smfileselbut = buth; /* standard size for fileselect button (square) */
|
|
|
|
|
|
|
|
|
|
edgespace = 3; /* space from edge of end 'tab' to edge of end button */
|
|
|
|
|
midspace = 5; /* horizontal space between buttons */
|
2003-05-01 12:50:49 +00:00
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
rspace = 3; /* default space between rows */
|
2003-05-01 12:50:49 +00:00
|
|
|
|
|
|
|
|
y1 = ypos; /* bottom padding of 1st (bottom) button row */
|
|
|
|
|
y2 = ypos+buth+rspace; /* bottom padding of 2nd button row */
|
|
|
|
|
y3 = ypos+2*(buth+rspace)+(3*rspace); /* bottom padding of 3rd button row */
|
|
|
|
|
y4 = ypos+3*(buth+rspace)+(3*rspace); /* bottom padding of 4th button row */
|
|
|
|
|
|
|
|
|
|
y2label = y2-2; /* adjustments to offset the labels down to align better */
|
|
|
|
|
y3label = y3-(3*rspace)-2; /* again for 3rd row */
|
|
|
|
|
y4label = y4-2; /* again for 4th row */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* set the colour to blue and draw the main 'tab' controls */
|
2003-04-28 11:17:21 +00:00
|
|
|
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
uiBlockSetCol(block, TH_BUT_SETTING1);
|
2003-11-17 14:31:25 +00:00
|
|
|
uiBlockBeginAlign(block);
|
|
|
|
|
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefButI(block, ROW,B_USERPREF,"View & Controls",
|
2003-05-01 12:50:49 +00:00
|
|
|
xpos,ypostab,(short)dx,buth,
|
2003-04-28 11:17:21 +00:00
|
|
|
&U.userpref,1.0,0.0, 0, 0,"");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
|
|
|
|
uiDefButI(block, ROW,B_USERPREF,"Edit Methods",
|
|
|
|
|
(short)(xpos+dx),ypostab,(short)dx,buth,
|
2003-04-28 11:17:21 +00:00
|
|
|
&U.userpref,1.0,1.0, 0, 0,"");
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-05-11 23:28:32 +00:00
|
|
|
uiDefButI(block, ROW,B_USERPREF,"Language & Font",
|
2003-05-01 12:50:49 +00:00
|
|
|
(short)(xpos+2*dx),ypostab,(short)dx,buth,
|
2003-04-28 11:17:21 +00:00
|
|
|
&U.userpref,1.0,2.0, 0, 0,"");
|
2002-10-12 11:37:38 +00:00
|
|
|
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
uiDefButI(block, ROW,B_USERPREF,"Themes",
|
2003-10-17 14:11:17 +00:00
|
|
|
(short)(xpos+3*dx),ypostab,(short)dx,buth,
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
&U.userpref,1.0,6.0, 0, 0,"");
|
|
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButI(block, ROW,B_USERPREF,"Auto Save",
|
2003-10-17 14:11:17 +00:00
|
|
|
(short)(xpos+4*dx),ypostab,(short)dx,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&U.userpref,1.0,3.0, 0, 0,"");
|
|
|
|
|
|
|
|
|
|
uiDefButI(block, ROW,B_USERPREF,"System & OpenGL",
|
2003-05-03 12:17:11 +00:00
|
|
|
(short)(xpos+5*dx),ypostab,(short)dx,buth,
|
2003-04-28 11:17:21 +00:00
|
|
|
&U.userpref,1.0,4.0, 0, 0,"");
|
2003-10-17 14:11:17 +00:00
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButI(block, ROW,B_USERPREF,"File Paths",
|
2003-10-17 14:11:17 +00:00
|
|
|
(short)(xpos+6*dx),ypostab,(short)dx,buth,
|
2003-04-28 11:17:21 +00:00
|
|
|
&U.userpref,1.0,5.0, 0, 0,"");
|
2003-01-28 11:14:38 +00:00
|
|
|
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
uiBlockSetCol(block, TH_AUTO);
|
2003-11-17 14:31:25 +00:00
|
|
|
uiBlockEndAlign(block);
|
2003-05-01 12:50:49 +00:00
|
|
|
/* end 'tab' controls */
|
2003-04-28 11:17:21 +00:00
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
/* line 2: left x co-ord, top y co-ord, width, height */
|
2003-04-28 11:17:21 +00:00
|
|
|
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
if(U.userpref == 6) {
|
|
|
|
|
info_user_themebuts(block, y1, y2, y3);
|
|
|
|
|
}
|
|
|
|
|
else if (U.userpref == 0) { /* view & controls */
|
2003-04-28 11:17:21 +00:00
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefBut(block, LABEL,0,"Display:",
|
|
|
|
|
xpos,y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
2003-11-17 14:31:25 +00:00
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButS(block, TOG|BIT|11, 0, "ToolTips",
|
|
|
|
|
(xpos+edgespace),y2,smallprefbut,buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0,
|
|
|
|
|
"Displays tooltips (help tags) over buttons");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|4, B_DRAWINFO, "Object Info",
|
|
|
|
|
(xpos+edgespace+midspace+smallprefbut),y2,smallprefbut,buth,
|
|
|
|
|
&(U.uiflag), 0, 0, 0, 0,
|
|
|
|
|
"Displays current object name and frame number in the 3D viewport");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|4, 0, "Global Scene",
|
|
|
|
|
(xpos+edgespace),y1,medprefbut,buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0,
|
|
|
|
|
"Forces the current Scene to be displayed in all Screens");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uiDefBut(block, LABEL,0,"Snap to grid:",
|
|
|
|
|
(xpos+edgespace+medprefbut),y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|1, 0, "Grab",
|
|
|
|
|
(xpos+edgespace+medprefbut+midspace),y2,smallprefbut,buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0,
|
2003-05-11 23:28:32 +00:00
|
|
|
"Move objects to grid units");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
2003-10-12 13:58:56 +00:00
|
|
|
uiDefButS(block, TOG|BIT|3, 0, "Size",
|
|
|
|
|
(xpos+edgespace+medprefbut+midspace),y1,smallprefbut,buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0,
|
|
|
|
|
"Scale objects to grid units");
|
|
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButS(block, TOG|BIT|2, 0, "Rotate",
|
|
|
|
|
(xpos+edgespace+medprefbut+(2*midspace)+smallprefbut),y2,smallprefbut,buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0,
|
2003-05-11 23:28:32 +00:00
|
|
|
"Rotate objects to grid units");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
2003-10-12 13:58:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
uiDefBut(block, LABEL,0,"Menu Buttons:",
|
|
|
|
|
(xpos+edgespace+medprefbut+(3*midspace)+(2*smallprefbut)),y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|9, 0, "Auto Open",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+medprefbut+(3*midspace)+(2*smallprefbut)),y2,smallprefbut,buth,
|
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
2003-10-12 13:58:56 +00:00
|
|
|
&(U.uiflag), 0, 0, 0, 0,
|
|
|
|
|
"Automatic opening of menu buttons");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
2003-10-12 13:58:56 +00:00
|
|
|
uiDefButS(block, NUM, 0, "ThresA:",
|
|
|
|
|
(xpos+edgespace+medprefbut+(3*midspace)+(2*smallprefbut)),y1,smallprefbut,buth,
|
|
|
|
|
&(U.menuthreshold1), 1, 40, 0, 0,
|
|
|
|
|
"Time in 1/10 seconds for auto open");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
2003-10-12 13:58:56 +00:00
|
|
|
uiDefButS(block, NUM, 0, "ThresB:",
|
|
|
|
|
(xpos+edgespace+medprefbut+(4*midspace)+(3*smallprefbut)),y1,smallprefbut,buth,
|
|
|
|
|
&(U.menuthreshold2), 1, 40, 0, 0,
|
|
|
|
|
"Time in 1/10 seconds for auto open sublevels");
|
2003-10-29 01:10:10 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
uiDefBut(block, LABEL,0,"Toolbox Thresh.:",
|
|
|
|
|
(xpos+edgespace+(3*midspace)+(3*medprefbut)),y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, NUM, 0, "LMB:",
|
|
|
|
|
(xpos+edgespace+(3*midspace)+(3*medprefbut)),y2,smallprefbut,buth,
|
|
|
|
|
&(U.tb_leftmouse), 2, 40, 0, 0,
|
|
|
|
|
"Time in 1/10 seconds leftmouse hold to open toolbox");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, NUM, 0, "RMB:",
|
|
|
|
|
(xpos+edgespace+(3*midspace)+(3*medprefbut)),y1,smallprefbut,buth,
|
|
|
|
|
&(U.tb_rightmouse), 2, 40, 0, 0,
|
|
|
|
|
"Time in 1/10 seconds for rightmouse to open toolbox");
|
|
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
|
2003-10-29 01:10:10 +00:00
|
|
|
uiDefBut(block, LABEL,0,"View rotation:",
|
|
|
|
|
(xpos+edgespace+(3*midspace)+(3*medprefbut)+smallprefbut+2),y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|5, B_DRAWINFO, "Trackball",
|
|
|
|
|
(xpos+edgespace+(3*midspace)+(3*medprefbut)+smallprefbut+2),y2,(smallprefbut+2),buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0,
|
|
|
|
|
"Use trackball style rotation with middle mouse button");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, TOGN|BIT|5, B_DRAWINFO, "Turntable",
|
|
|
|
|
(xpos+edgespace+(3*midspace)+(3*medprefbut)+smallprefbut+2),y1,(smallprefbut+2),buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0,
|
|
|
|
|
"Use turntable style rotation with middle mouse button");
|
|
|
|
|
|
|
|
|
|
|
2003-04-28 11:17:21 +00:00
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButS(block, TOGN|BIT|10, B_DRAWINFO, "Rotate View",
|
2003-05-11 23:28:32 +00:00
|
|
|
(xpos+edgespace+(4*midspace)+(4*medprefbut)),y2,(smallprefbut+2),buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.flag), 0, 0, 0, 0, "Default action for the middle mouse button");
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButS(block, TOG|BIT|10, B_DRAWINFO, "Pan View",
|
2003-05-11 23:28:32 +00:00
|
|
|
(xpos+edgespace+(4*midspace)+(4*medprefbut)+smallprefbut+2),y2,(smallprefbut+2),buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.flag), 0, 0, 0, 0, "Default action for the middle mouse button");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
2003-05-11 23:28:32 +00:00
|
|
|
uiDefBut(block, LABEL,0,"Middle mouse button:",
|
|
|
|
|
(xpos+edgespace+(3*midspace)+(4*medprefbut)),y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButS(block, TOG|BIT|12, 0, "Emulate 3 Buttons",
|
2003-05-11 23:28:32 +00:00
|
|
|
(xpos+edgespace+(4*midspace)+(4*medprefbut)),y1,medprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.flag), 0, 0, 0, 0,
|
|
|
|
|
"Emulates a middle mouse button with ALT+LeftMouse");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2003-05-11 23:28:32 +00:00
|
|
|
uiDefBut(block, LABEL,0,"Mousewheel:",
|
|
|
|
|
(xpos+edgespace+(4*midspace)+(5*medprefbut)),y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButS(block, TOG|BIT|2, 0, "Invert Wheel Zoom",
|
2003-05-11 23:28:32 +00:00
|
|
|
(xpos+edgespace+(5*midspace)+(5*medprefbut)),y1,medprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.uiflag), 0, 0, 0, 0,
|
|
|
|
|
"Swaps mouse wheel zoom direction");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButI(block, NUM, 0, "Scroll Lines:",
|
2003-05-11 23:28:32 +00:00
|
|
|
(xpos+edgespace+(5*midspace)+(5*medprefbut)),y2,medprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&U.wheellinescroll, 0.0, 32.0, 0, 0,
|
|
|
|
|
"The number of lines scrolled at a time with the mouse wheel");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
} else if (U.userpref == 1) { /* edit methods */
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefBut(block, LABEL,0,"Material linked to:",
|
|
|
|
|
xpos,y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButS(block, TOGN|BIT|8, B_DRAWINFO, "ObData",
|
2003-10-28 18:43:55 +00:00
|
|
|
(xpos+edgespace),y2,(smallprefbut),buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.flag), 0, 0, 0, 0, "Link new objects' material to the obData block");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButS(block, TOG|BIT|8, B_DRAWINFO, "Object",
|
2003-10-28 18:43:55 +00:00
|
|
|
(xpos+edgespace+midspace+smallprefbut),y2,(smallprefbut),buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.flag), 0, 0, 0, 0, "Link new objects' material to the object block");
|
|
|
|
|
|
2003-10-28 18:43:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
uiDefBut(block, LABEL,0,"Mesh Undo",
|
|
|
|
|
(xpos+edgespace+medprefbut),y3label, medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, NUMSLI, B_DRAWINFO, "Steps:",
|
|
|
|
|
(xpos+edgespace+medprefbut+midspace),y2,(medprefbut),buth,
|
|
|
|
|
&(U.undosteps), 1, 64, 0, 0, "Number of undo steps avail. in Editmode. Smaller conserves memory.");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
Another mega commit... loadsof restructure, and a pretty good one! :)
- changed the BIF_DrawString() function. it used to work different for
AA fonts as for default fonts. Now it's identical. Setting color for fonts
can just be done with OpenGL, for both font types.
Removed: BIF_DrawStringRGB()
- added theme color options for Buttons
- recoded DefButton, so it automatically chooses the right color.
- had to remove a 1000 uiBlockSetCol() calls for that reason...
- uiBlockSetCol() still works, to override automatic color
- removed entirely the silly old color system (BIFColorID). All color
calls can now be done with a BIF_ThemeColor() call, including fonts and
buttons and opengl stuff
- all buttons in button header have headercolor by default
- recoded drawing icons, it was a really bad & old loop doing manually
colorshading and blending... which was per pixel a load of code!
Now it uses a single OpenGL call to blend or colorize. Quite faster!
- (as test, for review) icons don't colorize anymore with button color,
but have a different alpha to blend in (when not active)
- recoded the entire interface_draw.c file...:
- drawing buttons is separated in three parts:
1. main drawing function for text and icons
2. free definable callback for button itself
3. free definable callback for slider
- removed a load of redundant code for this!
- coded a minimal theme, and adjusted Matt's buttons to match new
callback system
- adding new drawing themes is piece of cake now
- for coders, default 'themes' to be aware of:
UI_EMBOSS : the themable drawing style
UI_EMBOSSP: the pulldown menu system (apart from color not themable)
UI_EMBOSSN: draw nothing, only text and/or icon
UI_EMBOSSM: minimal theme, still in use for Logic and Constraintsa
this can be set with uiBlockSetEmboss(block) or in the uiNewBlock() call.
TODO: make UI API call for button alignment
(plus removed another series of warnings from code...)
Plus: fixed bug in Matts commit: he used a 'short' button for an 'int'
2003-10-20 15:40:20 +00:00
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefBut(block, LABEL,0,"Auto keyframe on:",
|
|
|
|
|
(xpos+edgespace+(2*medprefbut)+midspace),y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|0, 0, "Action",
|
|
|
|
|
(xpos+edgespace+(2*medprefbut)+(2*midspace)),y2,smallprefbut,buth,
|
|
|
|
|
&(U.uiflag), 0, 0, 0, 0, "Automatic keyframe insertion in action ipo curve");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|1, 0, "Object",
|
|
|
|
|
(xpos+edgespace+(2*medprefbut)+(3*midspace)+smallprefbut),y2,smallprefbut,buth,
|
|
|
|
|
&(U.uiflag), 0, 0, 0, 0, "Automatic keyframe insertion in object ipo curve");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
uiDefBut(block, LABEL,0,"Duplicate with object:",
|
|
|
|
|
(xpos+edgespace+(3*midspace)+(3*medprefbut)+smallprefbut),y3label,medprefbut,buth,
|
2003-04-28 11:17:21 +00:00
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|0, 0, "Mesh",
|
|
|
|
|
(xpos+edgespace+(4*midspace)+(3*medprefbut)+smallprefbut),y2,smallprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.dupflag), 0, 0, 0, 0, "Causes mesh data to be duplicated with Shift+D");
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefButS(block, TOG|BIT|9, 0, "Armature",
|
|
|
|
|
(xpos+edgespace+(4*midspace)+(3*medprefbut)+smallprefbut),y1,smallprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.dupflag), 0, 0, 0, 0, "Causes armature data to be duplicated with Shift+D");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|2, 0, "Surface",
|
|
|
|
|
(xpos+edgespace+(5*midspace)+(3*medprefbut)+(2*smallprefbut)),y2,smallprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.dupflag), 0, 0, 0, 0, "Causes surface data to be duplicated with Shift+D");
|
|
|
|
|
uiDefButS(block, TOG|BIT|5, 0, "Lamp",
|
2003-04-28 11:17:21 +00:00
|
|
|
(xpos+edgespace+(5*midspace)+(3*medprefbut)+(2*smallprefbut)),y1,smallprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.dupflag), 0, 0, 0, 0, "Causes lamp data to be duplicated with Shift+D");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|1, 0, "Curve",
|
|
|
|
|
(xpos+edgespace+(6*midspace)+(3*medprefbut)+(3*smallprefbut)),y2,smallprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.dupflag), 0, 0, 0, 0, "Causes curve data to be duplicated with Shift+D");
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefButS(block, TOG|BIT|7, 0, "Material",
|
|
|
|
|
(xpos+edgespace+(6*midspace)+(3*medprefbut)+(3*smallprefbut)),y1,smallprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.dupflag), 0, 0, 0, 0, "Causes material data to be duplicated with Shift+D");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|3, 0, "Text",
|
|
|
|
|
(xpos+edgespace+(7*midspace)+(3*medprefbut)+(4*smallprefbut)),y2,smallprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.dupflag), 0, 0, 0, 0, "Causes text data to be duplicated with Shift+D");
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefButS(block, TOG|BIT|8, 0, "Texture",
|
|
|
|
|
(xpos+edgespace+(7*midspace)+(3*medprefbut)+(4*smallprefbut)),y1,smallprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.dupflag), 0, 0, 0, 0, "Causes texture data to be duplicated with Shift+D");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|4, 0, "Metaball",
|
|
|
|
|
(xpos+edgespace+(8*midspace)+(3*medprefbut)+(5*smallprefbut)),y2,smallprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.dupflag), 0, 0, 0, 0, "Causes metaball data to be duplicated with Shift+D");
|
|
|
|
|
uiDefButS(block, TOG|BIT|6, 0, "Ipo",
|
2003-04-28 11:17:21 +00:00
|
|
|
(xpos+edgespace+(8*midspace)+(3*medprefbut)+(5*smallprefbut)),y1,smallprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.dupflag), 0, 0, 0, 0, "Causes ipo data to be duplicated with Shift+D");
|
2003-10-19 20:52:34 +00:00
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
} else if(U.userpref == 2) { /* language & colors */
|
|
|
|
|
|
|
|
|
|
#ifdef INTERNATIONAL
|
2003-11-14 15:49:26 +00:00
|
|
|
char curfont[320];
|
2003-05-01 12:50:49 +00:00
|
|
|
|
|
|
|
|
sprintf(curfont, "Interface Font: ");
|
|
|
|
|
strcat(curfont,U.fontname);
|
|
|
|
|
|
2003-05-10 11:25:52 +00:00
|
|
|
uiDefButS(block, TOG|BIT|5, B_DOLANGUIFONT, "International Fonts",
|
2003-05-01 12:50:49 +00:00
|
|
|
xpos,y2,medprefbut,buth,
|
2003-05-03 12:17:11 +00:00
|
|
|
&(U.transopts), 0, 0, 0, 0, "Activate international interface");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
if(U.transopts & TR_ALL) {
|
|
|
|
|
uiDefBut(block, LABEL,0,curfont,
|
|
|
|
|
(xpos+edgespace+medprefbut+midspace),y2,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
uiDefBut(block, BUT, B_LOADUIFONT, "Select Font",
|
|
|
|
|
xpos,y1,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "Select a new font for the interface");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
|
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
uiDefButI(block, MENU|INT, B_SETFONTSIZE, fontsize_pup(),
|
|
|
|
|
(xpos+edgespace+medprefbut+midspace),y1,medprefbut,buth,
|
|
|
|
|
&U.fontsize, 0, 0, 0, 0, "Current interface font size (points)");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
2003-05-11 23:28:32 +00:00
|
|
|
/*
|
2003-05-03 12:17:11 +00:00
|
|
|
uiDefButS(block, MENU|SHO, B_SETENCODING, encoding_pup(),
|
|
|
|
|
(xpos+edgespace+medprefbut+midspace),y1,medprefbut,buth,
|
|
|
|
|
&U.encoding, 0, 0, 0, 0, "Current interface font encoding");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
|
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
uiDefBut(block, LABEL,0,"Translate:",
|
|
|
|
|
(xpos+edgespace+(2.1*medprefbut)+(2*midspace)),y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
2003-05-11 23:28:32 +00:00
|
|
|
*/
|
2003-05-01 12:50:49 +00:00
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
uiDefButS(block, TOG|BIT|0, B_SETTRANSBUTS, "Tooltips",
|
|
|
|
|
(xpos+edgespace+(2.2*medprefbut)+(3*midspace)),y1,smallprefbut,buth,
|
|
|
|
|
&(U.transopts), 0, 0, 0, 0, "Translate tooltips");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
uiDefButS(block, TOG|BIT|1, B_SETTRANSBUTS, "Buttons",
|
|
|
|
|
(xpos+edgespace+(2.2*medprefbut)+(4*midspace)+smallprefbut),y1,smallprefbut,buth,
|
|
|
|
|
&(U.transopts), 0, 0, 0, 0, "Translate button labels");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
uiDefButS(block, TOG|BIT|2, B_SETTRANSBUTS, "Toolbox",
|
|
|
|
|
(xpos+edgespace+(2.2*medprefbut)+(5*midspace)+(2*smallprefbut)),y1,smallprefbut,buth,
|
|
|
|
|
&(U.transopts), 0, 0, 0, 0, "Translate toolbox menu");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
uiDefButS(block, MENU|SHO, B_SETLANGUAGE, language_pup(),
|
|
|
|
|
(xpos+edgespace+(2.2*medprefbut)+(3*midspace)),y2,medprefbut+(0.5*medprefbut)+3,buth,
|
|
|
|
|
&U.language, 0, 0, 0, 0, "Select interface language");
|
|
|
|
|
|
|
|
|
|
/* uiDefButS(block, TOG|BIT|3, B_SETTRANSBUTS, "FTF All windows",
|
|
|
|
|
(xpos+edgespace+(4*medprefbut)+(4*midspace)),y1,medprefbut,buth,
|
|
|
|
|
&(U.transopts), 0, 0, 0, 0,
|
|
|
|
|
"Use FTF drawing for fileselect and textwindow "
|
|
|
|
|
"(under construction)");
|
|
|
|
|
*/
|
|
|
|
|
}
|
2003-05-01 12:50:49 +00:00
|
|
|
|
|
|
|
|
/* end of INTERNATIONAL */
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
} else if(U.userpref == 3) { /* auto save */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|0, B_RESETAUTOSAVE, "Auto Save Temp Files",
|
|
|
|
|
(xpos+edgespace),y2,medprefbut,buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0,
|
|
|
|
|
"Enables automatic saving of temporary files");
|
|
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
if(U.flag & AUTOSAVE) {
|
2003-05-01 12:50:49 +00:00
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
uiDefBut(block, BUT, B_LOADTEMP, "Open Recent",
|
|
|
|
|
(xpos+edgespace),y1,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0,"Opens the most recently saved temporary file");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
uiDefButI(block, NUM, B_RESETAUTOSAVE, "Minutes:",
|
|
|
|
|
(xpos+edgespace+medprefbut+midspace),y2,medprefbut,buth,
|
|
|
|
|
&(U.savetime), 1.0, 60.0, 0, 0,
|
|
|
|
|
"The time (in minutes) to wait between automatic temporary saves");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
uiDefButS(block, NUM, 0, "Versions:",
|
|
|
|
|
(xpos+edgespace+medprefbut+midspace),y1,medprefbut,buth,
|
|
|
|
|
&U.versions, 0.0, 32.0, 0, 0,
|
|
|
|
|
"The number of old versions to maintain when saving");
|
|
|
|
|
}
|
2003-05-01 12:50:49 +00:00
|
|
|
|
|
|
|
|
} else if (U.userpref == 4) { /* system & opengl */
|
2003-10-25 16:53:50 +00:00
|
|
|
uiDefBut(block, LABEL,0,"Solid OpenGL light:",
|
|
|
|
|
xpos+edgespace, y3label, medprefbut, buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, MENU, B_REDR, "Light1 %x0|Light2 %x1|Light3 %x2",
|
|
|
|
|
xpos+edgespace, y2, 2*medprefbut/6, buth, &cur_light, 0.0, 0.0, 0, 0, "");
|
|
|
|
|
uiBlockSetCol(block, TH_BUT_SETTING1);
|
|
|
|
|
uiDefButI(block, TOG|BIT|0, B_RECALCLIGHT, "On",
|
|
|
|
|
xpos+edgespace+2*medprefbut/6, y2, medprefbut/6, buth,
|
|
|
|
|
&U.light[cur_light].flag, 0.0, 0.0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiBlockSetCol(block, TH_AUTO);
|
|
|
|
|
uiDefButS(block, ROW, B_REDR, "Vec",
|
|
|
|
|
xpos+edgespace+3*medprefbut/6, y2, medprefbut/6, buth,
|
|
|
|
|
&cur_light_var, 123.0, 0.0, 0, 0, "");
|
|
|
|
|
uiDefButS(block, ROW, B_REDR, "Col",
|
|
|
|
|
xpos+edgespace+4*medprefbut/6, y2, medprefbut/6, buth,
|
|
|
|
|
&cur_light_var, 123.0, 1.0, 0, 0, "");
|
|
|
|
|
uiDefButS(block, ROW, B_REDR, "Spec",
|
|
|
|
|
xpos+edgespace+5*medprefbut/6, y2, medprefbut/6, buth,
|
|
|
|
|
&cur_light_var, 123.0, 2.0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
if(cur_light_var==1) {
|
|
|
|
|
uiDefButF(block, NUM, B_RECALCLIGHT, "R ",
|
|
|
|
|
xpos+edgespace, y1, medprefbut/3, buth,
|
|
|
|
|
U.light[cur_light].col, 0.0, 1.0, 100, 2, "");
|
|
|
|
|
uiDefButF(block, NUM, B_RECALCLIGHT, "G ",
|
|
|
|
|
xpos+edgespace+medprefbut/3, y1, medprefbut/3, buth,
|
|
|
|
|
U.light[cur_light].col+1, 0.0, 1.0, 100, 2, "");
|
|
|
|
|
uiDefButF(block, NUM, B_RECALCLIGHT, "B ",
|
|
|
|
|
xpos+edgespace+2*medprefbut/3, y1, medprefbut/3, buth,
|
|
|
|
|
U.light[cur_light].col+2, 0.0, 1.0, 100, 2, "");
|
|
|
|
|
}
|
|
|
|
|
else if(cur_light_var==2) {
|
|
|
|
|
uiDefButF(block, NUM, B_RECALCLIGHT, "sR ",
|
|
|
|
|
xpos+edgespace, y1, medprefbut/3, buth,
|
|
|
|
|
U.light[cur_light].spec, 0.0, 1.0, 100, 2, "");
|
|
|
|
|
uiDefButF(block, NUM, B_RECALCLIGHT, "sG ",
|
|
|
|
|
xpos+edgespace+medprefbut/3, y1, medprefbut/3, buth,
|
|
|
|
|
U.light[cur_light].spec+1, 0.0, 1.0, 100, 2, "");
|
|
|
|
|
uiDefButF(block, NUM, B_RECALCLIGHT, "sB ",
|
|
|
|
|
xpos+edgespace+2*medprefbut/3, y1, medprefbut/3, buth,
|
|
|
|
|
U.light[cur_light].spec+2, 0.0, 1.0, 100, 2, "");
|
|
|
|
|
}
|
|
|
|
|
else if(cur_light_var==0) {
|
|
|
|
|
uiDefButF(block, NUM, B_RECALCLIGHT, "X ",
|
|
|
|
|
xpos+edgespace, y1, medprefbut/3, buth,
|
|
|
|
|
U.light[cur_light].vec, -1.0, 1.0, 100, 2, "");
|
|
|
|
|
uiDefButF(block, NUM, B_RECALCLIGHT, "Y ",
|
|
|
|
|
xpos+edgespace+medprefbut/3, y1, medprefbut/3, buth,
|
|
|
|
|
U.light[cur_light].vec+1, -1.0, 1.0, 100, 2, "");
|
|
|
|
|
uiDefButF(block, NUM, B_RECALCLIGHT, "Z ",
|
|
|
|
|
xpos+edgespace+2*medprefbut/3, y1, medprefbut/3, buth,
|
|
|
|
|
U.light[cur_light].vec+2, -1.0, 1.0, 100, 2, "");
|
|
|
|
|
}
|
2003-05-01 12:50:49 +00:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
uiDefButS(block, TOG|BIT|5, 0, "Log Events to Console",
|
|
|
|
|
(xpos+edgespace),y2,largeprefbut,buth,
|
|
|
|
|
&(U.uiflag), 0, 0, 0, 0, "Display a list of input events in the console");
|
|
|
|
|
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefButS(block, MENU|SHO, B_CONSOLEOUT, consolemethod_pup(),
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace), y1, largeprefbut,buth,
|
|
|
|
|
&U.console_out, 0, 0, 0, 0, "Select console output method");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, NUM, B_CONSOLENUMLINES, "Lines:",
|
|
|
|
|
(xpos+edgespace+largeprefbut+midspace),y1,smallprefbut,buth,
|
|
|
|
|
&U.console_buffer, 1.0, 4000.0, 0, 0, "Maximum number of internal console lines");
|
2003-04-28 11:17:21 +00:00
|
|
|
*/
|
|
|
|
|
|
2003-05-11 23:28:32 +00:00
|
|
|
#ifdef _WIN32
|
|
|
|
|
uiDefBut(block, LABEL,0,"Win Codecs:",
|
Commit message and the brunt of the code courtesy of intrr, apologies for the
size of this;
Finally, the Sequencer audio support and global audio/animation sync stuff!
(See http://intrr.org/blender/audiosequencer.html)
Stuff that has been done:
./source/blender/blenloader/intern/writefile.c
./source/blender/blenloader/intern/readfile.c
Added code to make it handle sounds used by audio strips, and to convert
Scene data from older (<2.28) versions to init Scene global audio settings
(Scene->audio) to defaults.
./source/blender/include/BSE_seqaudio.h
./source/blender/src/seqaudio.c
The main audio routines that start/stop/scrub the audio stream at
a certain frame position, provide the frame reference for the current
stream position, mix the audio, convert the audio, mixdown the audio
into a file.
./source/blender/makesdna/DNA_sound_types.h
Introduced new variables in the bSound struct to accomodate the sample
data after converted to the scene's global mixing format (stream, streamlen).
Also added a new flag SOUND_FLAGS_SEQUENCE that gets set if the Sound
belongs to a sequence strip.
./source/blender/makesdna/DNA_scene_types.h
Added AudioData struct, which holds scene-global audio settings.
./source/blender/makesdna/DNA_sequence_types.h
Added support for audio strips. Some variables to hold Panning/Attenuation
information, position information, reference to the sample, and some flags.
./source/blender/makesdna/DNA_userdef_types.h
./source/blender/src/usiblender.c
Added a "Mixing buffer size" userpref. Made the versions stuff initialize
it to a default for versions <2.28.
./source/blender/makesdna/DNA_space_types.h
./source/blender/src/filesel.c
Added a Cyan dot to .WAV files. Any other suggestions on a better color? :)
./source/blender/src/editsound.c
Changes (fixes) to the WAV file loader, re-enabled some gameengine code that
is needed for dealing with bSounds and bSamples.
./source/blender/src/editipo.c
./source/blender/src/drawseq.c
./source/blender/src/editnla.c
./source/blender/src/space.c
./source/blender/src/drawview.c
./source/blender/src/renderwin.c
./source/blender/src/headerbuttons.c
- Created two different wrappers for update_for_newframe(), one which scrubs
the audio, one which doesn't.
- Replaced some of the occurences of update_for_newframe() with
update_for_newframe_muted(), which doesn't scrub the audio.
- In drawview.c: Changed the synchronization scheme to get the current audio
position from the audio engine, and use that as a reference for setting
CFRA. Implements a/v sync and framedrop.
- In editipo.c: Changed handling of Fac IPOs to be usable for audio strips as
volume envelopes.
- In space.c: Added the mixing buffer size Userpref, enabled audio scrubbing
(update_for_newframe()) for moving the sequence editor framebar.
./source/blender/src/editseq.c
Added support for audio strips and a default directory for WAV files which
gets saved from the last Shift-A operation.
./source/blender/src/buttons.c
Added Scene-global audio sequencer settings in Sound buttons.
./source/blender/src/sequence.c
Various stuff that deals with handling audio strips differently than
usual strips.
2003-07-13 20:16:56 +00:00
|
|
|
(xpos+edgespace+(1*midspace)+(1*medprefbut)),y3label,medprefbut,buth,
|
2003-05-11 23:28:32 +00:00
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|8, 0, "Enable all codecs",
|
2003-07-16 18:35:12 +00:00
|
|
|
(xpos+edgespace+(1*medprefbut)+(1*midspace)),y2,medprefbut,buth,
|
2003-05-11 23:28:32 +00:00
|
|
|
&(U.uiflag), 0, 0, 0, 0, "Allows all codecs for rendering (not guaranteed)");
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
uiDefBut(block, LABEL,0,"Keyboard:",
|
|
|
|
|
(xpos+edgespace+(3*midspace)+(3*medprefbut)),y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButS(block, TOG|BIT|9, B_U_CAPSLOCK, "Disable Caps Lock",
|
2003-05-11 23:28:32 +00:00
|
|
|
(xpos+edgespace+(3*midspace)+(3*medprefbut)),y1,medprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.flag), 0, 0, 0, 0,
|
|
|
|
|
"Disables the Caps Lock key when entering text");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|13, 0, "Emulate Numpad",
|
2003-05-11 23:28:32 +00:00
|
|
|
(xpos+edgespace+(3*midspace)+(3*medprefbut)),y2,medprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(U.flag), 0, 0, 0, 0,
|
|
|
|
|
"Causes the 1 to 0 keys to act as the numpad (useful for laptops)");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
|
2003-05-11 23:28:32 +00:00
|
|
|
uiDefBut(block, LABEL,0,"System:",
|
|
|
|
|
(xpos+edgespace+(4*midspace)+(4*medprefbut)),y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButI(block, TOG|BIT|USERDEF_DISABLE_SOUND_BIT, B_SOUNDTOGGLE, "Disable Sound",
|
|
|
|
|
(xpos+edgespace+(4*medprefbut)+(4*midspace)),y2,medprefbut,buth,
|
|
|
|
|
&(U.gameflags), 0, 0, 0, 0, "Disables sounds from being played");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, TOG|BIT|3, 0, "Filter File Extensions",
|
|
|
|
|
(xpos+edgespace+(4*medprefbut)+(4*midspace)),y1,medprefbut,buth,
|
|
|
|
|
&(U.uiflag), 0, 0, 0, 0, "Display only files with extensions in the image select window");
|
|
|
|
|
|
|
|
|
|
|
2003-05-11 23:28:32 +00:00
|
|
|
uiDefBut(block, LABEL,0,"OpenGL:",
|
|
|
|
|
(xpos+edgespace+(5*midspace)+(5*medprefbut)),y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
2003-05-01 12:50:49 +00:00
|
|
|
uiDefButI(block, TOGN|BIT|USERDEF_DISABLE_MIPMAP_BIT, B_MIPMAPCHANGED, "Mipmaps",
|
|
|
|
|
(xpos+edgespace+(5*medprefbut)+(5*midspace)),y2,medprefbut,buth,
|
|
|
|
|
&(U.gameflags), 0, 0, 0, 0, "Toggles between mipmap textures on (beautiful) and off (fast)");
|
|
|
|
|
|
|
|
|
|
uiDefButI(block, TOG|BIT|USERDEF_VERTEX_ARRAYS_BIT, 0, "Vertex Arrays",
|
|
|
|
|
(xpos+edgespace+(5*medprefbut)+(5*midspace)),y1,medprefbut,buth,
|
|
|
|
|
&(U.gameflags), 0, 0, 0, 0, "Toggles between vertex arrays on (less reliable) and off (more reliable)");
|
|
|
|
|
|
Commit message and the brunt of the code courtesy of intrr, apologies for the
size of this;
Finally, the Sequencer audio support and global audio/animation sync stuff!
(See http://intrr.org/blender/audiosequencer.html)
Stuff that has been done:
./source/blender/blenloader/intern/writefile.c
./source/blender/blenloader/intern/readfile.c
Added code to make it handle sounds used by audio strips, and to convert
Scene data from older (<2.28) versions to init Scene global audio settings
(Scene->audio) to defaults.
./source/blender/include/BSE_seqaudio.h
./source/blender/src/seqaudio.c
The main audio routines that start/stop/scrub the audio stream at
a certain frame position, provide the frame reference for the current
stream position, mix the audio, convert the audio, mixdown the audio
into a file.
./source/blender/makesdna/DNA_sound_types.h
Introduced new variables in the bSound struct to accomodate the sample
data after converted to the scene's global mixing format (stream, streamlen).
Also added a new flag SOUND_FLAGS_SEQUENCE that gets set if the Sound
belongs to a sequence strip.
./source/blender/makesdna/DNA_scene_types.h
Added AudioData struct, which holds scene-global audio settings.
./source/blender/makesdna/DNA_sequence_types.h
Added support for audio strips. Some variables to hold Panning/Attenuation
information, position information, reference to the sample, and some flags.
./source/blender/makesdna/DNA_userdef_types.h
./source/blender/src/usiblender.c
Added a "Mixing buffer size" userpref. Made the versions stuff initialize
it to a default for versions <2.28.
./source/blender/makesdna/DNA_space_types.h
./source/blender/src/filesel.c
Added a Cyan dot to .WAV files. Any other suggestions on a better color? :)
./source/blender/src/editsound.c
Changes (fixes) to the WAV file loader, re-enabled some gameengine code that
is needed for dealing with bSounds and bSamples.
./source/blender/src/editipo.c
./source/blender/src/drawseq.c
./source/blender/src/editnla.c
./source/blender/src/space.c
./source/blender/src/drawview.c
./source/blender/src/renderwin.c
./source/blender/src/headerbuttons.c
- Created two different wrappers for update_for_newframe(), one which scrubs
the audio, one which doesn't.
- Replaced some of the occurences of update_for_newframe() with
update_for_newframe_muted(), which doesn't scrub the audio.
- In drawview.c: Changed the synchronization scheme to get the current audio
position from the audio engine, and use that as a reference for setting
CFRA. Implements a/v sync and framedrop.
- In editipo.c: Changed handling of Fac IPOs to be usable for audio strips as
volume envelopes.
- In space.c: Added the mixing buffer size Userpref, enabled audio scrubbing
(update_for_newframe()) for moving the sequence editor framebar.
./source/blender/src/editseq.c
Added support for audio strips and a default directory for WAV files which
gets saved from the last Shift-A operation.
./source/blender/src/buttons.c
Added Scene-global audio sequencer settings in Sound buttons.
./source/blender/src/sequence.c
Various stuff that deals with handling audio strips differently than
usual strips.
2003-07-13 20:16:56 +00:00
|
|
|
uiDefBut(block, LABEL,0,"Audio:",
|
|
|
|
|
(xpos+edgespace+(2*midspace)+(2*medprefbut)),y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiDefButI(block, ROW, 0, "Mixing buffer 256", (xpos+edgespace+(2*midspace)+(2*medprefbut)),y2,medprefbut,buth, &U.mixbufsize, 2.0, 256.0, 0, 0, "Set audio buffer size to 256 samples");
|
|
|
|
|
uiDefButI(block, ROW, 0, "512", (xpos+edgespace+(2*midspace)+(2*medprefbut)),y1,61,buth, &U.mixbufsize, 2.0, 512.0, 0, 0, "Set audio buffer size to 512 samples");
|
|
|
|
|
uiDefButI(block, ROW, 0, "1024", (xpos+edgespace+(2*midspace)+(2*medprefbut))+61+midspace,y1,61,buth, &U.mixbufsize, 2.0, 1024.0, 0, 0, "Set audio buffer size to 1024 samples");
|
|
|
|
|
uiDefButI(block, ROW, 0, "2048", (xpos+edgespace+(2*midspace)+(2*medprefbut))+2*(61+midspace),y1,61,buth, &U.mixbufsize, 2.0, 2048.0, 0, 0, "Set audio buffer size to 2048 samples");
|
2003-05-01 12:50:49 +00:00
|
|
|
|
|
|
|
|
} else if(U.userpref == 5) { /* file paths */
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
uiDefBut(block, TEX, 0, "Fonts: ",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace),y2,(largeprefbut-smfileselbut),buth,
|
|
|
|
|
U.fontdir, 1.0, 63.0, 0, 0,
|
|
|
|
|
"The default directory to search for loading fonts");
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefIconBut(block, BUT, B_FONTDIRFILESEL, ICON_FILESEL,
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+largeprefbut-smfileselbut),y2,smfileselbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "Select the default font directory");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
uiDefBut(block, TEX, 0, "Textures: ",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+largeprefbut+midspace),y2,(largeprefbut-smfileselbut),buth,
|
|
|
|
|
U.textudir, 1.0, 63.0, 0, 0, "The default directory to search for textures");
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefIconBut(block, BUT, B_TEXTUDIRFILESEL, ICON_FILESEL,
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+(2*largeprefbut)+midspace-smfileselbut),y2,smfileselbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "Select the default texture location");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uiDefBut(block, TEX, 0, "Tex Plugins: ",
|
|
|
|
|
(xpos+edgespace+(2*largeprefbut)+(2*midspace)),y2,(largeprefbut-smfileselbut),buth,
|
|
|
|
|
U.plugtexdir, 1.0, 63.0, 0, 0, "The default directory to search for texture plugins");
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefIconBut(block, BUT, B_PLUGTEXDIRFILESEL, ICON_FILESEL,
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+(3*largeprefbut)+(2*midspace)-smfileselbut),y2,smfileselbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "Select the default texture plugin location");
|
|
|
|
|
|
|
|
|
|
uiDefBut(block, TEX, 0, "Seq Plugins: ",
|
|
|
|
|
(xpos+edgespace+(3*largeprefbut)+(3*midspace)),y2,(largeprefbut-smfileselbut),buth,
|
|
|
|
|
U.plugseqdir, 1.0, 63.0, 0, 0, "The default directory to search for sequence plugins");
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefIconBut(block, BUT, B_PLUGSEQDIRFILESEL, ICON_FILESEL,
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+(4*largeprefbut)+(3*midspace)-smfileselbut),y2,smfileselbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "Select the default sequence plugin location");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
uiDefBut(block, TEX, 0, "Render: ",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace),y1,(largeprefbut-smfileselbut),buth,
|
|
|
|
|
U.renderdir, 1.0, 63.0, 0, 0, "The default directory for rendering output");
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefIconBut(block, BUT, B_RENDERDIRFILESEL, ICON_FILESEL,
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+largeprefbut-smfileselbut),y1,smfileselbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "Select the default render output location");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
uiDefBut(block, TEX, 0, "Python: ",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+largeprefbut+midspace),y1,(largeprefbut-smfileselbut),buth,
|
|
|
|
|
U.pythondir, 1.0, 63.0, 0, 0, "The default directory to search for Python scripts");
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefIconBut(block, BUT, B_PYTHONDIRFILESEL, ICON_FILESEL,
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+(2*largeprefbut)+midspace-smfileselbut),y1,smfileselbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "Select the default Python script location");
|
|
|
|
|
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
uiDefBut(block, TEX, 0, "Sounds: ",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+(2*largeprefbut)+(2*midspace)),y1,(largeprefbut-smfileselbut),buth,
|
|
|
|
|
U.sounddir, 1.0, 63.0, 0, 0, "The default directory to search for sounds");
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefIconBut(block, BUT, B_SOUNDDIRFILESEL, ICON_FILESEL,
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+(3*largeprefbut)+(2*midspace)-smfileselbut),y1,smfileselbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "Select the default sound location");
|
|
|
|
|
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefBut(block, TEX, 0, "Temp: ",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+(3*largeprefbut)+(3*midspace)),y1,(largeprefbut-smfileselbut),buth,
|
|
|
|
|
U.tempdir, 1.0, 63.0, 0, 0, "The directory for storing temporary save files");
|
2003-04-28 11:17:21 +00:00
|
|
|
uiDefIconBut(block, BUT, B_TEMPDIRFILESEL, ICON_FILESEL,
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+(4*largeprefbut)+(3*midspace)-smfileselbut),y1,smfileselbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "Select the default temporary save file location");
|
2003-04-28 11:17:21 +00:00
|
|
|
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
uiDrawBlock(block);
|
2003-10-04 20:35:50 +00:00
|
|
|
|
2003-11-12 21:14:30 +00:00
|
|
|
myortho2(-0.5, (float)(sa->winx)-0.5, -0.5, (float)(sa->winy)-0.5);
|
2003-10-04 20:35:50 +00:00
|
|
|
draw_area_emboss(sa);
|
|
|
|
|
myortho2(0.0, 1280.0, 0.0, curarea->winy/fac);
|
|
|
|
|
sa->win_swap= WIN_BACK_OK;
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
2003-04-28 11:17:21 +00:00
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
void winqreadinfospace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
2003-03-24 01:46:05 +00:00
|
|
|
unsigned short event= evt->event;
|
|
|
|
|
short val= evt->val;
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
if(val) {
|
|
|
|
|
if( uiDoBlocks(&curarea->uiblocks, event)!=UI_NOTHING ) event= 0;
|
|
|
|
|
|
|
|
|
|
switch(event) {
|
|
|
|
|
case UI_BUT_EVENT:
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
if(val==B_ADD_THEME) {
|
|
|
|
|
bTheme *btheme, *new;
|
|
|
|
|
|
|
|
|
|
btheme= U.themes.first;
|
|
|
|
|
new= MEM_callocN(sizeof(bTheme), "theme");
|
|
|
|
|
memcpy(new, btheme, sizeof(bTheme));
|
|
|
|
|
BLI_addhead(&U.themes, new);
|
|
|
|
|
strcpy(new->name, "New User Theme");
|
|
|
|
|
addqueue(sa->win, REDRAW, 1);
|
|
|
|
|
}
|
|
|
|
|
else if(val==B_DEL_THEME) {
|
|
|
|
|
bTheme *btheme= U.themes.first;
|
|
|
|
|
BLI_remlink(&U.themes, btheme);
|
|
|
|
|
MEM_freeN(btheme);
|
2003-10-19 09:19:58 +00:00
|
|
|
BIF_SetTheme(curarea); // prevent usage of old theme in calls
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
addqueue(sa->win, REDRAW, 1);
|
|
|
|
|
}
|
|
|
|
|
else if(val==B_NAME_THEME) {
|
|
|
|
|
bTheme *btheme= U.themes.first;
|
|
|
|
|
if(strcmp(btheme->name, "Default")==0) {
|
|
|
|
|
strcpy(btheme->name, "New User Theme");
|
|
|
|
|
addqueue(sa->win, REDRAW, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(val==B_UPDATE_THEME) {
|
|
|
|
|
allqueue(REDRAWALL, 0);
|
|
|
|
|
}
|
|
|
|
|
else if(val==B_CHANGE_THEME) {
|
|
|
|
|
th_curcol= TH_BACK; // backdrop color is always there...
|
|
|
|
|
addqueue(sa->win, REDRAW, 1);
|
|
|
|
|
}
|
|
|
|
|
else if(val==B_THEME_COPY) {
|
|
|
|
|
if(th_curcol_ptr) {
|
|
|
|
|
th_curcol_arr[0]= th_curcol_ptr[0];
|
|
|
|
|
th_curcol_arr[1]= th_curcol_ptr[1];
|
|
|
|
|
th_curcol_arr[2]= th_curcol_ptr[2];
|
|
|
|
|
th_curcol_arr[3]= th_curcol_ptr[3];
|
2003-10-17 15:12:45 +00:00
|
|
|
addqueue(sa->win, REDRAW, 1);
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(val==B_THEME_PASTE) {
|
|
|
|
|
if(th_curcol_ptr) {
|
|
|
|
|
th_curcol_ptr[0]= th_curcol_arr[0];
|
|
|
|
|
th_curcol_ptr[1]= th_curcol_arr[1];
|
|
|
|
|
th_curcol_ptr[2]= th_curcol_arr[2];
|
|
|
|
|
th_curcol_ptr[3]= th_curcol_arr[3];
|
|
|
|
|
allqueue(REDRAWALL, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-10-25 16:53:50 +00:00
|
|
|
else if(val==B_RECALCLIGHT) {
|
|
|
|
|
if(U.light[0].flag==0 && U.light[1].flag==0 && U.light[2].flag==0)
|
|
|
|
|
U.light[0].flag= 1;
|
|
|
|
|
|
|
|
|
|
default_gl_light();
|
|
|
|
|
addqueue(sa->win, REDRAW, 1);
|
|
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
|
|
|
|
}
|
- The basic layer for Themes in place!
- currently only implemented for 3d window
- create as many themes you like, and name them
- default theme is not editable, and always will be defined at startup
(initTheme)
- saves in .B.blend
- themes for spaces can become local too, so you can set individual
3d windows at theme 'Maya' or so. (to be implemented)
- it uses alpha as well...!
API:
This doesnt use the old method with BFCOLORID blahblah. The API is copied
from OpenGL conventions (naming) as much as possible:
- void BIF_ThemeColor(ScrArea *sa, int colorid)
sets a color... id's are in BIF_resources.h (TH_GRID, TH_WIRE, etc)
- void BIF_ThemeColorShade(ScrArea *sa, int colorid, int offset)
sets a color with offset, no more weird COLORSHADE_LGREY stuff
- void BIF_GetThemeColor3fv(ScrArea *sa, int colorid, float *col)
like opengl, this gives you in *col the three rgb values
- void BIF_GetThemeColor4ubv(ScrArea *sa, int colorid, char *col)
or the one to get 4 bytes
ThemeColor calls for globals (UI etc) can also call NULL for *sa... this
is to be implemented still.
Next step: cleaning up interface.c for all weird colorcalls.
2003-10-17 14:02:08 +00:00
|
|
|
else do_global_buttons(val);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void init_infospace(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
SpaceInfo *sinfo;
|
|
|
|
|
|
|
|
|
|
sinfo= MEM_callocN(sizeof(SpaceInfo), "initinfo");
|
|
|
|
|
BLI_addhead(&sa->spacedata, sinfo);
|
2003-06-13 19:56:15 +00:00
|
|
|
|
|
|
|
|
sinfo->spacetype=SPACE_INFO;
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ******************** SPACE: BUTS ********************** */
|
|
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
extern void drawbutspace(ScrArea *sa, void *spacedata); /* buttons.c */
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
static void changebutspace(ScrArea *sa, void *spacedata)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
|
|
|
|
if(G.v2d==0) return;
|
|
|
|
|
|
|
|
|
|
test_view2d(G.v2d, curarea->winx, curarea->winy);
|
2003-11-12 21:14:30 +00:00
|
|
|
myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
void winqreadbutspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
2003-03-24 01:46:05 +00:00
|
|
|
unsigned short event= evt->event;
|
|
|
|
|
short val= evt->val;
|
2002-10-12 11:37:38 +00:00
|
|
|
SpaceButs *sbuts= curarea->spacedata.first;
|
2003-03-24 01:46:05 +00:00
|
|
|
ScrArea *sa2, *sa3d;
|
2003-10-04 20:35:50 +00:00
|
|
|
int nr, doredraw= 0;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
if(val) {
|
|
|
|
|
|
|
|
|
|
if( uiDoBlocks(&curarea->uiblocks, event)!=UI_NOTHING ) event= 0;
|
|
|
|
|
|
|
|
|
|
switch(event) {
|
|
|
|
|
case UI_BUT_EVENT:
|
2003-10-07 18:24:02 +00:00
|
|
|
do_butspace(val);
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case MIDDLEMOUSE:
|
2003-01-28 11:14:38 +00:00
|
|
|
case WHEELUPMOUSE:
|
|
|
|
|
case WHEELDOWNMOUSE:
|
|
|
|
|
view2dmove(event); /* in drawipo.c */
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
2003-10-04 21:03:57 +00:00
|
|
|
case PAGEUPKEY:
|
|
|
|
|
event= WHEELUPMOUSE;
|
|
|
|
|
view2dmove(event); /* in drawipo.c */
|
|
|
|
|
break;
|
|
|
|
|
case PAGEDOWNKEY:
|
|
|
|
|
event= WHEELDOWNMOUSE;
|
|
|
|
|
view2dmove(event); /* in drawipo.c */
|
|
|
|
|
break;
|
|
|
|
|
|
2003-10-04 20:35:50 +00:00
|
|
|
case RIGHTMOUSE:
|
|
|
|
|
nr= pupmenu("Align buttons%t|Free %x0|Horizontal%x1|Vertical%x2");
|
|
|
|
|
if (nr>=0) {
|
|
|
|
|
sbuts->align= nr;
|
2003-10-11 18:15:07 +00:00
|
|
|
if(nr) {
|
|
|
|
|
uiAlignPanelStep(sa, 1.0);
|
|
|
|
|
do_buts_buttons(B_BUTSHOME);
|
|
|
|
|
}
|
2003-10-04 20:35:50 +00:00
|
|
|
}
|
2003-01-28 11:14:38 +00:00
|
|
|
|
2003-10-04 20:35:50 +00:00
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
case PADPLUSKEY:
|
2003-10-28 03:08:50 +00:00
|
|
|
view2d_zoom(&sbuts->v2d, 0.06f, curarea->winx, curarea->winy);
|
2003-03-24 01:46:05 +00:00
|
|
|
scrarea_queue_winredraw(curarea);
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
case PADMINUS:
|
2003-10-28 03:08:50 +00:00
|
|
|
view2d_zoom(&sbuts->v2d, -0.075f, curarea->winx, curarea->winy);
|
2003-03-24 01:46:05 +00:00
|
|
|
scrarea_queue_winredraw(curarea);
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case RENDERPREVIEW:
|
|
|
|
|
BIF_previewrender(sbuts);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case HOMEKEY:
|
|
|
|
|
do_buts_buttons(B_BUTSHOME);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* if only 1 view, also de persp, excluding arrowkeys */
|
|
|
|
|
case PAD0: case PAD1: case PAD3:
|
|
|
|
|
case PAD5: case PAD7: case PAD9:
|
|
|
|
|
case PADENTER: case ZKEY: case PKEY:
|
|
|
|
|
sa3d= 0;
|
2003-03-24 01:46:05 +00:00
|
|
|
sa2= G.curscreen->areabase.first;
|
|
|
|
|
while(sa2) {
|
|
|
|
|
if(sa2->spacetype==SPACE_VIEW3D) {
|
2002-10-12 11:37:38 +00:00
|
|
|
if(sa3d) return;
|
2003-03-24 01:46:05 +00:00
|
|
|
sa3d= sa2;
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-03-24 01:46:05 +00:00
|
|
|
sa2= sa2->next;
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
if(sa3d) {
|
|
|
|
|
sa= curarea;
|
|
|
|
|
areawinset(sa3d->win);
|
|
|
|
|
|
|
|
|
|
if(event==PKEY) start_game();
|
2003-03-24 01:46:05 +00:00
|
|
|
else if(event==ZKEY) toggle_shading();
|
2002-10-12 11:37:38 +00:00
|
|
|
else persptoetsen(event);
|
|
|
|
|
|
|
|
|
|
scrarea_queue_winredraw(sa3d);
|
|
|
|
|
scrarea_queue_headredraw(sa3d);
|
|
|
|
|
areawinset(sa->win);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(doredraw) scrarea_queue_winredraw(curarea);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void set_rects_butspace(SpaceButs *buts)
|
|
|
|
|
{
|
2003-04-30 13:22:26 +00:00
|
|
|
/* buts space goes from (0,0) to (1280, 228) */
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-10-28 03:08:50 +00:00
|
|
|
buts->v2d.tot.xmin= 0.0f;
|
|
|
|
|
buts->v2d.tot.ymin= 0.0f;
|
|
|
|
|
buts->v2d.tot.xmax= 1279.0f;
|
|
|
|
|
buts->v2d.tot.ymax= 228.0f;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-10-28 03:08:50 +00:00
|
|
|
buts->v2d.min[0]= 256.0f;
|
|
|
|
|
buts->v2d.min[1]= 42.0f;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-10-28 03:08:50 +00:00
|
|
|
buts->v2d.max[0]= 2048.0f;
|
|
|
|
|
buts->v2d.max[1]= 450.0f;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-10-28 03:08:50 +00:00
|
|
|
buts->v2d.minzoom= 0.5f;
|
|
|
|
|
buts->v2d.maxzoom= 1.21f;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
buts->v2d.scroll= 0;
|
|
|
|
|
buts->v2d.keepaspect= 1;
|
|
|
|
|
buts->v2d.keepzoom= 1;
|
|
|
|
|
buts->v2d.keeptot= 1;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void test_butspace(void)
|
|
|
|
|
{
|
|
|
|
|
ScrArea *area= curarea;
|
|
|
|
|
int blocksmin= uiBlocksGetYMin(&area->uiblocks)-10.0;
|
|
|
|
|
|
|
|
|
|
G.buts->v2d.tot.ymin= MIN2(0.0, blocksmin-10.0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void init_butspace(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
SpaceButs *buts;
|
|
|
|
|
|
|
|
|
|
buts= MEM_callocN(sizeof(SpaceButs), "initbuts");
|
|
|
|
|
BLI_addhead(&sa->spacedata, buts);
|
|
|
|
|
|
|
|
|
|
buts->spacetype= SPACE_BUTS;
|
|
|
|
|
buts->scaflag= BUTS_SENS_LINK|BUTS_SENS_ACT|BUTS_CONT_ACT|BUTS_ACT_ACT|BUTS_ACT_LINK;
|
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
/* set_rects only does defaults, so after reading a file the cur has not changed */
|
2002-10-12 11:37:38 +00:00
|
|
|
set_rects_butspace(buts);
|
|
|
|
|
buts->v2d.cur= buts->v2d.tot;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void extern_set_butspace(int fkey)
|
|
|
|
|
{
|
|
|
|
|
ScrArea *sa;
|
|
|
|
|
SpaceButs *sbuts;
|
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
/* when a f-key pressed: closest button window is initialized */
|
2002-10-12 11:37:38 +00:00
|
|
|
if(curarea->spacetype==SPACE_BUTS) sa= curarea;
|
|
|
|
|
else {
|
2003-04-30 13:22:26 +00:00
|
|
|
/* find area */
|
2002-10-12 11:37:38 +00:00
|
|
|
sa= G.curscreen->areabase.first;
|
|
|
|
|
while(sa) {
|
|
|
|
|
if(sa->spacetype==SPACE_BUTS) break;
|
|
|
|
|
sa= sa->next;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(sa==0) return;
|
|
|
|
|
|
|
|
|
|
if(sa!=curarea) areawinset(sa->win);
|
|
|
|
|
|
|
|
|
|
sbuts= sa->spacedata.first;
|
|
|
|
|
|
Another huge commit!!!
First, check on the new files, which are listed below.
The new butspace.h is a local include, only to be used for the buttons
drawn in the buttonswindow.
- editbuts, animbuts, gamebuts, displaybuts, paintbuts, work now
- i quite completely reorganized it, it's now nicely telling you what
context it is in
- sorting error in panel align fixed (tabs were flipping)
- align works correctly automatic when you click around in Blender
- editsca.c renamed to buttons_logic.h
- button names are truncated from the right for allmost all buttons
(except text buttons and number buttons)
- while dragging panels, you cannot move them outside window anymore
And of course fixed loads of little bugs I encountered while testing
it all. This is a version I really need good test & feedback for.
Next step: restoring material/lamp/texture/world
2003-10-10 17:29:01 +00:00
|
|
|
if(fkey==F4KEY) {
|
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
2003-10-12 13:58:56 +00:00
|
|
|
sbuts->mainb= CONTEXT_LOGIC;
|
Another huge commit!!!
First, check on the new files, which are listed below.
The new butspace.h is a local include, only to be used for the buttons
drawn in the buttonswindow.
- editbuts, animbuts, gamebuts, displaybuts, paintbuts, work now
- i quite completely reorganized it, it's now nicely telling you what
context it is in
- sorting error in panel align fixed (tabs were flipping)
- align works correctly automatic when you click around in Blender
- editsca.c renamed to buttons_logic.h
- button names are truncated from the right for allmost all buttons
(except text buttons and number buttons)
- while dragging panels, you cannot move them outside window anymore
And of course fixed loads of little bugs I encountered while testing
it all. This is a version I really need good test & feedback for.
Next step: restoring material/lamp/texture/world
2003-10-10 17:29:01 +00:00
|
|
|
}
|
|
|
|
|
else if(fkey==F5KEY) {
|
|
|
|
|
sbuts->mainb= CONTEXT_SHADING;
|
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
- Converted lamp buttons and world buttons, they're pretty!
- menu auto open now is user preset, including 2 thresholds you can set
- hilites of pulldown menus were not cleared, fixed
- changed F4 key to logic. F5 will show lamp buttons, when lamp active
- in 'shader context' buttons, clicking camera will show world
2003-10-12 13:58:56 +00:00
|
|
|
if(OBACT) {
|
|
|
|
|
if(OBACT->type==OB_CAMERA)
|
|
|
|
|
sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_WORLD;
|
|
|
|
|
else if(OBACT->type==OB_LAMP)
|
|
|
|
|
sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_LAMP;
|
|
|
|
|
else
|
|
|
|
|
sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_MAT;
|
|
|
|
|
}
|
|
|
|
|
else sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_MAT;
|
Another huge commit!!!
First, check on the new files, which are listed below.
The new butspace.h is a local include, only to be used for the buttons
drawn in the buttonswindow.
- editbuts, animbuts, gamebuts, displaybuts, paintbuts, work now
- i quite completely reorganized it, it's now nicely telling you what
context it is in
- sorting error in panel align fixed (tabs were flipping)
- align works correctly automatic when you click around in Blender
- editsca.c renamed to buttons_logic.h
- button names are truncated from the right for allmost all buttons
(except text buttons and number buttons)
- while dragging panels, you cannot move them outside window anymore
And of course fixed loads of little bugs I encountered while testing
it all. This is a version I really need good test & feedback for.
Next step: restoring material/lamp/texture/world
2003-10-10 17:29:01 +00:00
|
|
|
}
|
|
|
|
|
else if(fkey==F6KEY) {
|
|
|
|
|
sbuts->mainb= CONTEXT_SHADING;
|
|
|
|
|
sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_TEX;
|
|
|
|
|
}
|
|
|
|
|
else if(fkey==F7KEY) sbuts->mainb= CONTEXT_OBJECT;
|
|
|
|
|
else if(fkey==F8KEY) {
|
|
|
|
|
sbuts->mainb= CONTEXT_SHADING;
|
|
|
|
|
sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_WORLD;
|
|
|
|
|
}
|
2003-10-07 12:49:39 +00:00
|
|
|
else if(fkey==F9KEY) sbuts->mainb= CONTEXT_EDITING;
|
|
|
|
|
else if(fkey==F10KEY) sbuts->mainb= CONTEXT_SCENE;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
BIF_preview_changed(sbuts);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ******************** SPACE: SEQUENCE ********************** */
|
|
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
/* extern void drawseqspace(ScrArea *sa, void *spacedata); BIF_drawseq.h */
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
void winqreadseqspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
2003-03-24 01:46:05 +00:00
|
|
|
unsigned short event= evt->event;
|
|
|
|
|
short val= evt->val;
|
2002-10-12 11:37:38 +00:00
|
|
|
SpaceSeq *sseq= curarea->spacedata.first;
|
|
|
|
|
View2D *v2d= &sseq->v2d;
|
|
|
|
|
extern Sequence *last_seq;
|
|
|
|
|
float dx, dy;
|
|
|
|
|
int doredraw= 0, cfra, first;
|
|
|
|
|
short mval[2];
|
|
|
|
|
|
|
|
|
|
if(curarea->win==0) return;
|
|
|
|
|
|
|
|
|
|
if(val) {
|
|
|
|
|
|
|
|
|
|
if( uiDoBlocks(&curarea->uiblocks, event)!=UI_NOTHING ) event= 0;
|
|
|
|
|
|
|
|
|
|
switch(event) {
|
|
|
|
|
case LEFTMOUSE:
|
2003-01-28 12:14:47 +00:00
|
|
|
if(sseq->mainb || view2dmove(event)==0) {
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
first= 1;
|
|
|
|
|
set_special_seq_update(1);
|
|
|
|
|
|
|
|
|
|
do {
|
|
|
|
|
getmouseco_areawin(mval);
|
|
|
|
|
areamouseco_to_ipoco(v2d, mval, &dx, &dy);
|
|
|
|
|
|
|
|
|
|
cfra= (int)dx;
|
|
|
|
|
if(cfra< 1) cfra= 1;
|
|
|
|
|
/* else if(cfra> EFRA) cfra= EFRA; */
|
|
|
|
|
|
|
|
|
|
if( cfra!=CFRA || first ) {
|
|
|
|
|
first= 0;
|
|
|
|
|
|
|
|
|
|
CFRA= cfra;
|
|
|
|
|
force_draw();
|
Commit message and the brunt of the code courtesy of intrr, apologies for the
size of this;
Finally, the Sequencer audio support and global audio/animation sync stuff!
(See http://intrr.org/blender/audiosequencer.html)
Stuff that has been done:
./source/blender/blenloader/intern/writefile.c
./source/blender/blenloader/intern/readfile.c
Added code to make it handle sounds used by audio strips, and to convert
Scene data from older (<2.28) versions to init Scene global audio settings
(Scene->audio) to defaults.
./source/blender/include/BSE_seqaudio.h
./source/blender/src/seqaudio.c
The main audio routines that start/stop/scrub the audio stream at
a certain frame position, provide the frame reference for the current
stream position, mix the audio, convert the audio, mixdown the audio
into a file.
./source/blender/makesdna/DNA_sound_types.h
Introduced new variables in the bSound struct to accomodate the sample
data after converted to the scene's global mixing format (stream, streamlen).
Also added a new flag SOUND_FLAGS_SEQUENCE that gets set if the Sound
belongs to a sequence strip.
./source/blender/makesdna/DNA_scene_types.h
Added AudioData struct, which holds scene-global audio settings.
./source/blender/makesdna/DNA_sequence_types.h
Added support for audio strips. Some variables to hold Panning/Attenuation
information, position information, reference to the sample, and some flags.
./source/blender/makesdna/DNA_userdef_types.h
./source/blender/src/usiblender.c
Added a "Mixing buffer size" userpref. Made the versions stuff initialize
it to a default for versions <2.28.
./source/blender/makesdna/DNA_space_types.h
./source/blender/src/filesel.c
Added a Cyan dot to .WAV files. Any other suggestions on a better color? :)
./source/blender/src/editsound.c
Changes (fixes) to the WAV file loader, re-enabled some gameengine code that
is needed for dealing with bSounds and bSamples.
./source/blender/src/editipo.c
./source/blender/src/drawseq.c
./source/blender/src/editnla.c
./source/blender/src/space.c
./source/blender/src/drawview.c
./source/blender/src/renderwin.c
./source/blender/src/headerbuttons.c
- Created two different wrappers for update_for_newframe(), one which scrubs
the audio, one which doesn't.
- Replaced some of the occurences of update_for_newframe() with
update_for_newframe_muted(), which doesn't scrub the audio.
- In drawview.c: Changed the synchronization scheme to get the current audio
position from the audio engine, and use that as a reference for setting
CFRA. Implements a/v sync and framedrop.
- In editipo.c: Changed handling of Fac IPOs to be usable for audio strips as
volume envelopes.
- In space.c: Added the mixing buffer size Userpref, enabled audio scrubbing
(update_for_newframe()) for moving the sequence editor framebar.
./source/blender/src/editseq.c
Added support for audio strips and a default directory for WAV files which
gets saved from the last Shift-A operation.
./source/blender/src/buttons.c
Added Scene-global audio sequencer settings in Sound buttons.
./source/blender/src/sequence.c
Various stuff that deals with handling audio strips differently than
usual strips.
2003-07-13 20:16:56 +00:00
|
|
|
update_for_newframe(); /* for audio scrubbing */
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} while(get_mbut()&L_MOUSE);
|
|
|
|
|
|
|
|
|
|
set_special_seq_update(0);
|
|
|
|
|
|
|
|
|
|
update_for_newframe();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case MIDDLEMOUSE:
|
2003-01-28 11:14:38 +00:00
|
|
|
case WHEELUPMOUSE:
|
|
|
|
|
case WHEELDOWNMOUSE:
|
2002-10-12 11:37:38 +00:00
|
|
|
if(sseq->mainb) break;
|
2003-01-28 12:14:47 +00:00
|
|
|
view2dmove(event); /* in drawipo.c */
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case RIGHTMOUSE:
|
|
|
|
|
if(sseq->mainb) break;
|
|
|
|
|
mouse_select_seq();
|
|
|
|
|
break;
|
|
|
|
|
case PADPLUSKEY:
|
|
|
|
|
if(sseq->mainb) {
|
|
|
|
|
sseq->zoom++;
|
|
|
|
|
if(sseq->zoom>8) sseq->zoom= 8;
|
|
|
|
|
}
|
|
|
|
|
else {
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0)) {
|
2002-10-12 11:37:38 +00:00
|
|
|
dx= 0.1154*(v2d->cur.xmax-v2d->cur.xmin);
|
|
|
|
|
v2d->cur.xmin+= dx;
|
|
|
|
|
v2d->cur.xmax-= dx;
|
|
|
|
|
test_view2d(G.v2d, curarea->winx, curarea->winy);
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==LR_SHIFTKEY)) {
|
|
|
|
|
insert_gap(25, CFRA);
|
|
|
|
|
allqueue(REDRAWSEQ, 0);
|
|
|
|
|
}
|
|
|
|
|
else if(G.qual==LR_ALTKEY) {
|
|
|
|
|
insert_gap(250, CFRA);
|
|
|
|
|
allqueue(REDRAWSEQ, 0);
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
break;
|
|
|
|
|
case PADMINUS:
|
|
|
|
|
if(sseq->mainb) {
|
|
|
|
|
sseq->zoom--;
|
|
|
|
|
if(sseq->zoom<1) sseq->zoom= 1;
|
|
|
|
|
}
|
|
|
|
|
else {
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
no_gaps();
|
|
|
|
|
else if((G.qual==0)) {
|
2002-10-12 11:37:38 +00:00
|
|
|
dx= 0.15*(v2d->cur.xmax-v2d->cur.xmin);
|
|
|
|
|
v2d->cur.xmin-= dx;
|
|
|
|
|
v2d->cur.xmax+= dx;
|
|
|
|
|
test_view2d(G.v2d, curarea->winx, curarea->winy);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
break;
|
|
|
|
|
case HOMEKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
do_seq_buttons(B_SEQHOME);
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case PADPERIOD:
|
|
|
|
|
if(last_seq) {
|
|
|
|
|
CFRA= last_seq->startdisp;
|
|
|
|
|
v2d->cur.xmin= last_seq->startdisp- (last_seq->len/20);
|
|
|
|
|
v2d->cur.xmax= last_seq->enddisp+ (last_seq->len/20);
|
|
|
|
|
update_for_newframe();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case AKEY:
|
|
|
|
|
if(sseq->mainb) break;
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY)) {
|
2003-10-20 20:12:01 +00:00
|
|
|
add_sequence(-1);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else if((G.qual==0))
|
|
|
|
|
swap_select_seq();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case BKEY:
|
|
|
|
|
if(sseq->mainb) break;
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
borderselect_seq();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case CKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0)) {
|
|
|
|
|
if(last_seq && (last_seq->flag & (SEQ_LEFTSEL+SEQ_RIGHTSEL))) {
|
|
|
|
|
if(last_seq->flag & SEQ_LEFTSEL) CFRA= last_seq->startdisp;
|
|
|
|
|
else CFRA= last_seq->enddisp-1;
|
|
|
|
|
|
|
|
|
|
dx= CFRA-(v2d->cur.xmax+v2d->cur.xmin)/2;
|
|
|
|
|
v2d->cur.xmax+= dx;
|
|
|
|
|
v2d->cur.xmin+= dx;
|
|
|
|
|
update_for_newframe();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
change_sequence();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case DKEY:
|
|
|
|
|
if(sseq->mainb) break;
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY)) add_duplicate_seq();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case EKEY:
|
|
|
|
|
break;
|
|
|
|
|
case FKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
set_filter_seq();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case GKEY:
|
|
|
|
|
if(sseq->mainb) break;
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
transform_seq('g');
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case MKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_ALTKEY)
|
|
|
|
|
un_meta();
|
|
|
|
|
else if((G.qual==0)){
|
2003-07-13 21:43:15 +00:00
|
|
|
if ((last_seq) && (last_seq->type == SEQ_SOUND))
|
|
|
|
|
{
|
|
|
|
|
last_seq->flag ^= SEQ_MUTE;
|
|
|
|
|
doredraw = 1;
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
else
|
|
|
|
|
make_meta();
|
2003-07-13 21:43:15 +00:00
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case SKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
seq_snapmenu();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case TKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
touch_seq_files();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case XKEY:
|
|
|
|
|
case DELKEY:
|
2003-10-28 03:08:50 +00:00
|
|
|
if(G.qual==0) {
|
|
|
|
|
if(sseq->mainb) break;
|
|
|
|
|
if((G.qual==0))
|
|
|
|
|
del_seq();
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(doredraw) scrarea_queue_winredraw(curarea);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void init_seqspace(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
SpaceSeq *sseq;
|
|
|
|
|
|
|
|
|
|
sseq= MEM_callocN(sizeof(SpaceSeq), "initseqspace");
|
|
|
|
|
BLI_addhead(&sa->spacedata, sseq);
|
|
|
|
|
|
|
|
|
|
sseq->spacetype= SPACE_SEQ;
|
|
|
|
|
sseq->zoom= 1;
|
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
/* seq space goes from (0,8) to (250, 0) */
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
sseq->v2d.tot.xmin= 0.0;
|
|
|
|
|
sseq->v2d.tot.ymin= 0.0;
|
|
|
|
|
sseq->v2d.tot.xmax= 250.0;
|
|
|
|
|
sseq->v2d.tot.ymax= 8.0;
|
|
|
|
|
|
|
|
|
|
sseq->v2d.cur= sseq->v2d.tot;
|
|
|
|
|
|
|
|
|
|
sseq->v2d.min[0]= 10.0;
|
|
|
|
|
sseq->v2d.min[1]= 4.0;
|
|
|
|
|
|
|
|
|
|
sseq->v2d.max[0]= 32000.0;
|
|
|
|
|
sseq->v2d.max[1]= MAXSEQ;
|
|
|
|
|
|
2003-10-28 03:08:50 +00:00
|
|
|
sseq->v2d.minzoom= 0.1f;
|
2002-10-12 11:37:38 +00:00
|
|
|
sseq->v2d.maxzoom= 10.0;
|
|
|
|
|
|
|
|
|
|
sseq->v2d.scroll= L_SCROLL+B_SCROLL;
|
|
|
|
|
sseq->v2d.keepaspect= 0;
|
|
|
|
|
sseq->v2d.keepzoom= 0;
|
|
|
|
|
sseq->v2d.keeptot= 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ******************** SPACE: ACTION ********************** */
|
2003-03-24 01:46:05 +00:00
|
|
|
extern void drawactionspace(ScrArea *sa, void *spacedata);
|
|
|
|
|
extern void winqreadactionspace(struct ScrArea *sa, void *spacedata, struct BWinEvent *evt);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-06-21 21:34:40 +00:00
|
|
|
static void changeactionspace(ScrArea *sa, void *spacedata)
|
|
|
|
|
{
|
|
|
|
|
if(G.v2d==0) return;
|
|
|
|
|
|
2003-07-22 12:49:32 +00:00
|
|
|
/* this sets the sub-areas correct, for scrollbars */
|
|
|
|
|
test_view2d(G.v2d, curarea->winx, curarea->winy);
|
2003-06-21 21:34:40 +00:00
|
|
|
|
2003-07-22 12:49:32 +00:00
|
|
|
/* action space uses weird matrices... local calculated in a function */
|
2003-06-21 21:34:40 +00:00
|
|
|
// myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
void init_actionspace(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
SpaceAction *saction;
|
|
|
|
|
|
|
|
|
|
saction= MEM_callocN(sizeof(SpaceAction), "initactionspace");
|
|
|
|
|
BLI_addhead(&sa->spacedata, saction);
|
|
|
|
|
|
|
|
|
|
saction->spacetype= SPACE_ACTION;
|
|
|
|
|
|
|
|
|
|
saction->v2d.tot.xmin= 1.0;
|
|
|
|
|
saction->v2d.tot.ymin= 0.0;
|
|
|
|
|
saction->v2d.tot.xmax= 1000.0;
|
|
|
|
|
saction->v2d.tot.ymax= 1000.0;
|
|
|
|
|
|
|
|
|
|
saction->v2d.cur.xmin= -5.0;
|
|
|
|
|
saction->v2d.cur.ymin= 0.0;
|
|
|
|
|
saction->v2d.cur.xmax= 65.0;
|
|
|
|
|
saction->v2d.cur.ymax= 1000.0;
|
|
|
|
|
|
|
|
|
|
saction->v2d.min[0]= 0.0;
|
|
|
|
|
saction->v2d.min[1]= 0.0;
|
|
|
|
|
|
2003-07-22 14:28:56 +00:00
|
|
|
saction->v2d.max[0]= 32000.0;
|
2002-10-12 11:37:38 +00:00
|
|
|
saction->v2d.max[1]= 1000.0;
|
|
|
|
|
|
2003-11-08 19:04:50 +00:00
|
|
|
saction->v2d.minzoom= 0.01;
|
|
|
|
|
saction->v2d.maxzoom= 50;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
saction->v2d.scroll= R_SCROLL+B_SCROLL;
|
|
|
|
|
saction->v2d.keepaspect= 0;
|
|
|
|
|
saction->v2d.keepzoom= V2D_LOCKZOOM_Y;
|
|
|
|
|
saction->v2d.keeptot= 0;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void free_actionspace(SpaceAction *saction)
|
|
|
|
|
{
|
|
|
|
|
/* don't free saction itself */
|
|
|
|
|
|
|
|
|
|
/* __PINFAKE */
|
|
|
|
|
/* if (saction->flag & SACTION_PIN)
|
|
|
|
|
if (saction->action)
|
|
|
|
|
saction->action->id.us --;
|
|
|
|
|
|
|
|
|
|
*/ /* end PINFAKE */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ******************** SPACE: FILE ********************** */
|
|
|
|
|
|
|
|
|
|
void init_filespace(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
SpaceFile *sfile;
|
|
|
|
|
|
|
|
|
|
sfile= MEM_callocN(sizeof(SpaceFile), "initfilespace");
|
|
|
|
|
BLI_addhead(&sa->spacedata, sfile);
|
|
|
|
|
|
|
|
|
|
sfile->dir[0]= '/';
|
|
|
|
|
sfile->type= FILE_UNIX;
|
|
|
|
|
|
|
|
|
|
sfile->spacetype= SPACE_FILE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void init_textspace(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
SpaceText *st;
|
|
|
|
|
|
|
|
|
|
st= MEM_callocN(sizeof(SpaceText), "inittextspace");
|
|
|
|
|
BLI_addhead(&sa->spacedata, st);
|
|
|
|
|
|
|
|
|
|
st->spacetype= SPACE_TEXT;
|
|
|
|
|
|
|
|
|
|
st->text= NULL;
|
|
|
|
|
st->flags= 0;
|
|
|
|
|
|
|
|
|
|
st->font_id= 5;
|
|
|
|
|
st->lheight= 12;
|
2003-01-23 16:39:17 +00:00
|
|
|
st->showlinenrs= 0;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
st->top= 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void init_imaselspace(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
SpaceImaSel *simasel;
|
|
|
|
|
|
|
|
|
|
simasel= MEM_callocN(sizeof(SpaceImaSel), "initimaselspace");
|
|
|
|
|
BLI_addhead(&sa->spacedata, simasel);
|
|
|
|
|
|
|
|
|
|
simasel->spacetype= SPACE_IMASEL;
|
|
|
|
|
|
|
|
|
|
simasel->mode = 7;
|
|
|
|
|
strcpy (simasel->dir, U.textudir); /* TON */
|
|
|
|
|
strcpy (simasel->file, "");
|
|
|
|
|
strcpy(simasel->fole, simasel->file);
|
|
|
|
|
strcpy(simasel->dor, simasel->dir);
|
|
|
|
|
|
|
|
|
|
simasel->first_sel_ima = 0;
|
|
|
|
|
simasel->hilite_ima = 0;
|
|
|
|
|
simasel->firstdir = 0;
|
|
|
|
|
simasel->firstfile = 0;
|
|
|
|
|
simasel->cmap = 0;
|
|
|
|
|
simasel->returnfunc = 0;
|
|
|
|
|
|
|
|
|
|
simasel->title[0] = 0;
|
|
|
|
|
|
|
|
|
|
clear_ima_dir(simasel);
|
|
|
|
|
|
|
|
|
|
// simasel->cmap= IMB_loadiffmem((int*)datatoc_cmap_tga, IB_rect|IB_cmap);
|
|
|
|
|
simasel->cmap= IMB_ibImageFromMemory((int *)datatoc_cmap_tga, datatoc_cmap_tga_size, IB_rect|IB_cmap);
|
|
|
|
|
if (!simasel->cmap) {
|
|
|
|
|
error("in console");
|
|
|
|
|
printf("Image select cmap file not found \n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ******************** SPACE: SOUND ********************** */
|
|
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
extern void drawsoundspace(ScrArea *sa, void *spacedata);
|
|
|
|
|
extern void winqreadsoundspace(struct ScrArea *sa, void *spacedata, struct BWinEvent *evt);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
void init_soundspace(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
SpaceSound *ssound;
|
|
|
|
|
|
|
|
|
|
ssound= MEM_callocN(sizeof(SpaceSound), "initsoundspace");
|
|
|
|
|
BLI_addhead(&sa->spacedata, ssound);
|
|
|
|
|
|
|
|
|
|
ssound->spacetype= SPACE_SOUND;
|
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
/* sound space goes from (0,8) to (250, 0) */
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
ssound->v2d.tot.xmin= -4.0;
|
|
|
|
|
ssound->v2d.tot.ymin= -4.0;
|
|
|
|
|
ssound->v2d.tot.xmax= 250.0;
|
|
|
|
|
ssound->v2d.tot.ymax= 255.0;
|
|
|
|
|
|
|
|
|
|
ssound->v2d.cur.xmin= -4.0;
|
|
|
|
|
ssound->v2d.cur.ymin= -4.0;
|
|
|
|
|
ssound->v2d.cur.xmax= 50.0;
|
|
|
|
|
ssound->v2d.cur.ymax= 255.0;
|
|
|
|
|
|
|
|
|
|
ssound->v2d.min[0]= 1.0;
|
|
|
|
|
ssound->v2d.min[1]= 259.0;
|
|
|
|
|
|
|
|
|
|
ssound->v2d.max[0]= 32000.0;
|
|
|
|
|
ssound->v2d.max[1]= 259;
|
|
|
|
|
|
2003-10-28 03:08:50 +00:00
|
|
|
ssound->v2d.minzoom= 0.1f;
|
2002-10-12 11:37:38 +00:00
|
|
|
ssound->v2d.maxzoom= 10.0;
|
|
|
|
|
|
|
|
|
|
ssound->v2d.scroll= B_SCROLL;
|
|
|
|
|
ssound->v2d.keepaspect= 0;
|
|
|
|
|
ssound->v2d.keepzoom= 0;
|
|
|
|
|
ssound->v2d.keeptot= 0;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void free_soundspace(SpaceSound *ssound)
|
|
|
|
|
{
|
|
|
|
|
/* don't free ssound itself */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ******************** SPACE: IMAGE ********************** */
|
|
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
/* extern void drawimagespace(ScrArea *sa, void *spacedata); BIF_drawimage.h */
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
void winqreadimagespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
2003-03-24 01:46:05 +00:00
|
|
|
unsigned short event= evt->event;
|
|
|
|
|
short val= evt->val;
|
2002-10-12 11:37:38 +00:00
|
|
|
SpaceImage *sima= curarea->spacedata.first;
|
|
|
|
|
View2D *v2d= &sima->v2d;
|
|
|
|
|
#ifdef NAN_TPT
|
|
|
|
|
IMG_BrushPtr brush;
|
|
|
|
|
IMG_CanvasPtr canvas;
|
|
|
|
|
int rowBytes;
|
|
|
|
|
short xy_prev[2], xy_curr[2];
|
|
|
|
|
float uv_prev[2], uv_curr[2];
|
|
|
|
|
extern VPaint Gvp;
|
|
|
|
|
#endif /* NAN_TPT */
|
|
|
|
|
if(val==0) return;
|
|
|
|
|
|
|
|
|
|
if( uiDoBlocks(&curarea->uiblocks, event)!=UI_NOTHING ) event= 0;
|
|
|
|
|
|
|
|
|
|
if (sima->flag & SI_DRAWTOOL) {
|
|
|
|
|
#ifdef NAN_TPT
|
|
|
|
|
/* Draw tool is active */
|
|
|
|
|
switch(event) {
|
|
|
|
|
case LEFTMOUSE:
|
|
|
|
|
/* Paranoia checks */
|
|
|
|
|
if (!sima) break;
|
|
|
|
|
if (!sima->image) break;
|
|
|
|
|
if (!sima->image->ibuf) break;
|
|
|
|
|
if (sima->image->packedfile) {
|
|
|
|
|
error("Painting in packed images not supported");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
brush = IMG_BrushCreate(Gvp.size, Gvp.size, Gvp.r, Gvp.g, Gvp.b, Gvp.a);
|
2003-04-30 13:22:26 +00:00
|
|
|
/* skipx is not set most of the times. Make a guess. */
|
2002-10-12 11:37:38 +00:00
|
|
|
rowBytes = sima->image->ibuf->skipx ? sima->image->ibuf->skipx : sima->image->ibuf->x * 4;
|
|
|
|
|
canvas = IMG_CanvasCreateFromPtr(sima->image->ibuf->rect, sima->image->ibuf->x, sima->image->ibuf->y, rowBytes);
|
|
|
|
|
|
|
|
|
|
getmouseco_areawin(xy_prev);
|
|
|
|
|
while (get_mbut() & L_MOUSE) {
|
|
|
|
|
getmouseco_areawin(xy_curr);
|
|
|
|
|
/* Check if mouse position changed */
|
|
|
|
|
if ((xy_prev[0] != xy_curr[0]) || (xy_prev[1] != xy_curr[1])) {
|
|
|
|
|
/* Convert mouse coordinates to u,v and draw */
|
|
|
|
|
areamouseco_to_ipoco(v2d, xy_prev, &uv_prev[0], &uv_prev[1]);
|
|
|
|
|
areamouseco_to_ipoco(v2d, xy_curr, &uv_curr[0], &uv_curr[1]);
|
|
|
|
|
IMG_CanvasDrawLineUV(canvas, brush, uv_prev[0], uv_prev[1], uv_curr[0], uv_curr[1]);
|
|
|
|
|
if (G.sima->lock) {
|
|
|
|
|
/* Make OpenGL aware of a changed texture */
|
|
|
|
|
free_realtime_image(sima->image);
|
|
|
|
|
/* Redraw this view and the 3D view */
|
|
|
|
|
force_draw_plus(SPACE_VIEW3D);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
/* Redraw only this view */
|
|
|
|
|
force_draw();
|
|
|
|
|
}
|
|
|
|
|
xy_prev[0] = xy_curr[0];
|
|
|
|
|
xy_prev[1] = xy_curr[1];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* Set the dirty bit in the image so that it is clear that it has been modified. */
|
|
|
|
|
sima->image->ibuf->userflags |= IB_BITMAPDIRTY;
|
|
|
|
|
if (!G.sima->lock) {
|
|
|
|
|
/* Make OpenGL aware of a changed texture */
|
|
|
|
|
free_realtime_image(sima->image);
|
|
|
|
|
/* Redraw this view and the 3D view */
|
|
|
|
|
force_draw_plus(SPACE_VIEW3D);
|
|
|
|
|
}
|
|
|
|
|
IMG_BrushDispose(brush);
|
|
|
|
|
IMG_CanvasDispose(canvas);
|
|
|
|
|
allqueue(REDRAWHEADERS, 0);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
#endif /* NAN_TPT */
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
/* Draw tool is inactive */
|
|
|
|
|
switch(event) {
|
|
|
|
|
case LEFTMOUSE:
|
|
|
|
|
if(G.qual & LR_SHIFTKEY) mouseco_to_curtile();
|
|
|
|
|
else gesture();
|
|
|
|
|
break;
|
|
|
|
|
case MIDDLEMOUSE:
|
|
|
|
|
image_viewmove();
|
|
|
|
|
break;
|
|
|
|
|
case RIGHTMOUSE:
|
|
|
|
|
mouse_select_sima();
|
|
|
|
|
break;
|
|
|
|
|
case AKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
select_swap_tface_uv();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case BKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
borderselect_sima();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case GKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
transform_tface_uv('g');
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case NKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_CTRLKEY)
|
|
|
|
|
replace_names_but();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case RKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
transform_tface_uv('r');
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case SKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
transform_tface_uv('s');
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Events handled always (whether the draw tool is active or not) */
|
|
|
|
|
switch (event) {
|
|
|
|
|
case MIDDLEMOUSE:
|
|
|
|
|
image_viewmove();
|
|
|
|
|
break;
|
2003-01-31 17:22:20 +00:00
|
|
|
case WHEELUPMOUSE:
|
|
|
|
|
case WHEELDOWNMOUSE:
|
2002-10-12 11:37:38 +00:00
|
|
|
case PADPLUSKEY:
|
2003-01-31 17:22:20 +00:00
|
|
|
case PADMINUS:
|
|
|
|
|
image_viewzoom(event);
|
2002-10-12 11:37:38 +00:00
|
|
|
scrarea_queue_winredraw(curarea);
|
|
|
|
|
break;
|
|
|
|
|
case HOMEKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
image_home();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void init_imagespace(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
SpaceImage *sima;
|
|
|
|
|
|
|
|
|
|
sima= MEM_callocN(sizeof(SpaceImage), "initimaspace");
|
|
|
|
|
BLI_addhead(&sa->spacedata, sima);
|
|
|
|
|
|
|
|
|
|
sima->spacetype= SPACE_IMAGE;
|
|
|
|
|
sima->zoom= 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ******************** SPACE: IMASEL ********************** */
|
|
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
extern void drawimaselspace(ScrArea *sa, void *spacedata);
|
|
|
|
|
extern void winqreadimaselspace(struct ScrArea *sa, void *spacedata, struct BWinEvent *evt);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
/* everything to imasel.c */
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ******************** SPACE: OOPS ********************** */
|
|
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
extern void drawoopsspace(ScrArea *sa, void *spacedata);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
void winqreadoopsspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
2002-10-12 11:37:38 +00:00
|
|
|
{
|
2003-03-24 01:46:05 +00:00
|
|
|
unsigned short event= evt->event;
|
|
|
|
|
short val= evt->val;
|
2002-10-12 11:37:38 +00:00
|
|
|
SpaceOops *soops= curarea->spacedata.first;
|
|
|
|
|
View2D *v2d= &soops->v2d;
|
|
|
|
|
float dx, dy;
|
|
|
|
|
|
|
|
|
|
if(val==0) return;
|
|
|
|
|
|
|
|
|
|
if( uiDoBlocks(&curarea->uiblocks, event)!=UI_NOTHING ) event= 0;
|
|
|
|
|
|
|
|
|
|
switch(event) {
|
|
|
|
|
case LEFTMOUSE:
|
|
|
|
|
gesture();
|
|
|
|
|
break;
|
|
|
|
|
case MIDDLEMOUSE:
|
2003-01-28 11:14:38 +00:00
|
|
|
case WHEELUPMOUSE:
|
|
|
|
|
case WHEELDOWNMOUSE:
|
2003-01-28 12:14:47 +00:00
|
|
|
view2dmove(event); /* in drawipo.c */
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case RIGHTMOUSE:
|
|
|
|
|
mouse_select_oops();
|
|
|
|
|
break;
|
|
|
|
|
case PADPLUSKEY:
|
|
|
|
|
|
|
|
|
|
dx= 0.1154*(v2d->cur.xmax-v2d->cur.xmin);
|
|
|
|
|
dy= 0.1154*(v2d->cur.ymax-v2d->cur.ymin);
|
|
|
|
|
v2d->cur.xmin+= dx;
|
|
|
|
|
v2d->cur.xmax-= dx;
|
|
|
|
|
v2d->cur.ymin+= dy;
|
|
|
|
|
v2d->cur.ymax-= dy;
|
|
|
|
|
test_view2d(G.v2d, curarea->winx, curarea->winy);
|
|
|
|
|
scrarea_queue_winredraw(curarea);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PADMINUS:
|
|
|
|
|
|
|
|
|
|
dx= 0.15*(v2d->cur.xmax-v2d->cur.xmin);
|
|
|
|
|
dy= 0.15*(v2d->cur.ymax-v2d->cur.ymin);
|
|
|
|
|
v2d->cur.xmin-= dx;
|
|
|
|
|
v2d->cur.xmax+= dx;
|
|
|
|
|
v2d->cur.ymin-= dy;
|
|
|
|
|
v2d->cur.ymax+= dy;
|
|
|
|
|
test_view2d(G.v2d, curarea->winx, curarea->winy);
|
|
|
|
|
scrarea_queue_winredraw(curarea);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case HOMEKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
do_oops_buttons(B_OOPSHOME);
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case AKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0)) {
|
|
|
|
|
swap_select_all_oops();
|
|
|
|
|
scrarea_queue_winredraw(curarea);
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case BKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
borderselect_oops();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case GKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==0))
|
|
|
|
|
transform_oops('g');
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case LKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
select_backlinked_oops();
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
select_linked_oops();
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
case SKEY:
|
|
|
|
|
|
2003-10-27 23:55:38 +00:00
|
|
|
if(G.qual==LR_ALTKEY)
|
|
|
|
|
shrink_oops();
|
|
|
|
|
else if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
shuffle_oops();
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
transform_oops('s');
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ONEKEY:
|
|
|
|
|
do_layer_buttons(0); break;
|
|
|
|
|
case TWOKEY:
|
|
|
|
|
do_layer_buttons(1); break;
|
|
|
|
|
case THREEKEY:
|
|
|
|
|
do_layer_buttons(2); break;
|
|
|
|
|
case FOURKEY:
|
|
|
|
|
do_layer_buttons(3); break;
|
|
|
|
|
case FIVEKEY:
|
|
|
|
|
do_layer_buttons(4); break;
|
|
|
|
|
case SIXKEY:
|
|
|
|
|
do_layer_buttons(5); break;
|
|
|
|
|
case SEVENKEY:
|
|
|
|
|
do_layer_buttons(6); break;
|
|
|
|
|
case EIGHTKEY:
|
|
|
|
|
do_layer_buttons(7); break;
|
|
|
|
|
case NINEKEY:
|
|
|
|
|
do_layer_buttons(8); break;
|
|
|
|
|
case ZEROKEY:
|
|
|
|
|
do_layer_buttons(9); break;
|
|
|
|
|
case MINUSKEY:
|
|
|
|
|
do_layer_buttons(10); break;
|
|
|
|
|
case EQUALKEY:
|
|
|
|
|
do_layer_buttons(11); break;
|
|
|
|
|
case ACCENTGRAVEKEY:
|
|
|
|
|
do_layer_buttons(-1); break;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void init_v2d_oops(View2D *v2d)
|
|
|
|
|
{
|
|
|
|
|
v2d->tot.xmin= -28.0;
|
|
|
|
|
v2d->tot.xmax= 28.0;
|
|
|
|
|
v2d->tot.ymin= -28.0;
|
|
|
|
|
v2d->tot.ymax= 28.0;
|
|
|
|
|
|
|
|
|
|
v2d->cur= v2d->tot;
|
|
|
|
|
|
|
|
|
|
v2d->min[0]= 10.0;
|
|
|
|
|
v2d->min[1]= 4.0;
|
|
|
|
|
|
|
|
|
|
v2d->max[0]= 320.0;
|
|
|
|
|
v2d->max[1]= 320.0;
|
|
|
|
|
|
2003-10-28 03:08:50 +00:00
|
|
|
v2d->minzoom= 0.01f;
|
2002-10-12 11:37:38 +00:00
|
|
|
v2d->maxzoom= 2.0;
|
|
|
|
|
|
|
|
|
|
/* v2d->scroll= L_SCROLL+B_SCROLL; */
|
|
|
|
|
v2d->scroll= 0;
|
|
|
|
|
v2d->keepaspect= 1;
|
|
|
|
|
v2d->keepzoom= 0;
|
|
|
|
|
v2d->keeptot= 0;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void init_oopsspace(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
SpaceOops *soops;
|
|
|
|
|
|
|
|
|
|
soops= MEM_callocN(sizeof(SpaceOops), "initoopsspace");
|
|
|
|
|
BLI_addhead(&sa->spacedata, soops);
|
|
|
|
|
|
|
|
|
|
soops->visiflag= OOPS_OB+OOPS_MA+OOPS_ME+OOPS_TE+OOPS_CU+OOPS_IP;
|
|
|
|
|
|
|
|
|
|
soops->spacetype= SPACE_OOPS;
|
|
|
|
|
init_v2d_oops(&soops->v2d);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ******************** SPACE: PAINT ********************** */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ******************** SPACE: Text ********************** */
|
|
|
|
|
|
2003-03-24 01:46:05 +00:00
|
|
|
extern void drawtextspace(ScrArea *sa, void *spacedata);
|
|
|
|
|
extern void winqreadtextspace(struct ScrArea *sa, void *spacedata, struct BWinEvent *evt);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
/* ******************** SPACE: ALGEMEEN ********************** */
|
|
|
|
|
|
|
|
|
|
void newspace(ScrArea *sa, int type)
|
|
|
|
|
{
|
|
|
|
|
if(type>=0) {
|
|
|
|
|
if(sa->spacetype != type) {
|
|
|
|
|
SpaceLink *sl;
|
|
|
|
|
|
|
|
|
|
sa->spacetype= type;
|
|
|
|
|
sa->headbutofs= 0;
|
|
|
|
|
|
|
|
|
|
uiFreeBlocks(&sa->uiblocks);
|
|
|
|
|
wich_cursor(sa);
|
|
|
|
|
|
|
|
|
|
if (sa->headwin) addqueue(sa->headwin, CHANGED, 1);
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
|
|
|
|
|
addqueue(sa->win, CHANGED, 1);
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
|
|
|
|
|
areawinset(sa->win);
|
|
|
|
|
|
|
|
|
|
bwin_clear_viewmat(sa->win);
|
|
|
|
|
|
|
|
|
|
for (sl= sa->spacedata.first; sl; sl= sl->next)
|
|
|
|
|
if(sl->spacetype==type)
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
if (sl) {
|
|
|
|
|
BLI_remlink(&sa->spacedata, sl);
|
|
|
|
|
BLI_addhead(&sa->spacedata, sl);
|
|
|
|
|
} else {
|
|
|
|
|
if(type==SPACE_VIEW3D)
|
|
|
|
|
initview3d(sa);
|
|
|
|
|
else if(type==SPACE_IPO)
|
|
|
|
|
initipo(sa);
|
|
|
|
|
else if(type==SPACE_INFO)
|
|
|
|
|
init_infospace(sa);
|
|
|
|
|
else if(type==SPACE_BUTS)
|
|
|
|
|
init_butspace(sa);
|
|
|
|
|
else if(type==SPACE_FILE)
|
|
|
|
|
init_filespace(sa);
|
|
|
|
|
else if(type==SPACE_SEQ)
|
|
|
|
|
init_seqspace(sa);
|
|
|
|
|
else if(type==SPACE_IMAGE)
|
|
|
|
|
init_imagespace(sa);
|
|
|
|
|
else if(type==SPACE_IMASEL)
|
|
|
|
|
init_imaselspace(sa);
|
|
|
|
|
else if(type==SPACE_OOPS)
|
|
|
|
|
init_oopsspace(sa);
|
|
|
|
|
else if(type==SPACE_ACTION)
|
|
|
|
|
init_actionspace(sa);
|
|
|
|
|
else if(type==SPACE_TEXT)
|
|
|
|
|
init_textspace(sa);
|
|
|
|
|
else if(type==SPACE_SOUND)
|
|
|
|
|
init_soundspace(sa);
|
|
|
|
|
else if(type==SPACE_NLA)
|
|
|
|
|
init_nlaspace(sa);
|
|
|
|
|
|
|
|
|
|
sl= sa->spacedata.first;
|
|
|
|
|
sl->area= sa;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
/* exception: filespace */
|
2002-10-12 11:37:38 +00:00
|
|
|
if(curarea->spacetype==SPACE_FILE) {
|
|
|
|
|
SpaceFile *sfile= curarea->spacedata.first;
|
|
|
|
|
|
|
|
|
|
if(sfile->type==FILE_MAIN) {
|
|
|
|
|
freefilelist(sfile);
|
|
|
|
|
} else {
|
|
|
|
|
sfile->type= FILE_UNIX;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sfile->returnfunc= 0;
|
|
|
|
|
sfile->title[0]= 0;
|
|
|
|
|
if(sfile->filelist) test_flags_file(sfile);
|
|
|
|
|
}
|
2003-04-30 13:22:26 +00:00
|
|
|
/* exception: imasel space */
|
2002-10-12 11:37:38 +00:00
|
|
|
else if(curarea->spacetype==SPACE_IMASEL) {
|
|
|
|
|
SpaceImaSel *simasel= curarea->spacedata.first;
|
|
|
|
|
simasel->returnfunc= 0;
|
|
|
|
|
simasel->title[0]= 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void freespacelist(ListBase *lb)
|
|
|
|
|
{
|
|
|
|
|
SpaceLink *sl;
|
|
|
|
|
|
|
|
|
|
for (sl= lb->first; sl; sl= sl->next) {
|
|
|
|
|
if(sl->spacetype==SPACE_FILE) {
|
|
|
|
|
SpaceFile *sfile= (SpaceFile*) sl;
|
|
|
|
|
if(sfile->libfiledata)
|
|
|
|
|
BLO_blendhandle_close(sfile->libfiledata);
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_BUTS) {
|
|
|
|
|
SpaceButs *buts= (SpaceButs*) sl;
|
|
|
|
|
if(buts->rect) MEM_freeN(buts->rect);
|
|
|
|
|
if(G.buts==buts) G.buts= 0;
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_IPO) {
|
|
|
|
|
SpaceIpo *si= (SpaceIpo*) sl;
|
|
|
|
|
if(si->editipo) MEM_freeN(si->editipo);
|
|
|
|
|
free_ipokey(&si->ipokey);
|
|
|
|
|
if(G.sipo==si) G.sipo= 0;
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_VIEW3D) {
|
|
|
|
|
View3D *vd= (View3D*) sl;
|
|
|
|
|
if(vd->bgpic) {
|
|
|
|
|
if(vd->bgpic->rect) MEM_freeN(vd->bgpic->rect);
|
|
|
|
|
if(vd->bgpic->ima) vd->bgpic->ima->id.us--;
|
|
|
|
|
MEM_freeN(vd->bgpic);
|
|
|
|
|
}
|
|
|
|
|
if(vd->localvd) MEM_freeN(vd->localvd);
|
|
|
|
|
if(G.vd==vd) G.vd= 0;
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_OOPS) {
|
|
|
|
|
free_oopspace((SpaceOops *)sl);
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_IMASEL) {
|
|
|
|
|
free_imasel((SpaceImaSel *)sl);
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_ACTION) {
|
|
|
|
|
free_actionspace((SpaceAction*)sl);
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_NLA){
|
|
|
|
|
/* free_nlaspace((SpaceNla*)sl); */
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_TEXT) {
|
|
|
|
|
free_textspace((SpaceText *)sl);
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_SOUND) {
|
|
|
|
|
free_soundspace((SpaceSound *)sl);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BLI_freelistN(lb);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void duplicatespacelist(ScrArea *newarea, ListBase *lb1, ListBase *lb2)
|
|
|
|
|
{
|
|
|
|
|
SpaceLink *sl;
|
|
|
|
|
|
|
|
|
|
duplicatelist(lb1, lb2);
|
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
/* lb1 is kopie from lb2, from lb2 we free the file list */
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
sl= lb2->first;
|
|
|
|
|
while(sl) {
|
|
|
|
|
if(sl->spacetype==SPACE_FILE) {
|
|
|
|
|
SpaceFile *sfile= (SpaceFile*) sl;
|
|
|
|
|
sfile->libfiledata= 0;
|
|
|
|
|
sfile->filelist= 0;
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_OOPS) {
|
|
|
|
|
SpaceOops *so= (SpaceOops *)sl;
|
|
|
|
|
so->oops.first= so->oops.last= 0;
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_IMASEL) {
|
|
|
|
|
check_imasel_copy((SpaceImaSel *) sl);
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_TEXT) {
|
|
|
|
|
}
|
|
|
|
|
/* __PINFAKE */
|
|
|
|
|
/* else if(sfile->spacetype==SPACE_ACTION) {
|
|
|
|
|
SpaceAction *sa= (SpaceAction *)sfile;
|
|
|
|
|
if (sa->flag & SACTION_PIN)
|
|
|
|
|
if (sa->action)
|
|
|
|
|
sa->action->id.us++;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
*/ /* end PINFAKE */
|
|
|
|
|
|
|
|
|
|
sl= sl->next;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sl= lb1->first;
|
|
|
|
|
while(sl) {
|
|
|
|
|
sl->area= newarea;
|
|
|
|
|
|
|
|
|
|
if(sl->spacetype==SPACE_BUTS) {
|
|
|
|
|
SpaceButs *buts= (SpaceButs *)sl;
|
|
|
|
|
buts->rect= 0;
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_IPO) {
|
|
|
|
|
SpaceIpo *si= (SpaceIpo *)sl;
|
|
|
|
|
si->editipo= 0;
|
|
|
|
|
si->ipokey.first= si->ipokey.last= 0;
|
|
|
|
|
}
|
|
|
|
|
else if(sl->spacetype==SPACE_VIEW3D) {
|
|
|
|
|
View3D *vd= (View3D *)sl;
|
|
|
|
|
if(vd->bgpic) {
|
|
|
|
|
vd->bgpic= MEM_dupallocN(vd->bgpic);
|
|
|
|
|
vd->bgpic->rect= 0;
|
|
|
|
|
if(vd->bgpic->ima) vd->bgpic->ima->id.us++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sl= sl->next;
|
|
|
|
|
}
|
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
/* again: from old View3D restore localview (because full) */
|
2002-10-12 11:37:38 +00:00
|
|
|
sl= lb2->first;
|
|
|
|
|
while(sl) {
|
|
|
|
|
if(sl->spacetype==SPACE_VIEW3D) {
|
|
|
|
|
View3D *v3d= (View3D*) sl;
|
|
|
|
|
if(v3d->localvd) {
|
|
|
|
|
restore_localviewdata(v3d);
|
|
|
|
|
v3d->localvd= 0;
|
|
|
|
|
v3d->localview= 0;
|
|
|
|
|
v3d->lay &= 0xFFFFFF;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sl= sl->next;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2003-04-30 13:22:26 +00:00
|
|
|
/* is called everywhere in blender */
|
2002-10-12 11:37:38 +00:00
|
|
|
void allqueue(unsigned short event, short val)
|
|
|
|
|
{
|
|
|
|
|
ScrArea *sa;
|
|
|
|
|
View3D *v3d;
|
|
|
|
|
SpaceButs *buts;
|
|
|
|
|
SpaceFile *sfile;
|
|
|
|
|
|
|
|
|
|
sa= G.curscreen->areabase.first;
|
|
|
|
|
while(sa) {
|
|
|
|
|
if(event==REDRAWALL) {
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
else if(sa->win != val) {
|
|
|
|
|
switch(event) {
|
|
|
|
|
|
|
|
|
|
case REDRAWHEADERS:
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWVIEW3D:
|
|
|
|
|
if(sa->spacetype==SPACE_VIEW3D) {
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
if(val) scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWVIEW3D_Z:
|
|
|
|
|
if(sa->spacetype==SPACE_VIEW3D) {
|
|
|
|
|
v3d= sa->spacedata.first;
|
|
|
|
|
if(v3d->drawtype==OB_SOLID) {
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
if(val) scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWVIEWCAM:
|
|
|
|
|
if(sa->spacetype==SPACE_VIEW3D) {
|
|
|
|
|
v3d= sa->spacedata.first;
|
|
|
|
|
if(v3d->persp>1) scrarea_queue_winredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWINFO:
|
|
|
|
|
if(sa->spacetype==SPACE_INFO) {
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWIMAGE:
|
|
|
|
|
if(sa->spacetype==SPACE_IMAGE) {
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWIPO:
|
|
|
|
|
if(sa->spacetype==SPACE_IPO) {
|
|
|
|
|
SpaceIpo *si;
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
if(val) {
|
|
|
|
|
si= sa->spacedata.first;
|
|
|
|
|
if (!G.sipo->pin)
|
|
|
|
|
si->blocktype= val;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(sa->spacetype==SPACE_OOPS) {
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case REDRAWBUTSALL:
|
|
|
|
|
if(sa->spacetype==SPACE_BUTS) {
|
Another huge commit!!!
First, check on the new files, which are listed below.
The new butspace.h is a local include, only to be used for the buttons
drawn in the buttonswindow.
- editbuts, animbuts, gamebuts, displaybuts, paintbuts, work now
- i quite completely reorganized it, it's now nicely telling you what
context it is in
- sorting error in panel align fixed (tabs were flipping)
- align works correctly automatic when you click around in Blender
- editsca.c renamed to buttons_logic.h
- button names are truncated from the right for allmost all buttons
(except text buttons and number buttons)
- while dragging panels, you cannot move them outside window anymore
And of course fixed loads of little bugs I encountered while testing
it all. This is a version I really need good test & feedback for.
Next step: restoring material/lamp/texture/world
2003-10-10 17:29:01 +00:00
|
|
|
buts= sa->spacedata.first;
|
|
|
|
|
buts->re_align= 1;
|
2002-10-12 11:37:38 +00:00
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWBUTSHEAD:
|
|
|
|
|
if(sa->spacetype==SPACE_BUTS) {
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
break;
|
2003-10-07 18:24:02 +00:00
|
|
|
case REDRAWBUTSSCENE:
|
2002-10-12 11:37:38 +00:00
|
|
|
if(sa->spacetype==SPACE_BUTS) {
|
|
|
|
|
buts= sa->spacedata.first;
|
2003-10-07 18:24:02 +00:00
|
|
|
if(buts->mainb==CONTEXT_SCENE) {
|
Another huge commit!!!
First, check on the new files, which are listed below.
The new butspace.h is a local include, only to be used for the buttons
drawn in the buttonswindow.
- editbuts, animbuts, gamebuts, displaybuts, paintbuts, work now
- i quite completely reorganized it, it's now nicely telling you what
context it is in
- sorting error in panel align fixed (tabs were flipping)
- align works correctly automatic when you click around in Blender
- editsca.c renamed to buttons_logic.h
- button names are truncated from the right for allmost all buttons
(except text buttons and number buttons)
- while dragging panels, you cannot move them outside window anymore
And of course fixed loads of little bugs I encountered while testing
it all. This is a version I really need good test & feedback for.
Next step: restoring material/lamp/texture/world
2003-10-10 17:29:01 +00:00
|
|
|
buts->re_align= 1;
|
2002-10-12 11:37:38 +00:00
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
2003-10-07 18:24:02 +00:00
|
|
|
case REDRAWBUTSOBJECT:
|
2002-10-12 11:37:38 +00:00
|
|
|
if(sa->spacetype==SPACE_BUTS) {
|
|
|
|
|
buts= sa->spacedata.first;
|
2003-10-07 18:24:02 +00:00
|
|
|
if(buts->mainb==CONTEXT_OBJECT) {
|
Another huge commit!!!
First, check on the new files, which are listed below.
The new butspace.h is a local include, only to be used for the buttons
drawn in the buttonswindow.
- editbuts, animbuts, gamebuts, displaybuts, paintbuts, work now
- i quite completely reorganized it, it's now nicely telling you what
context it is in
- sorting error in panel align fixed (tabs were flipping)
- align works correctly automatic when you click around in Blender
- editsca.c renamed to buttons_logic.h
- button names are truncated from the right for allmost all buttons
(except text buttons and number buttons)
- while dragging panels, you cannot move them outside window anymore
And of course fixed loads of little bugs I encountered while testing
it all. This is a version I really need good test & feedback for.
Next step: restoring material/lamp/texture/world
2003-10-10 17:29:01 +00:00
|
|
|
buts->re_align= 1;
|
2002-10-12 11:37:38 +00:00
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
2003-10-07 18:24:02 +00:00
|
|
|
case REDRAWBUTSSHADING:
|
2002-10-12 11:37:38 +00:00
|
|
|
if(sa->spacetype==SPACE_BUTS) {
|
|
|
|
|
buts= sa->spacedata.first;
|
2003-10-07 18:24:02 +00:00
|
|
|
if(buts->mainb==CONTEXT_SHADING) {
|
Another huge commit!!!
First, check on the new files, which are listed below.
The new butspace.h is a local include, only to be used for the buttons
drawn in the buttonswindow.
- editbuts, animbuts, gamebuts, displaybuts, paintbuts, work now
- i quite completely reorganized it, it's now nicely telling you what
context it is in
- sorting error in panel align fixed (tabs were flipping)
- align works correctly automatic when you click around in Blender
- editsca.c renamed to buttons_logic.h
- button names are truncated from the right for allmost all buttons
(except text buttons and number buttons)
- while dragging panels, you cannot move them outside window anymore
And of course fixed loads of little bugs I encountered while testing
it all. This is a version I really need good test & feedback for.
Next step: restoring material/lamp/texture/world
2003-10-10 17:29:01 +00:00
|
|
|
buts->re_align= 1;
|
2002-10-12 11:37:38 +00:00
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWBUTSEDIT:
|
|
|
|
|
if(sa->spacetype==SPACE_BUTS) {
|
|
|
|
|
buts= sa->spacedata.first;
|
2003-10-07 18:24:02 +00:00
|
|
|
if(buts->mainb==CONTEXT_EDITING) {
|
Another huge commit!!!
First, check on the new files, which are listed below.
The new butspace.h is a local include, only to be used for the buttons
drawn in the buttonswindow.
- editbuts, animbuts, gamebuts, displaybuts, paintbuts, work now
- i quite completely reorganized it, it's now nicely telling you what
context it is in
- sorting error in panel align fixed (tabs were flipping)
- align works correctly automatic when you click around in Blender
- editsca.c renamed to buttons_logic.h
- button names are truncated from the right for allmost all buttons
(except text buttons and number buttons)
- while dragging panels, you cannot move them outside window anymore
And of course fixed loads of little bugs I encountered while testing
it all. This is a version I really need good test & feedback for.
Next step: restoring material/lamp/texture/world
2003-10-10 17:29:01 +00:00
|
|
|
buts->re_align= 1;
|
2002-10-12 11:37:38 +00:00
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWBUTSSCRIPT:
|
|
|
|
|
if(sa->spacetype==SPACE_BUTS) {
|
|
|
|
|
buts= sa->spacedata.first;
|
2003-10-07 18:24:02 +00:00
|
|
|
if(buts->mainb==CONTEXT_SCRIPT) {
|
Another huge commit!!!
First, check on the new files, which are listed below.
The new butspace.h is a local include, only to be used for the buttons
drawn in the buttonswindow.
- editbuts, animbuts, gamebuts, displaybuts, paintbuts, work now
- i quite completely reorganized it, it's now nicely telling you what
context it is in
- sorting error in panel align fixed (tabs were flipping)
- align works correctly automatic when you click around in Blender
- editsca.c renamed to buttons_logic.h
- button names are truncated from the right for allmost all buttons
(except text buttons and number buttons)
- while dragging panels, you cannot move them outside window anymore
And of course fixed loads of little bugs I encountered while testing
it all. This is a version I really need good test & feedback for.
Next step: restoring material/lamp/texture/world
2003-10-10 17:29:01 +00:00
|
|
|
buts->re_align= 1;
|
2002-10-12 11:37:38 +00:00
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
2003-10-07 18:24:02 +00:00
|
|
|
case REDRAWBUTSLOGIC:
|
2002-10-12 11:37:38 +00:00
|
|
|
if(sa->spacetype==SPACE_BUTS) {
|
|
|
|
|
buts= sa->spacedata.first;
|
2003-10-07 18:24:02 +00:00
|
|
|
if(buts->mainb==CONTEXT_LOGIC) {
|
2002-10-12 11:37:38 +00:00
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
2003-10-07 18:24:02 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
case REDRAWDATASELECT:
|
|
|
|
|
if(sa->spacetype==SPACE_FILE) {
|
|
|
|
|
sfile= sa->spacedata.first;
|
|
|
|
|
if(sfile->type==FILE_MAIN) {
|
|
|
|
|
freefilelist(sfile);
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(sa->spacetype==SPACE_OOPS) {
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWSEQ:
|
|
|
|
|
if(sa->spacetype==SPACE_SEQ) {
|
|
|
|
|
addqueue(sa->win, CHANGED, 1);
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWOOPS:
|
|
|
|
|
if(sa->spacetype==SPACE_OOPS) {
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWNLA:
|
|
|
|
|
if(sa->spacetype==SPACE_NLA) {
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
case REDRAWACTION:
|
|
|
|
|
if(sa->spacetype==SPACE_ACTION) {
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWTEXT:
|
|
|
|
|
if(sa->spacetype==SPACE_TEXT) {
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REDRAWSOUND:
|
|
|
|
|
if(sa->spacetype==SPACE_SOUND) {
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sa= sa->next;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void allspace(unsigned short event, short val)
|
|
|
|
|
{
|
|
|
|
|
bScreen *sc;
|
|
|
|
|
|
|
|
|
|
sc= G.main->screen.first;
|
|
|
|
|
while(sc) {
|
|
|
|
|
ScrArea *sa= sc->areabase.first;
|
|
|
|
|
while(sa) {
|
|
|
|
|
SpaceLink *sl= sa->spacedata.first;
|
|
|
|
|
while(sl) {
|
|
|
|
|
switch(event) {
|
|
|
|
|
case REMAKEALLIPO:
|
|
|
|
|
{
|
|
|
|
|
Ipo *ipo;
|
|
|
|
|
IpoCurve *icu;
|
|
|
|
|
|
|
|
|
|
/* Go to each ipo */
|
|
|
|
|
for (ipo=G.main->ipo.first; ipo; ipo=ipo->id.next){
|
|
|
|
|
for (icu = ipo->curve.first; icu; icu=icu->next){
|
|
|
|
|
sort_time_ipocurve(icu);
|
|
|
|
|
testhandles_ipocurve(icu);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case REMAKEIPO:
|
|
|
|
|
if(sl->spacetype==SPACE_IPO) {
|
|
|
|
|
SpaceIpo *si= (SpaceIpo *)sl;
|
|
|
|
|
{
|
|
|
|
|
if(si->editipo) MEM_freeN(si->editipo);
|
|
|
|
|
si->editipo= 0;
|
|
|
|
|
free_ipokey(&si->ipokey);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case OOPS_TEST:
|
|
|
|
|
if(sl->spacetype==SPACE_OOPS) {
|
|
|
|
|
SpaceOops *so= (SpaceOops *)sl;
|
|
|
|
|
so->flag |= SO_TESTBLOCKS;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sl= sl->next;
|
|
|
|
|
}
|
|
|
|
|
sa= sa->next;
|
|
|
|
|
}
|
|
|
|
|
sc= sc->id.next;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void force_draw()
|
|
|
|
|
{
|
2003-04-30 13:22:26 +00:00
|
|
|
/* draws alle areas that something identical to curarea */
|
2002-10-12 11:37:38 +00:00
|
|
|
ScrArea *tempsa, *sa;
|
|
|
|
|
|
|
|
|
|
scrarea_do_windraw(curarea);
|
|
|
|
|
|
|
|
|
|
tempsa= curarea;
|
|
|
|
|
sa= G.curscreen->areabase.first;
|
|
|
|
|
while(sa) {
|
|
|
|
|
if(sa!=tempsa && sa->spacetype==tempsa->spacetype) {
|
|
|
|
|
if(sa->spacetype==SPACE_VIEW3D) {
|
|
|
|
|
if( ((View3D *)sa->spacedata.first)->lay & ((View3D *)tempsa->spacedata.first)->lay) {
|
|
|
|
|
areawinset(sa->win);
|
|
|
|
|
scrarea_do_windraw(sa);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if(sa->spacetype==SPACE_IPO) {
|
|
|
|
|
areawinset(sa->win);
|
|
|
|
|
scrarea_do_windraw(sa);
|
|
|
|
|
}
|
|
|
|
|
else if(sa->spacetype==SPACE_SEQ) {
|
|
|
|
|
areawinset(sa->win);
|
|
|
|
|
scrarea_do_windraw(sa);
|
|
|
|
|
}
|
|
|
|
|
else if(sa->spacetype==SPACE_ACTION) {
|
|
|
|
|
areawinset(sa->win);
|
|
|
|
|
scrarea_do_windraw(sa);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sa= sa->next;
|
|
|
|
|
}
|
|
|
|
|
if(curarea!=tempsa) areawinset(tempsa->win);
|
|
|
|
|
|
|
|
|
|
screen_swapbuffers();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void force_draw_plus(int type)
|
|
|
|
|
{
|
2003-04-30 13:22:26 +00:00
|
|
|
/* draws all areas that show something like curarea AND areas of 'type' */
|
2002-10-12 11:37:38 +00:00
|
|
|
ScrArea *tempsa, *sa;
|
|
|
|
|
|
|
|
|
|
scrarea_do_windraw(curarea);
|
|
|
|
|
|
|
|
|
|
tempsa= curarea;
|
|
|
|
|
sa= G.curscreen->areabase.first;
|
|
|
|
|
while(sa) {
|
|
|
|
|
if(sa!=tempsa && (sa->spacetype==tempsa->spacetype || sa->spacetype==type)) {
|
|
|
|
|
if(ELEM5(sa->spacetype, SPACE_VIEW3D, SPACE_IPO, SPACE_SEQ, SPACE_BUTS, SPACE_ACTION)) {
|
|
|
|
|
areawinset(sa->win);
|
|
|
|
|
scrarea_do_windraw(sa);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sa= sa->next;
|
|
|
|
|
}
|
|
|
|
|
if(curarea!=tempsa) areawinset(tempsa->win);
|
|
|
|
|
|
|
|
|
|
screen_swapbuffers();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void force_draw_all(void)
|
|
|
|
|
{
|
2003-04-30 13:22:26 +00:00
|
|
|
/* redraws all */
|
2002-10-12 11:37:38 +00:00
|
|
|
ScrArea *tempsa, *sa;
|
|
|
|
|
|
|
|
|
|
drawscreen();
|
|
|
|
|
|
|
|
|
|
tempsa= curarea;
|
|
|
|
|
sa= G.curscreen->areabase.first;
|
|
|
|
|
while(sa) {
|
|
|
|
|
if(sa->headwin) {
|
|
|
|
|
scrarea_do_headdraw(sa);
|
|
|
|
|
scrarea_do_headchange(sa);
|
|
|
|
|
}
|
|
|
|
|
if(sa->win) {
|
|
|
|
|
scrarea_do_windraw(sa);
|
|
|
|
|
}
|
|
|
|
|
sa= sa->next;
|
|
|
|
|
}
|
|
|
|
|
if(curarea!=tempsa) areawinset(tempsa->win);
|
|
|
|
|
|
|
|
|
|
screen_swapbuffers();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/***/
|
|
|
|
|
|
|
|
|
|
SpaceType *spaceaction_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st= NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st= spacetype_new("Action");
|
2003-06-21 21:34:40 +00:00
|
|
|
spacetype_set_winfuncs(st, drawactionspace, changeactionspace, winqreadactionspace);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|
|
|
|
|
SpaceType *spacebuts_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st= NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st= spacetype_new("Buts");
|
|
|
|
|
spacetype_set_winfuncs(st, drawbutspace, changebutspace, winqreadbutspace);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|
|
|
|
|
SpaceType *spacefile_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st= NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st= spacetype_new("File");
|
|
|
|
|
spacetype_set_winfuncs(st, drawfilespace, NULL, winqreadfilespace);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|
|
|
|
|
SpaceType *spaceimage_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st= NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st= spacetype_new("Image");
|
|
|
|
|
spacetype_set_winfuncs(st, drawimagespace, NULL, winqreadimagespace);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|
|
|
|
|
SpaceType *spaceimasel_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st= NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st= spacetype_new("Imasel");
|
2003-03-24 00:06:40 +00:00
|
|
|
spacetype_set_winfuncs(st, drawimaselspace, NULL, winqreadimaselspace);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|
|
|
|
|
SpaceType *spaceinfo_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st= NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st= spacetype_new("Info");
|
|
|
|
|
spacetype_set_winfuncs(st, drawinfospace, NULL, winqreadinfospace);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|
|
|
|
|
SpaceType *spaceipo_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st= NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st= spacetype_new("Ipo");
|
2003-03-24 01:46:05 +00:00
|
|
|
spacetype_set_winfuncs(st, drawipospace, changeview2dspace, winqreadipospace);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|
|
|
|
|
SpaceType *spacenla_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st= NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st= spacetype_new("Nla");
|
2003-03-24 01:46:05 +00:00
|
|
|
spacetype_set_winfuncs(st, drawnlaspace, changeview2dspace, winqreadnlaspace);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|
|
|
|
|
SpaceType *spaceoops_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st= NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st= spacetype_new("Oops");
|
2003-03-24 01:46:05 +00:00
|
|
|
spacetype_set_winfuncs(st, drawoopsspace, changeview2dspace, winqreadoopsspace);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|
|
|
|
|
SpaceType *spaceseq_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st= NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st= spacetype_new("Sequence");
|
2003-03-24 01:46:05 +00:00
|
|
|
spacetype_set_winfuncs(st, drawseqspace, changeview2dspace, winqreadseqspace);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|
|
|
|
|
SpaceType *spacesound_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st= NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st= spacetype_new("Sound");
|
|
|
|
|
spacetype_set_winfuncs(st, drawsoundspace, NULL, winqreadsoundspace);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|
|
|
|
|
SpaceType *spacetext_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st= NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st= spacetype_new("Text");
|
|
|
|
|
spacetype_set_winfuncs(st, drawtextspace, NULL, winqreadtextspace);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|
|
|
|
|
SpaceType *spaceview3d_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st= NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st= spacetype_new("View3D");
|
2003-03-24 01:46:05 +00:00
|
|
|
spacetype_set_winfuncs(st, drawview3dspace, changeview3dspace, winqreadview3dspace);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|