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_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"
|
2004-04-19 22:05:37 +00:00
|
|
|
#include "BIF_drawscript.h"
|
2002-10-12 11:37:38 +00:00
|
|
|
#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"
|
Added LSCM UV Unwrapping:
http://www.loria.fr/~levy/Galleries/LSCM/index.html
http://www.loria.fr/~levy/Papers/2002/s2002_lscm.pdf
Implementation Least Squares Conformal Maps parameterization, based on
chapter 2 of:
Bruno Levy, Sylvain Petitjean, Nicolas Ray, Jerome Maillot. Least Squares
Conformal Maps for Automatic Texture Atlas Generation. In Siggraph 2002,
July 2002.
Seams: Stored as a flag (ME_SEAM) in the new MEdge struct, these seams define
where a mesh will be cut when executing LSCM unwrapping. Seams can be marked
and cleared in Edit Mode. Ctrl+EKEY will pop up a menu allowing to Clear or Mark
the selected edges as seams.
Select Linked in Face Select Mode now only selects linked faces if no seams
separate them. So if seams are defined, this will now select the 'face group'
defined by the seams. Hotkey is still LKEY.
LSCM Unwrap: unwrap UV's by calculating a conformal mapping (preserving local
angles). Based on seams, the selected faces will be 'cut'. If multiple
'face groups' are selected, they will be unwrapped separately and packed in
the image rectangle in the UV Editor. Packing uses a simple and fast
algorithm, only designed to avoid having overlapping faces.
LSCM can be found in the Unwrap menu (UKEY), and the UV Calculation panel.
Pinning: UV's can be pinned in the UV Editor. When LSCM Unwrap is then
executed, these UV's will stay in place, allowing to tweak the solution.
PKEY and ALT+PKEY will respectively pin and unpin selected UV's.
Face Select Mode Drawing Changes:
- Draw Seams option to enable disable drawing of seams
- Draw Faces option to enable drawing of selected faces in transparent purple
- Draw Hidden Edges option to enable drawing of edges of hidden faces
- Draw Edges option to enable drawing of edges of visible faces
The colors for these seams, faces and edges are themeable.
2004-07-13 11:48:52 +00:00
|
|
|
#include "BDR_unwrapper.h"
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
#include "BLO_readfile.h" /* for BLO_blendhandle_close */
|
|
|
|
|
|
2003-11-23 14:28:46 +00:00
|
|
|
#include "BPY_extern.h"
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
#include "mydevice.h"
|
|
|
|
|
#include "blendef.h"
|
|
|
|
|
#include "datatoc.h"
|
|
|
|
|
|
|
|
|
|
#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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2004-06-19 12:25:28 +00:00
|
|
|
void toggle_blockhandler(ScrArea *sa, short eventcode, short val)
|
|
|
|
|
{
|
|
|
|
|
SpaceLink *sl= sa->spacedata.first;
|
|
|
|
|
short a, addnew=1;
|
|
|
|
|
|
|
|
|
|
// find if it exists
|
|
|
|
|
for(a=0; a<SPACE_MAXHANDLER; a+=2) {
|
|
|
|
|
if( sl->blockhandler[a]==eventcode ) {
|
|
|
|
|
sl->blockhandler[a]= 0;
|
|
|
|
|
addnew= 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(addnew) add_blockhandler(sa, eventcode, val);
|
|
|
|
|
}
|
2003-10-15 12:26:26 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
Commit for the 4 aforementioned "features":
- "Global Pivot": Maintains a global Pivot and Align mode setting for
all 3d views when enabled, instead of seperate settings per 3d view
- "Auto Perspective": Switch to ortho mode automatically on 1/3/7, and
to Perspective when the view is rotated with the mouse
- "Align mode": As suggested on the list, when enabled, transformations
on several objects only transform their locations, not their sizes or
rotations.
- Grid dotted when not 1:1
***ATTENTION***! The User Interface parts of these features have not been
committed, as I work on my own modified UI here. The three features need
toggle buttons to turn them on and off.
I used the following 3 buttons (first two features are in userprefs,
third as a 3d view setting):
uiDefButBitS(block, TOG, USER_AUTOPERSP, B_DRAWINFO, "Auto Persp",
(xpos+edgespace+(3*medprefbut)+(3*midspace)+smallprefbut+2),y3+10,smallprefbut,buth,
&(U.uiflag), 0, 0, 0, 0,
"Automatically switch between orthographic and perspective");
uiDefButBitS(block, TOG, USER_LOCKAROUND, B_DRAWINFO, "Global Pivot",
(xpos+edgespace+(4*midspace)+(4*medprefbut)),y3+10,smallprefbut,buth,
&(U.uiflag), 0, 0, 0, 0,
"Use global pivot setting for all 3d views");
uiDefIconButS(block, TOG|BIT|10, B_AROUND, ICON_ALIGN,
xco+=XIC,0,XIC,YIC,
&G.vd->flag, 0, 0, 0, 0, "Translate only (align)");
Someone needs to add these to the interface in an appropriate manner!
Thanks.
2004-07-15 13:31:18 +00:00
|
|
|
void handle_view3d_around()
|
|
|
|
|
{
|
|
|
|
|
bScreen *sc;
|
|
|
|
|
|
|
|
|
|
if ((U.uiflag & USER_LOCKAROUND)==0) return;
|
|
|
|
|
|
|
|
|
|
/* copies from G.vd->around to other view3ds */
|
|
|
|
|
|
|
|
|
|
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_VIEW3D) {
|
|
|
|
|
View3D *vd= (View3D*) sl;
|
|
|
|
|
if (vd != G.vd) {
|
|
|
|
|
vd->around= G.vd->around;
|
|
|
|
|
if (G.vd->flag & V3D_ALIGN)
|
|
|
|
|
vd->flag |= V3D_ALIGN;
|
|
|
|
|
else
|
|
|
|
|
vd->flag &= ~V3D_ALIGN;
|
|
|
|
|
scrarea_queue_headredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sl= sl->next;
|
|
|
|
|
}
|
|
|
|
|
sa= sa->next;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
sc= sc->id.next;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
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 */
|
2004-01-13 14:50:45 +00:00
|
|
|
a= (U.gameflags & USER_VERTEX_ARRAYS);
|
2002-10-12 11:37:38 +00:00
|
|
|
SYS_WriteCommandLineInt(syshandle, "vertexarrays", a);
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
a= (U.gameflags & USER_DISABLE_SOUND);
|
2002-10-12 11:37:38 +00:00
|
|
|
SYS_WriteCommandLineInt(syshandle, "noaudio", a);
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
a= (U.gameflags & USER_DISABLE_MIPMAP);
|
2002-10-12 11:37:38 +00:00
|
|
|
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
|
2004-03-28 22:33:21 +00:00
|
|
|
#ifndef NO_KETSJI
|
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();
|
|
|
|
|
|
|
|
|
|
|
2004-04-21 13:38:54 +00:00
|
|
|
/* sound init is save, only handles once */
|
|
|
|
|
sound_init_audio();
|
2002-10-12 11:37:38 +00:00
|
|
|
sound_stop_all_sounds();
|
2004-04-21 13:38:54 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
/* Before jumping into Ketsji, we configure some settings. */
|
|
|
|
|
space_set_commmandline_options();
|
|
|
|
|
|
|
|
|
|
SaveState();
|
|
|
|
|
StartKetsjiShell(curarea, startscene->id.name+2, G.main, 1);
|
|
|
|
|
RestoreState();
|
|
|
|
|
|
2004-05-21 09:27:42 +00:00
|
|
|
/* Restart BPY - unload the game engine modules. */
|
|
|
|
|
BPY_end_python();
|
2002-10-12 11:37:38 +00:00
|
|
|
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);
|
2004-03-21 19:59:51 +00:00
|
|
|
#endif
|
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)
|
|
|
|
|
{
|
2004-01-12 13:30:00 +00:00
|
|
|
int nr= pupmenu("Align View%t|To Selected (top)%x2|To Selected (front)%x1|To Selected (side)%x0");
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
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;
|
2004-04-28 17:35:35 +00:00
|
|
|
|
2003-07-18 15:50:33 +00:00
|
|
|
basact->object->flag= basact->flag;
|
2004-04-28 17:35:35 +00:00
|
|
|
|
2003-07-18 15:50:33 +00:00
|
|
|
set_active_base(basact);
|
|
|
|
|
}
|
|
|
|
|
|
2004-01-12 13:30:00 +00:00
|
|
|
|
|
|
|
|
void select_group_menu(void)
|
2003-07-18 15:50:33 +00:00
|
|
|
{
|
2003-08-14 15:18:45 +00:00
|
|
|
char *str;
|
2004-01-12 13:30:00 +00:00
|
|
|
short nr;
|
2003-07-18 15:50:33 +00:00
|
|
|
|
|
|
|
|
/* make menu string */
|
|
|
|
|
|
|
|
|
|
str= MEM_mallocN(160, "groupmenu");
|
2004-01-12 13:30:00 +00:00
|
|
|
strcpy(str, "Select Grouped%t|Children%x1|"
|
|
|
|
|
"Immediate Children%x2|Parent%x3|"
|
|
|
|
|
"Objects on Shared Layers%x4");
|
2003-07-18 15:50:33 +00:00
|
|
|
|
|
|
|
|
/* here we go */
|
|
|
|
|
|
|
|
|
|
nr= pupmenu(str);
|
|
|
|
|
MEM_freeN(str);
|
2004-01-12 13:30:00 +00:00
|
|
|
|
|
|
|
|
select_group(nr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void select_group(short nr)
|
|
|
|
|
{
|
|
|
|
|
Base *base;
|
2003-07-18 15:50:33 +00:00
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2004-07-23 21:07:32 +00:00
|
|
|
static unsigned short convert_for_nonumpad(unsigned short event)
|
|
|
|
|
{
|
|
|
|
|
if (event>=ZEROKEY && event<=NINEKEY) {
|
|
|
|
|
return event - ZEROKEY + PAD0;
|
|
|
|
|
} else if (event==MINUSKEY) {
|
|
|
|
|
return PADMINUS;
|
|
|
|
|
} else if (event==EQUALKEY) {
|
|
|
|
|
return PADPLUSKEY;
|
|
|
|
|
} else if (event==BACKSLASHKEY) {
|
|
|
|
|
return PADSLASHKEY;
|
|
|
|
|
} else {
|
|
|
|
|
return event;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
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?
|
|
|
|
|
|
2004-07-16 01:34:19 +00:00
|
|
|
/* swap mouse buttons based on user preference */
|
|
|
|
|
if (U.flag & USER_LMOUSESELECT) {
|
|
|
|
|
if (evt->event == LEFTMOUSE) {
|
|
|
|
|
event = RIGHTMOUSE;
|
|
|
|
|
} else if (evt->event == RIGHTMOUSE) {
|
|
|
|
|
event = LEFTMOUSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
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 */
|
2004-01-13 14:50:45 +00:00
|
|
|
if(U.flag & USER_VIEWMOVE) {
|
|
|
|
|
if((G.qual==LR_SHIFTKEY) || ((U.flag & USER_TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_SHIFTKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(0);
|
2004-01-13 14:50:45 +00:00
|
|
|
else if((G.qual==LR_CTRLKEY) || ((U.flag & USER_TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_CTRLKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(2);
|
2004-01-13 14:50:45 +00:00
|
|
|
else if((G.qual==0) || ((U.flag & USER_TWOBUTTONMOUSE) && (G.qual==LR_ALTKEY)))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(1);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2004-01-13 14:50:45 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY) || ((U.flag & USER_TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_SHIFTKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(1);
|
2004-01-13 14:50:45 +00:00
|
|
|
else if((G.qual==LR_CTRLKEY) || ((U.flag & USER_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);
|
|
|
|
|
}
|
2004-01-13 14:50:45 +00:00
|
|
|
} else if(U.uiflag & USER_WHEELZOOMDIR)
|
2003-06-10 21:07:56 +00:00
|
|
|
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);
|
|
|
|
|
}
|
2004-01-13 14:50:45 +00:00
|
|
|
} else if(U.uiflag & USER_WHEELZOOMDIR)
|
2003-06-10 21:07:56 +00:00
|
|
|
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 {
|
2004-07-23 21:07:32 +00:00
|
|
|
|
|
|
|
|
if (U.flag & USER_NONUMPAD) {
|
|
|
|
|
event= convert_for_nonumpad(event);
|
|
|
|
|
}
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
switch(event) {
|
|
|
|
|
|
|
|
|
|
case BACKBUFDRAW:
|
|
|
|
|
backdrawview3d(1);
|
|
|
|
|
break;
|
2004-07-16 01:34:19 +00:00
|
|
|
|
|
|
|
|
/* LEFTMOUSE and RIGHTMOUSE event codes can be swapped above,
|
|
|
|
|
* based on user preference USER_LMOUSESELECT
|
|
|
|
|
*/
|
|
|
|
|
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();
|
2004-07-16 01:34:19 +00:00
|
|
|
} else if (G.f & G_VERTEXPAINT) {
|
2002-10-12 11:37:38 +00:00
|
|
|
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 */
|
2004-01-13 14:50:45 +00:00
|
|
|
if(U.flag & USER_VIEWMOVE) {
|
|
|
|
|
if((G.qual==LR_SHIFTKEY) || ((U.flag & USER_TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_SHIFTKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(0);
|
2004-01-13 14:50:45 +00:00
|
|
|
else if((G.qual==LR_CTRLKEY) || ((U.flag & USER_TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_CTRLKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(2);
|
2004-01-13 14:50:45 +00:00
|
|
|
else if((G.qual==0) || ((U.flag & USER_TWOBUTTONMOUSE) && (G.qual==LR_ALTKEY)))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(1);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2004-01-13 14:50:45 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY) || ((U.flag & USER_TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_SHIFTKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(1);
|
2004-01-13 14:50:45 +00:00
|
|
|
else if((G.qual==LR_CTRLKEY) || ((U.flag & USER_TWOBUTTONMOUSE) && (G.qual==(LR_ALTKEY|LR_CTRLKEY))))
|
2003-10-27 23:55:38 +00:00
|
|
|
viewmove(2);
|
2004-01-13 14:50:45 +00:00
|
|
|
else if((G.qual==0) || ((U.flag & USER_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();
|
|
|
|
|
}
|
2004-01-17 12:54:11 +00:00
|
|
|
else if((G.obedit) && (G.qual == (LR_CTRLKEY|LR_ALTKEY)))
|
|
|
|
|
mouse_mesh(); // edge select
|
|
|
|
|
else if((G.obedit) && (G.qual == (LR_CTRLKEY|LR_ALTKEY|LR_SHIFTKEY)))
|
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)
|
2004-01-17 12:54:11 +00:00
|
|
|
mouse_select(); // also allow in editmode, for vertex parenting
|
2003-10-27 23:55:38 +00:00
|
|
|
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);
|
|
|
|
|
}
|
2004-01-13 14:50:45 +00:00
|
|
|
} else if(U.uiflag & USER_WHEELZOOMDIR)
|
2003-01-28 11:14:38 +00:00
|
|
|
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);
|
|
|
|
|
}
|
2004-01-13 14:50:45 +00:00
|
|
|
} else if(U.uiflag & USER_WHEELZOOMDIR)
|
2003-01-28 11:14:38 +00:00
|
|
|
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-11-28 20:45:11 +00:00
|
|
|
if(ob && ob->type == OB_MESH) {
|
2003-05-07 19:27:29 +00:00
|
|
|
flip_subdivison(ob, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-11-28 20:45:11 +00:00
|
|
|
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-11-28 20:45:11 +00:00
|
|
|
if(ob && ob->type == OB_MESH) {
|
2003-05-07 19:27:29 +00:00
|
|
|
flip_subdivison(ob, 2);
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-11-28 20:45:11 +00:00
|
|
|
else do_layer_buttons(1);
|
2003-05-07 19:27:29 +00:00
|
|
|
break;
|
2003-11-28 20:45:11 +00:00
|
|
|
|
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-11-28 20:45:11 +00:00
|
|
|
if(ob && ob->type == OB_MESH) {
|
2003-05-07 19:27:29 +00:00
|
|
|
flip_subdivison(ob, 3);
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-11-28 20:45:11 +00:00
|
|
|
else 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;
|
2003-11-28 20:45:11 +00:00
|
|
|
if(G.qual==LR_CTRLKEY) {
|
|
|
|
|
if(ob && ob->type == OB_MESH) {
|
2003-05-07 19:27:29 +00:00
|
|
|
flip_subdivison(ob, 4);
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-11-28 20:45:11 +00:00
|
|
|
else do_layer_buttons(3);
|
|
|
|
|
break;
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
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();
|
2004-03-09 22:00:51 +00:00
|
|
|
else if((G.qual==LR_ALTKEY)){
|
|
|
|
|
if(G.obedit && G.obedit->type==OB_MESH) {
|
|
|
|
|
/* Loop Select Operations */
|
|
|
|
|
/* Vertexloop */
|
|
|
|
|
/* Faceloop */
|
|
|
|
|
vertex_loop_select();
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
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) {
|
2004-01-12 13:30:00 +00:00
|
|
|
copy_attr_menu();
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
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
|
|
|
}
|
Added LSCM UV Unwrapping:
http://www.loria.fr/~levy/Galleries/LSCM/index.html
http://www.loria.fr/~levy/Papers/2002/s2002_lscm.pdf
Implementation Least Squares Conformal Maps parameterization, based on
chapter 2 of:
Bruno Levy, Sylvain Petitjean, Nicolas Ray, Jerome Maillot. Least Squares
Conformal Maps for Automatic Texture Atlas Generation. In Siggraph 2002,
July 2002.
Seams: Stored as a flag (ME_SEAM) in the new MEdge struct, these seams define
where a mesh will be cut when executing LSCM unwrapping. Seams can be marked
and cleared in Edit Mode. Ctrl+EKEY will pop up a menu allowing to Clear or Mark
the selected edges as seams.
Select Linked in Face Select Mode now only selects linked faces if no seams
separate them. So if seams are defined, this will now select the 'face group'
defined by the seams. Hotkey is still LKEY.
LSCM Unwrap: unwrap UV's by calculating a conformal mapping (preserving local
angles). Based on seams, the selected faces will be 'cut'. If multiple
'face groups' are selected, they will be unwrapped separately and packed in
the image rectangle in the UV Editor. Packing uses a simple and fast
algorithm, only designed to avoid having overlapping faces.
LSCM can be found in the Unwrap menu (UKEY), and the UV Calculation panel.
Pinning: UV's can be pinned in the UV Editor. When LSCM Unwrap is then
executed, these UV's will stay in place, allowing to tweak the solution.
PKEY and ALT+PKEY will respectively pin and unpin selected UV's.
Face Select Mode Drawing Changes:
- Draw Seams option to enable disable drawing of seams
- Draw Faces option to enable drawing of selected faces in transparent purple
- Draw Hidden Edges option to enable drawing of edges of hidden faces
- Draw Edges option to enable drawing of edges of visible faces
The colors for these seams, faces and edges are themeable.
2004-07-13 11:48:52 +00:00
|
|
|
else if (G.qual==LR_CTRLKEY) {
|
|
|
|
|
if(G.obedit && G.obedit->type==OB_MESH)
|
|
|
|
|
Edge_Menu();
|
|
|
|
|
}
|
|
|
|
|
else if (G.qual==LR_SHIFTKEY) {
|
|
|
|
|
if (G.obedit && G.obedit->type==OB_MESH) {
|
|
|
|
|
transform('e');
|
|
|
|
|
}
|
|
|
|
|
}
|
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(); */
|
2004-07-08 20:38:27 +00:00
|
|
|
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY))
|
2004-01-12 13:30:00 +00:00
|
|
|
select_group_menu();
|
2003-10-27 23:55:38 +00:00
|
|
|
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();
|
2004-01-03 05:07:31 +00:00
|
|
|
else if(G.obpose) {
|
|
|
|
|
if (G.qual==0)
|
|
|
|
|
hide_selected_pose_bones();
|
|
|
|
|
else if (G.qual==LR_SHIFTKEY)
|
|
|
|
|
hide_unselected_pose_bones();
|
|
|
|
|
else if (G.qual==LR_ALTKEY)
|
|
|
|
|
show_all_pose_bones();
|
|
|
|
|
}
|
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))
|
2004-01-12 13:30:00 +00:00
|
|
|
selectlinks_menu();
|
2003-10-27 23:55:38 +00:00
|
|
|
else if(G.qual==LR_CTRLKEY)
|
2004-01-12 13:30:00 +00:00
|
|
|
make_links_menu();
|
2003-10-27 23:55:38 +00:00
|
|
|
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-10-27 23:55:38 +00:00
|
|
|
mergemenu();
|
2003-12-11 04:00:52 +00:00
|
|
|
makeDispList(G.obedit);
|
2003-11-16 00:31:27 +00:00
|
|
|
}
|
2003-10-27 23:55:38 +00:00
|
|
|
}
|
2004-04-24 21:09:06 +00:00
|
|
|
else if((G.qual==0) || (G.qual==LR_CTRLKEY)) {
|
2003-12-31 22:44:26 +00:00
|
|
|
mirrormenu();
|
2003-11-16 00:31:27 +00:00
|
|
|
}
|
2004-01-03 06:01:16 +00:00
|
|
|
if(G.qual & (LR_SHIFTKEY | LR_ALTKEY | LR_CTRLKEY)) {
|
|
|
|
|
if(G.obedit->type==OB_MESH) select_non_manifold();
|
|
|
|
|
}
|
2003-05-10 12:22:26 +00:00
|
|
|
}
|
2004-04-24 21:09:06 +00:00
|
|
|
else if(G.qual & LR_CTRLKEY) {
|
|
|
|
|
mirrormenu();
|
|
|
|
|
}
|
|
|
|
|
else if(G.qual==0) {
|
2003-10-27 23:55:38 +00:00
|
|
|
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)) {
|
2004-06-19 12:25:28 +00:00
|
|
|
toggle_blockhandler(curarea, VIEW3D_HANDLER_OBJECT, UI_PNL_TO_MOUSE);
|
2003-10-28 16:26:51 +00:00
|
|
|
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){
|
2004-06-05 05:55:15 +00:00
|
|
|
if (okee("Recalculate bone roll angles")) {
|
2003-10-27 23:55:38 +00:00
|
|
|
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)) {
|
2004-06-05 05:55:15 +00:00
|
|
|
if(okee("Recalculate normals inside")) {
|
|
|
|
|
undo_push_mesh("Recalculate normals inside");
|
2003-10-22 00:52:26 +00:00
|
|
|
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){
|
2004-06-05 05:55:15 +00:00
|
|
|
if(okee("Recalculate normals outside")) {
|
|
|
|
|
undo_push_mesh("Recalculate normals outside");
|
2003-10-22 00:52:26 +00:00
|
|
|
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) {
|
2004-01-08 04:42:29 +00:00
|
|
|
flip_subdivison(ob, -1);
|
2003-07-21 17:44:23 +00:00
|
|
|
}
|
|
|
|
|
}
|
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-12-09 17:46:40 +00:00
|
|
|
if(G.qual==LR_CTRLKEY || G.qual==(LR_SHIFTKEY|LR_CTRLKEY))
|
2003-10-27 23:55:38 +00:00
|
|
|
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();
|
|
|
|
|
}
|
2003-12-09 17:46:40 +00:00
|
|
|
else if(G.qual==LR_CTRLKEY || G.qual==(LR_SHIFTKEY|LR_CTRLKEY))
|
2003-10-27 23:55:38 +00:00
|
|
|
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)
|
2004-01-21 21:45:38 +00:00
|
|
|
loopoperations(LOOP_SELECT);
|
2003-10-17 19:59:32 +00:00
|
|
|
}
|
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)
|
2004-01-21 21:45:38 +00:00
|
|
|
loopoperations(LOOP_CUT);
|
2003-10-17 19:59:32 +00:00
|
|
|
}
|
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:
|
2004-01-07 12:59:42 +00:00
|
|
|
if(G.qual==LR_CTRLKEY) {
|
|
|
|
|
G.vd->around= V3D_CENTROID;
|
2004-07-15 17:42:04 +00:00
|
|
|
} else if(G.qual==LR_SHIFTKEY) {
|
|
|
|
|
G.vd->around= V3D_CENTROID;
|
2004-01-07 12:59:42 +00:00
|
|
|
} else if(G.qual==0) {
|
2003-10-28 03:08:50 +00:00
|
|
|
G.vd->around= V3D_CENTRE;
|
|
|
|
|
}
|
2004-01-07 12:59:42 +00:00
|
|
|
scrarea_queue_headredraw(curarea);
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PERIODKEY:
|
2004-01-07 12:59:42 +00:00
|
|
|
if(G.qual==LR_CTRLKEY) {
|
|
|
|
|
G.vd->around= V3D_LOCAL;
|
2004-07-15 17:42:04 +00:00
|
|
|
} else if(G.qual==0) {
|
2003-10-28 03:08:50 +00:00
|
|
|
G.vd->around= V3D_CURSOR;
|
|
|
|
|
}
|
2004-01-07 12:59:42 +00:00
|
|
|
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:
|
2004-01-03 06:01:16 +00:00
|
|
|
case PADENTER:
|
2002-10-12 11:37:38 +00:00
|
|
|
persptoetsen(event);
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
break;
|
2004-01-03 06:01:16 +00:00
|
|
|
case PADMINUS:
|
|
|
|
|
if ( (G.qual==LR_CTRLKEY)
|
|
|
|
|
&& (G.obedit) && (G.obedit->type==OB_MESH) )
|
|
|
|
|
select_less();
|
|
|
|
|
else {
|
|
|
|
|
persptoetsen(event);
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PADPLUSKEY:
|
|
|
|
|
if ( (G.qual==LR_CTRLKEY)
|
|
|
|
|
&& (G.obedit) && (G.obedit->type==OB_MESH) )
|
|
|
|
|
select_more();
|
|
|
|
|
else {
|
|
|
|
|
persptoetsen(event);
|
|
|
|
|
doredraw= 1;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
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;
|
2003-11-30 22:29:54 +00:00
|
|
|
vd->blockscale= 0.7;
|
2002-10-12 11:37:38 +00:00
|
|
|
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;
|
2004-01-24 05:06:12 +00:00
|
|
|
vd->gridflag |= V3D_SHOW_X;
|
|
|
|
|
vd->gridflag |= V3D_SHOW_Y;
|
|
|
|
|
vd->gridflag |= V3D_SHOW_FLOOR;
|
|
|
|
|
vd->gridflag &= ~V3D_SHOW_Z;
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ******************** 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];
|
2004-07-16 01:34:19 +00:00
|
|
|
short mousebut = L_MOUSE;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
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
|
|
|
|
2004-07-16 01:34:19 +00:00
|
|
|
/* swap mouse buttons based on user preference */
|
|
|
|
|
if (U.flag & USER_LMOUSESELECT) {
|
|
|
|
|
if (evt->event == LEFTMOUSE) {
|
|
|
|
|
event = RIGHTMOUSE;
|
|
|
|
|
mousebut = L_MOUSE;
|
|
|
|
|
} else if (evt->event == RIGHTMOUSE) {
|
|
|
|
|
event = LEFTMOUSE;
|
|
|
|
|
mousebut = R_MOUSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
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 */
|
2004-07-07 08:49:33 +00:00
|
|
|
if(val>0 && val < 51) do_ipowin_buts(val-1);
|
2003-10-28 14:20:03 +00:00
|
|
|
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 */
|
|
|
|
|
}
|
|
|
|
|
|
2004-07-16 01:34:19 +00:00
|
|
|
} while(get_mbut() & mousebut);
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2004-07-16 01:34:19 +00:00
|
|
|
break;
|
|
|
|
|
case RIGHTMOUSE:
|
|
|
|
|
mouse_select_ipo();
|
|
|
|
|
allqueue (REDRAWACTION, 0);
|
|
|
|
|
allqueue(REDRAWNLA, 0);
|
2002-10-12 11:37:38 +00:00
|
|
|
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 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))
|
2004-01-12 13:30:00 +00:00
|
|
|
join_ipo_menu();
|
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:
|
2004-06-19 12:25:28 +00:00
|
|
|
toggle_blockhandler(sa, IPO_HANDLER_PROPERTIES, UI_PNL_TO_MOUSE);
|
2003-10-28 14:20:03 +00:00
|
|
|
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:
|
2004-01-12 13:30:00 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY)) {
|
|
|
|
|
ipo_snap_menu();
|
|
|
|
|
} else if((G.qual==0))
|
2003-10-27 23:55:38 +00:00
|
|
|
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;
|
2003-11-30 22:29:54 +00:00
|
|
|
sipo->blockscale= 0.7;
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
/* 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) {
|
2004-01-13 14:50:45 +00:00
|
|
|
set_mipmap(!(U.gameflags & USER_DISABLE_MIPMAP));
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
allqueue(REDRAWVIEW3D, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void space_sound_button_function(int event)
|
|
|
|
|
{
|
|
|
|
|
int a;
|
|
|
|
|
SYS_SystemHandle syshandle;
|
|
|
|
|
|
|
|
|
|
if ((syshandle = SYS_GetSystem()))
|
|
|
|
|
{
|
2004-01-13 14:50:45 +00:00
|
|
|
a = (U.gameflags & USER_DISABLE_SOUND);
|
2002-10-12 11:37:38 +00:00
|
|
|
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);
|
2003-11-23 13:48:12 +00:00
|
|
|
allqueue(REDRAWALL, 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
|
|
|
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 */
|
2004-01-10 13:41:03 +00:00
|
|
|
uiDefButS(block, MENU, B_CHANGE_THEME, "UI and Buttons %x1|%l|3D View %x2|%l|Ipo Curve Editor %x3|Action Editor %x4|"
|
|
|
|
|
"NLA Editor %x5|%l|UV/Image Editor %x6|Video Sequence Editor %x7|Audio Timeline %x8|Text Editor %x9|%l|User Preferences %x10|"
|
|
|
|
|
"OOPS Schematic %x11|Buttons Window %x12|%l|File Browser %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);
|
2004-01-12 16:51:33 +00:00
|
|
|
if(th_curcol==TH_BACK) th_curcol= TH_BUT_OUTLINE; // switching main choices...
|
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 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
|
|
|
|
2004-07-22 13:40:17 +00:00
|
|
|
uiDefButC(block, COL, B_UPDATE_THEME, "", 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];
|
2004-07-16 01:34:19 +00:00
|
|
|
short xpos, ypos, ypostab, buth, rspace, dx, y1, y2, y3, y4, y5, y2label, y3label, y4label, y5label;
|
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) */
|
2004-01-16 23:40:14 +00:00
|
|
|
|
2003-05-03 12:17:11 +00:00
|
|
|
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 */
|
2004-07-16 01:34:19 +00:00
|
|
|
y5 = ypos+4*(buth+rspace)+(3*rspace); /* bottom padding of 5th button row */
|
2003-05-01 12:50:49 +00:00
|
|
|
|
|
|
|
|
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 */
|
2004-07-16 01:34:19 +00:00
|
|
|
y5label = y5-2; /* again for the 5th row */
|
2003-05-01 12:50:49 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 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);
|
|
|
|
|
|
2004-06-16 13:31:32 +00:00
|
|
|
uiDefButS(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
|
|
|
|
2004-06-16 13:31:32 +00:00
|
|
|
uiDefButS(block, ROW,B_USERPREF,"Edit Methods",
|
2003-05-01 12:50:49 +00:00
|
|
|
(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
|
|
|
|
2004-06-16 13:31:32 +00:00
|
|
|
uiDefButS(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
|
|
|
|
2004-06-16 13:31:32 +00:00
|
|
|
uiDefButS(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,"");
|
|
|
|
|
|
2004-06-16 13:31:32 +00:00
|
|
|
uiDefButS(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,"");
|
|
|
|
|
|
2004-06-16 13:31:32 +00:00
|
|
|
uiDefButS(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
|
|
|
|
2004-06-16 13:31:32 +00:00
|
|
|
uiDefButS(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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_TOOLTIPS, 0, "ToolTips",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace),y2,smallprefbut,buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0,
|
|
|
|
|
"Displays tooltips (help tags) over buttons");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_DRAWVIEWINFO, B_DRAWINFO, "Object Info",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+midspace+smallprefbut),y2,smallprefbut,buth,
|
|
|
|
|
&(U.uiflag), 0, 0, 0, 0,
|
|
|
|
|
"Displays current object name and frame number in the 3D viewport");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_SCENEGLOBAL, 0, "Global Scene",
|
2003-05-01 12:50:49 +00:00
|
|
|
(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:",
|
2004-06-19 12:25:28 +00:00
|
|
|
(xpos+edgespace+medprefbut),y4label,medprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_AUTOGRABGRID, 0, "Grab",
|
2004-06-19 12:25:28 +00:00
|
|
|
(xpos+edgespace+medprefbut+midspace),y3,smallprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_AUTOSIZEGRID, 0, "Size",
|
2004-06-19 12:25:28 +00:00
|
|
|
(xpos+edgespace+medprefbut+midspace),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.flag), 0, 0, 0, 0,
|
|
|
|
|
"Scale objects to grid units");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_AUTOROTGRID, 0, "Rotate",
|
2004-06-19 12:25:28 +00:00
|
|
|
(xpos+edgespace+medprefbut+midspace),y1,smallprefbut,buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
&(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
|
|
|
|
2004-06-19 12:25:28 +00:00
|
|
|
uiDefBut(block, LABEL, 0, "Panel",
|
|
|
|
|
(xpos+edgespace+medprefbut+(2*midspace)+smallprefbut),y4label,smallprefbut,buth,
|
|
|
|
|
NULL, 0, 0, 0, 0,
|
|
|
|
|
"");
|
|
|
|
|
uiDefButBitS(block, TOG, USER_PANELPINNED, 0, "Pinned",
|
|
|
|
|
(xpos+edgespace+medprefbut+(2*midspace)+smallprefbut),y3,smallprefbut,buth,
|
|
|
|
|
&(U.uiflag), 0, 0, 0, 0,
|
|
|
|
|
"Hotkey enabled floating panels (e.g. NKEY) open at old location");
|
|
|
|
|
|
- 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:",
|
2004-06-16 13:31:32 +00:00
|
|
|
(xpos+edgespace+medprefbut+(3*midspace)+(2*smallprefbut)),y4label,medprefbut,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
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_MENUOPENAUTO, 0, "Auto Open",
|
2004-06-16 13:31:32 +00:00
|
|
|
(xpos+edgespace+medprefbut+(3*midspace)+(2*smallprefbut)),y3,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:",
|
2004-06-16 13:31:32 +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.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:",
|
2004-06-16 13:31:32 +00:00
|
|
|
(xpos+edgespace+medprefbut+(3*midspace)+(2*smallprefbut)),y1,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.menuthreshold2), 1, 40, 0, 0,
|
|
|
|
|
"Time in 1/10 seconds for auto open sublevels");
|
2003-10-29 01:10:10 +00:00
|
|
|
|
|
|
|
|
|
2004-06-16 13:31:32 +00:00
|
|
|
|
|
|
|
|
uiDefBut(block, LABEL,0,"Toolb. Thresh.:",
|
|
|
|
|
(xpos+edgespace+medprefbut+(3*midspace)+(3*smallprefbut)),y4label,medprefbut,buth,
|
2003-10-29 01:10:10 +00:00
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, NUM, 0, "LMB:",
|
2004-06-16 13:31:32 +00:00
|
|
|
(xpos+edgespace+medprefbut+(3*midspace)+(3*smallprefbut)),y2,smallprefbut,buth,
|
2003-10-29 01:10:10 +00:00
|
|
|
&(U.tb_leftmouse), 2, 40, 0, 0,
|
|
|
|
|
"Time in 1/10 seconds leftmouse hold to open toolbox");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, NUM, 0, "RMB:",
|
2004-06-16 13:31:32 +00:00
|
|
|
(xpos+edgespace+medprefbut+(3*midspace)+(3*smallprefbut)),y1,smallprefbut,buth,
|
2003-10-29 01:10:10 +00:00
|
|
|
&(U.tb_rightmouse), 2, 40, 0, 0,
|
|
|
|
|
"Time in 1/10 seconds for rightmouse to open toolbox");
|
|
|
|
|
|
2004-06-16 13:31:32 +00:00
|
|
|
|
|
|
|
|
uiDefBut(block, LABEL,0,"View zoom:",
|
|
|
|
|
(xpos+edgespace+medprefbut+(3*midspace)+(4*smallprefbut)),y4label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, ROW, 0, "Continue",
|
|
|
|
|
(xpos+edgespace+medprefbut+(3*midspace)+(4*smallprefbut)),y3,smallprefbut,buth,
|
|
|
|
|
&(U.viewzoom), 40, USER_ZOOM_CONT, 0, 0,
|
|
|
|
|
"Old style zoom, continues while moving mouse up or down");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, ROW, 0, "Dolly",
|
|
|
|
|
(xpos+edgespace+medprefbut+(3*midspace)+(4*smallprefbut)),y2,smallprefbut,buth,
|
|
|
|
|
&(U.viewzoom), 40, USER_ZOOM_DOLLY, 0, 0,
|
|
|
|
|
"Zooms in and out based on vertical mouse movement.");
|
|
|
|
|
|
|
|
|
|
uiDefButS(block, ROW, 0, "Scale",
|
|
|
|
|
(xpos+edgespace+medprefbut+(3*midspace)+(4*smallprefbut)),y1,smallprefbut,buth,
|
|
|
|
|
&(U.viewzoom), 40, USER_ZOOM_SCALE, 0, 0,
|
|
|
|
|
"Zooms in and out like scaling the view, mouse movements relative to center.");
|
|
|
|
|
|
Commit for the 4 aforementioned "features":
- "Global Pivot": Maintains a global Pivot and Align mode setting for
all 3d views when enabled, instead of seperate settings per 3d view
- "Auto Perspective": Switch to ortho mode automatically on 1/3/7, and
to Perspective when the view is rotated with the mouse
- "Align mode": As suggested on the list, when enabled, transformations
on several objects only transform their locations, not their sizes or
rotations.
- Grid dotted when not 1:1
***ATTENTION***! The User Interface parts of these features have not been
committed, as I work on my own modified UI here. The three features need
toggle buttons to turn them on and off.
I used the following 3 buttons (first two features are in userprefs,
third as a 3d view setting):
uiDefButBitS(block, TOG, USER_AUTOPERSP, B_DRAWINFO, "Auto Persp",
(xpos+edgespace+(3*medprefbut)+(3*midspace)+smallprefbut+2),y3+10,smallprefbut,buth,
&(U.uiflag), 0, 0, 0, 0,
"Automatically switch between orthographic and perspective");
uiDefButBitS(block, TOG, USER_LOCKAROUND, B_DRAWINFO, "Global Pivot",
(xpos+edgespace+(4*midspace)+(4*medprefbut)),y3+10,smallprefbut,buth,
&(U.uiflag), 0, 0, 0, 0,
"Use global pivot setting for all 3d views");
uiDefIconButS(block, TOG|BIT|10, B_AROUND, ICON_ALIGN,
xco+=XIC,0,XIC,YIC,
&G.vd->flag, 0, 0, 0, 0, "Translate only (align)");
Someone needs to add these to the interface in an appropriate manner!
Thanks.
2004-07-15 13:31:18 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_AUTOPERSP, B_DRAWINFO, "Auto Persp",
|
2004-07-16 01:34:19 +00:00
|
|
|
(xpos+edgespace+(3*medprefbut)+(3*midspace)+smallprefbut+2),y4,smallprefbut,buth,
|
Commit for the 4 aforementioned "features":
- "Global Pivot": Maintains a global Pivot and Align mode setting for
all 3d views when enabled, instead of seperate settings per 3d view
- "Auto Perspective": Switch to ortho mode automatically on 1/3/7, and
to Perspective when the view is rotated with the mouse
- "Align mode": As suggested on the list, when enabled, transformations
on several objects only transform their locations, not their sizes or
rotations.
- Grid dotted when not 1:1
***ATTENTION***! The User Interface parts of these features have not been
committed, as I work on my own modified UI here. The three features need
toggle buttons to turn them on and off.
I used the following 3 buttons (first two features are in userprefs,
third as a 3d view setting):
uiDefButBitS(block, TOG, USER_AUTOPERSP, B_DRAWINFO, "Auto Persp",
(xpos+edgespace+(3*medprefbut)+(3*midspace)+smallprefbut+2),y3+10,smallprefbut,buth,
&(U.uiflag), 0, 0, 0, 0,
"Automatically switch between orthographic and perspective");
uiDefButBitS(block, TOG, USER_LOCKAROUND, B_DRAWINFO, "Global Pivot",
(xpos+edgespace+(4*midspace)+(4*medprefbut)),y3+10,smallprefbut,buth,
&(U.uiflag), 0, 0, 0, 0,
"Use global pivot setting for all 3d views");
uiDefIconButS(block, TOG|BIT|10, B_AROUND, ICON_ALIGN,
xco+=XIC,0,XIC,YIC,
&G.vd->flag, 0, 0, 0, 0, "Translate only (align)");
Someone needs to add these to the interface in an appropriate manner!
Thanks.
2004-07-15 13:31:18 +00:00
|
|
|
&(U.uiflag), 0, 0, 0, 0,
|
|
|
|
|
"Automatically switch between orthographic and perspective");
|
|
|
|
|
|
|
|
|
|
uiDefButBitS(block, TOG, USER_LOCKAROUND, B_DRAWINFO, "Global Pivot",
|
2004-07-16 01:34:19 +00:00
|
|
|
(xpos+edgespace+(3*medprefbut)+(3*midspace)+smallprefbut+2),y5,smallprefbut,buth,
|
Commit for the 4 aforementioned "features":
- "Global Pivot": Maintains a global Pivot and Align mode setting for
all 3d views when enabled, instead of seperate settings per 3d view
- "Auto Perspective": Switch to ortho mode automatically on 1/3/7, and
to Perspective when the view is rotated with the mouse
- "Align mode": As suggested on the list, when enabled, transformations
on several objects only transform their locations, not their sizes or
rotations.
- Grid dotted when not 1:1
***ATTENTION***! The User Interface parts of these features have not been
committed, as I work on my own modified UI here. The three features need
toggle buttons to turn them on and off.
I used the following 3 buttons (first two features are in userprefs,
third as a 3d view setting):
uiDefButBitS(block, TOG, USER_AUTOPERSP, B_DRAWINFO, "Auto Persp",
(xpos+edgespace+(3*medprefbut)+(3*midspace)+smallprefbut+2),y3+10,smallprefbut,buth,
&(U.uiflag), 0, 0, 0, 0,
"Automatically switch between orthographic and perspective");
uiDefButBitS(block, TOG, USER_LOCKAROUND, B_DRAWINFO, "Global Pivot",
(xpos+edgespace+(4*midspace)+(4*medprefbut)),y3+10,smallprefbut,buth,
&(U.uiflag), 0, 0, 0, 0,
"Use global pivot setting for all 3d views");
uiDefIconButS(block, TOG|BIT|10, B_AROUND, ICON_ALIGN,
xco+=XIC,0,XIC,YIC,
&G.vd->flag, 0, 0, 0, 0, "Translate only (align)");
Someone needs to add these to the interface in an appropriate manner!
Thanks.
2004-07-15 13:31:18 +00:00
|
|
|
&(U.uiflag), 0, 0, 0, 0,
|
|
|
|
|
"Use global pivot setting for all 3d views");
|
2004-06-16 13:31:32 +00:00
|
|
|
|
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, "");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_TRACKBALL, B_DRAWINFO, "Trackball",
|
2003-10-29 01:10:10 +00:00
|
|
|
(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");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOGN, USER_TRACKBALL, B_DRAWINFO, "Turntable",
|
2003-10-29 01:10:10 +00:00
|
|
|
(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");
|
|
|
|
|
|
2004-07-16 01:34:19 +00:00
|
|
|
uiDefBut(block, LABEL,0,"Left Mouse Button:",
|
|
|
|
|
(xpos+edgespace+(3*midspace)+(4*medprefbut)),y5label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiBlockBeginAlign(block);
|
|
|
|
|
uiDefButBitS(block, TOGN, USER_LMOUSESELECT, B_DRAWINFO, "Cursor",
|
|
|
|
|
(xpos+edgespace+(4*midspace)+(4*medprefbut)),y4,smallprefbut+2,buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0, "Action for the left mouse button");
|
|
|
|
|
|
|
|
|
|
uiDefButBitS(block, TOG, USER_LMOUSESELECT, B_DRAWINFO, "Select",
|
|
|
|
|
(xpos+edgespace+(4*midspace)+(4*medprefbut)+smallprefbut+2),y4,smallprefbut+2,buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0, "Action for the left mouse button");
|
|
|
|
|
uiBlockEndAlign(block);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uiDefBut(block, LABEL,0,"Right Mouse Button:",
|
|
|
|
|
(xpos+edgespace+(4*midspace)+(5*medprefbut)),y5label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
|
|
|
|
uiBlockBeginAlign(block);
|
|
|
|
|
uiDefButBitS(block, TOGN, USER_LMOUSESELECT, B_DRAWINFO, "Select",
|
|
|
|
|
(xpos+edgespace+(5*midspace)+(5*medprefbut)),y4,smallprefbut+2,buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0, "Action for the right mouse button");
|
|
|
|
|
|
|
|
|
|
uiDefButBitS(block, TOG, USER_LMOUSESELECT, B_DRAWINFO, "Cursor",
|
|
|
|
|
(xpos+edgespace+(5*midspace)+(5*medprefbut)+smallprefbut+2),y4,smallprefbut+2,buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0, "Action for the right mouse button");
|
|
|
|
|
uiBlockEndAlign(block);
|
|
|
|
|
|
2003-10-29 01:10:10 +00:00
|
|
|
|
2003-04-28 11:17:21 +00:00
|
|
|
|
2004-06-16 13:31:32 +00:00
|
|
|
uiDefBut(block, LABEL,0,"Middle mouse button:",
|
|
|
|
|
(xpos+edgespace+(3*midspace)+(4*medprefbut)),y3label,medprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOGN, USER_VIEWMOVE, 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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_VIEWMOVE, 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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_TWOBUTTONMOUSE, 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:",
|
2003-12-26 20:12:42 +00:00
|
|
|
(xpos+edgespace+(4*midspace)+(5*medprefbut)),y3label,smallprefbut+15,buth,
|
2003-05-11 23:28:32 +00:00
|
|
|
0, 0, 0, 0, 0, "");
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_WHEELZOOMDIR, 0, "Invert Wheel Zoom",
|
2003-12-26 20:12:42 +00:00
|
|
|
(xpos+edgespace+(5*midspace)+(5*medprefbut)),y1,smallprefbut+15,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-12-26 20:12:42 +00:00
|
|
|
(xpos+edgespace+(5*midspace)+(5*medprefbut)),y2,smallprefbut+15,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-12-26 20:12:42 +00:00
|
|
|
|
|
|
|
|
#ifndef __APPLE__
|
|
|
|
|
uiDefBut(block, LABEL,0,"Cursor:",
|
|
|
|
|
(xpos+edgespace+(5*midspace)+(5*medprefbut)+smallprefbut+15),y3label,smallprefbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
uiDefButS(block, TOG|BIT|0, 0, "Large",
|
|
|
|
|
(xpos+edgespace+(6*midspace)+(5*medprefbut)+smallprefbut+15),y2,smallprefbut,buth,
|
|
|
|
|
&(U.curssize), 0, 0, 0, 0,
|
|
|
|
|
"Use Large cursors when available.");
|
|
|
|
|
#else
|
|
|
|
|
U.curssize=0; /*Small Cursor always for OSX for now */
|
|
|
|
|
#endif
|
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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOGN, USER_MAT_ON_OB, 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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_MAT_ON_OB, 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,
|
2004-01-25 23:48:11 +00:00
|
|
|
&(U.undosteps), 2, 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, "");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_KEYINSERTACT, 0, "Action",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+(2*medprefbut)+(2*midspace)),y2,smallprefbut,buth,
|
|
|
|
|
&(U.uiflag), 0, 0, 0, 0, "Automatic keyframe insertion in action ipo curve");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_KEYINSERTOBJ, 0, "Object",
|
2003-05-01 12:50:49 +00:00
|
|
|
(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
|
|
|
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefBut(block, LABEL,0,"Duplicate with object:",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+(3*midspace)+(3*medprefbut)+smallprefbut),y3label,medprefbut,buth,
|
2003-04-28 11:17:21 +00:00
|
|
|
0, 0, 0, 0, 0, "");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_DUP_MESH, 0, "Mesh",
|
2003-04-28 11:17:21 +00:00
|
|
|
(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");
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_DUP_ARM, 0, "Armature",
|
2003-04-28 11:17:21 +00:00
|
|
|
(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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_DUP_SURF, 0, "Surface",
|
2003-04-28 11:17:21 +00:00
|
|
|
(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");
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_DUP_LAMP, 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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_DUP_CURVE, 0, "Curve",
|
2003-04-28 11:17:21 +00:00
|
|
|
(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");
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_DUP_MAT, 0, "Material",
|
2003-04-28 11:17:21 +00:00
|
|
|
(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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_DUP_FONT, 0, "Text",
|
2003-04-28 11:17:21 +00:00
|
|
|
(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");
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_DUP_TEX, 0, "Texture",
|
2003-04-28 11:17:21 +00:00
|
|
|
(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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_DUP_MBALL, 0, "Metaball",
|
2003-04-28 11:17:21 +00:00
|
|
|
(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");
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_DUP_IPO, 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);
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_DOTRANSLATE, 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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
if(U.transopts & USER_DOTRANSLATE) {
|
2003-05-03 12:17:11 +00:00
|
|
|
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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_TR_TOOLTIPS, B_SETTRANSBUTS, "Tooltips",
|
2003-05-03 12:17:11 +00:00
|
|
|
(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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_TR_BUTTONS, B_SETTRANSBUTS, "Buttons",
|
2003-05-03 12:17:11 +00:00
|
|
|
(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
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_TR_MENUS, B_SETTRANSBUTS, "Toolbox",
|
2003-05-03 12:17:11 +00:00
|
|
|
(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");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
/* uiDefButBitS(block, TOG, USER_TR_TEXTEDIT, B_SETTRANSBUTS, "FTF All windows",
|
2003-05-03 12:17:11 +00:00
|
|
|
(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 */
|
|
|
|
|
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_AUTOSAVE, B_RESETAUTOSAVE, "Auto Save Temp Files",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace),y2,medprefbut,buth,
|
|
|
|
|
&(U.flag), 0, 0, 0, 0,
|
|
|
|
|
"Enables automatic saving of temporary files");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
if(U.flag & USER_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, "");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_ALLWINCODECS, 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, "");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_NO_CAPSLOCK, 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");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_NONUMPAD, 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, "");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitI(block, TOG, USER_DISABLE_SOUND, B_SOUNDTOGGLE, "Disable Sound",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+(4*medprefbut)+(4*midspace)),y2,medprefbut,buth,
|
|
|
|
|
&(U.gameflags), 0, 0, 0, 0, "Disables sounds from being played");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitS(block, TOG, USER_FILTERFILEEXTS, 0, "Filter File Extensions",
|
2003-05-01 12:50:49 +00:00
|
|
|
(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, "");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitI(block, TOGN, USER_DISABLE_MIPMAP, B_MIPMAPCHANGED, "Mipmaps",
|
2003-05-01 12:50:49 +00:00
|
|
|
(xpos+edgespace+(5*medprefbut)+(5*midspace)),y2,medprefbut,buth,
|
|
|
|
|
&(U.gameflags), 0, 0, 0, 0, "Toggles between mipmap textures on (beautiful) and off (fast)");
|
|
|
|
|
|
2004-01-13 14:50:45 +00:00
|
|
|
uiDefButBitI(block, TOG, USER_VERTEX_ARRAYS, 0, "Vertex Arrays",
|
2003-05-01 12:50:49 +00:00
|
|
|
(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
|
|
|
|
2004-01-06 12:28:31 +00:00
|
|
|
/* yafray: (temporary) path button for yafray xml export, now with fileselect */
|
2004-01-04 22:10:36 +00:00
|
|
|
uiDefBut(block, TEX, 0, "YFexport: ",
|
2004-01-06 12:28:31 +00:00
|
|
|
(xpos+edgespace), y2+buth+rspace, largeprefbut-smfileselbut, buth,
|
2004-01-04 22:10:36 +00:00
|
|
|
U.yfexportdir, 1.0, 63.0, 0, 0,
|
|
|
|
|
"The default directory for yafray xml export (must exist!)");
|
2004-01-06 12:28:31 +00:00
|
|
|
uiDefIconBut(block, BUT, B_YAFRAYDIRFILESEL, ICON_FILESEL,
|
|
|
|
|
(xpos+edgespace+largeprefbut-smfileselbut), y2+buth+rspace, smfileselbut, buth,
|
|
|
|
|
0, 0, 0, 0, 0, "Select the default yafray export directory");
|
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: ",
|
2004-01-16 23:40:14 +00:00
|
|
|
(xpos+edgespace+largeprefbut+midspace),y1,(largeprefbut-2*smfileselbut),buth,
|
2003-05-01 12:50:49 +00:00
|
|
|
U.pythondir, 1.0, 63.0, 0, 0, "The default directory to search for Python scripts");
|
2004-01-16 23:40:14 +00:00
|
|
|
uiDefIconBut(block, BUT, B_PYMENUEVAL, ICON_SCRIPT,
|
|
|
|
|
(xpos+edgespace+(2*largeprefbut)+midspace-2*smfileselbut),y1,smfileselbut,buth,
|
|
|
|
|
0, 0, 0, 0, 0, "Re-evaluate scripts registration in menus");
|
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-18 11:22:17 +00:00
|
|
|
myortho2(-0.375, (float)(sa->winx)-0.375, -0.375, (float)(sa->winy)-0.375);
|
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-11-23 13:48:12 +00:00
|
|
|
BIF_SetTheme(sa); // 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:
|
2004-01-10 11:19:05 +00:00
|
|
|
nr= pupmenu("Panel Alignment%t|Horizontal%x1|Vertical%x2|Free %x0");
|
2003-10-04 20:35:50 +00:00
|
|
|
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];
|
2004-07-16 01:34:19 +00:00
|
|
|
short mousebut = L_MOUSE;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
if(curarea->win==0) return;
|
|
|
|
|
|
|
|
|
|
if(val) {
|
|
|
|
|
|
|
|
|
|
if( uiDoBlocks(&curarea->uiblocks, event)!=UI_NOTHING ) event= 0;
|
2004-07-16 01:34:19 +00:00
|
|
|
|
|
|
|
|
/* swap mouse buttons based on user preference */
|
|
|
|
|
if (U.flag & USER_LMOUSESELECT) {
|
|
|
|
|
if (evt->event == LEFTMOUSE) {
|
|
|
|
|
event = RIGHTMOUSE;
|
|
|
|
|
mousebut = L_MOUSE;
|
|
|
|
|
} else if (evt->event == RIGHTMOUSE) {
|
|
|
|
|
event = LEFTMOUSE;
|
|
|
|
|
mousebut = R_MOUSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
switch(event) {
|
2004-06-16 20:25:56 +00:00
|
|
|
case UI_BUT_EVENT:
|
|
|
|
|
do_seqbuttons(val);
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
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
|
|
|
}
|
|
|
|
|
|
2004-07-16 01:34:19 +00:00
|
|
|
} while(get_mbut() & mousebut);
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
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;
|
2004-06-16 20:25:56 +00:00
|
|
|
case NKEY:
|
|
|
|
|
if(G.qual==0) {
|
2004-06-19 12:25:28 +00:00
|
|
|
toggle_blockhandler(curarea, SEQ_HANDLER_PROPERTIES, UI_PNL_TO_MOUSE);
|
2004-06-16 20:25:56 +00:00
|
|
|
scrarea_queue_winredraw(curarea);
|
|
|
|
|
}
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
case SKEY:
|
2003-10-27 23:55:38 +00:00
|
|
|
if((G.qual==LR_SHIFTKEY))
|
2004-06-03 14:29:14 +00:00
|
|
|
seq_snap_menu();
|
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;
|
2004-04-19 22:05:37 +00:00
|
|
|
sseq->blockscale= 0.7;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
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;
|
2004-04-19 22:05:37 +00:00
|
|
|
saction->blockscale= 0.7;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
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;
|
2004-04-19 22:05:37 +00:00
|
|
|
sfile->blockscale= 0.7;
|
2002-10-12 11:37:38 +00:00
|
|
|
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;
|
2004-04-19 22:05:37 +00:00
|
|
|
st->blockscale= 0.7;
|
2002-10-12 11:37:38 +00:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2003-12-14 01:18:09 +00:00
|
|
|
void init_scriptspace(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
SpaceScript *sc;
|
|
|
|
|
|
|
|
|
|
sc = MEM_callocN(sizeof(SpaceScript), "initscriptspace");
|
|
|
|
|
BLI_addhead(&sa->spacedata, sc);
|
|
|
|
|
|
|
|
|
|
sc->spacetype = SPACE_SCRIPT;
|
2004-04-19 22:05:37 +00:00
|
|
|
sc->blockscale= 0.7;
|
2003-12-14 01:18:09 +00:00
|
|
|
sc->script = NULL;
|
|
|
|
|
sc->flags = 0;
|
|
|
|
|
}
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
void init_imaselspace(ScrArea *sa)
|
|
|
|
|
{
|
|
|
|
|
SpaceImaSel *simasel;
|
|
|
|
|
|
|
|
|
|
simasel= MEM_callocN(sizeof(SpaceImaSel), "initimaselspace");
|
|
|
|
|
BLI_addhead(&sa->spacedata, simasel);
|
|
|
|
|
|
|
|
|
|
simasel->spacetype= SPACE_IMASEL;
|
2004-04-19 22:05:37 +00:00
|
|
|
simasel->blockscale= 0.7;
|
2002-10-12 11:37:38 +00:00
|
|
|
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;
|
2004-04-19 22:05:37 +00:00
|
|
|
ssound->blockscale= 0.7;
|
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;
|
2004-07-16 01:34:19 +00:00
|
|
|
#endif /* NAN_TPT */
|
|
|
|
|
short mousebut;
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
if(val==0) return;
|
|
|
|
|
|
2004-04-19 22:05:37 +00:00
|
|
|
if(uiDoBlocks(&curarea->uiblocks, event)!=UI_NOTHING ) event= 0;
|
2002-10-12 11:37:38 +00:00
|
|
|
|
2004-07-16 01:34:19 +00:00
|
|
|
/* swap mouse buttons based on user preference */
|
|
|
|
|
if (U.flag & USER_LMOUSESELECT) {
|
|
|
|
|
if (evt->event == LEFTMOUSE) {
|
|
|
|
|
event = RIGHTMOUSE;
|
|
|
|
|
mousebut = R_MOUSE;
|
|
|
|
|
} else if (evt->event == RIGHTMOUSE) {
|
|
|
|
|
event = LEFTMOUSE;
|
|
|
|
|
mousebut = L_MOUSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
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);
|
2004-07-16 01:34:19 +00:00
|
|
|
while (get_mbut() & mousebut) {
|
2002-10-12 11:37:38 +00:00
|
|
|
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;
|
2004-04-01 12:55:12 +00:00
|
|
|
case RIGHTMOUSE:
|
|
|
|
|
sample_vpaint();
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
#endif /* NAN_TPT */
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
/* Draw tool is inactive */
|
2004-07-16 01:34:19 +00:00
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
switch(event) {
|
|
|
|
|
case LEFTMOUSE:
|
|
|
|
|
if(G.qual & LR_SHIFTKEY) mouseco_to_curtile();
|
|
|
|
|
else gesture();
|
|
|
|
|
break;
|
|
|
|
|
case MIDDLEMOUSE:
|
|
|
|
|
image_viewmove();
|
|
|
|
|
break;
|
|
|
|
|
case RIGHTMOUSE:
|
2004-04-01 12:55:12 +00:00
|
|
|
if(G.f & G_FACESELECT)
|
|
|
|
|
mouse_select_sima();
|
|
|
|
|
else if(G.f & (G_VERTEXPAINT|G_TEXTUREPAINT))
|
|
|
|
|
sample_vpaint();
|
2002-10-12 11:37:38 +00:00
|
|
|
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;
|
2004-04-05 13:22:55 +00:00
|
|
|
case CKEY:
|
|
|
|
|
if(G.qual==LR_CTRLKEY)
|
|
|
|
|
toggle_uv_select('s');
|
|
|
|
|
else if(G.qual==LR_SHIFTKEY)
|
|
|
|
|
toggle_uv_select('l');
|
|
|
|
|
else if(G.qual==LR_ALTKEY)
|
|
|
|
|
toggle_uv_select('o');
|
|
|
|
|
else
|
|
|
|
|
toggle_uv_select('f');
|
|
|
|
|
break;
|
Added LSCM UV Unwrapping:
http://www.loria.fr/~levy/Galleries/LSCM/index.html
http://www.loria.fr/~levy/Papers/2002/s2002_lscm.pdf
Implementation Least Squares Conformal Maps parameterization, based on
chapter 2 of:
Bruno Levy, Sylvain Petitjean, Nicolas Ray, Jerome Maillot. Least Squares
Conformal Maps for Automatic Texture Atlas Generation. In Siggraph 2002,
July 2002.
Seams: Stored as a flag (ME_SEAM) in the new MEdge struct, these seams define
where a mesh will be cut when executing LSCM unwrapping. Seams can be marked
and cleared in Edit Mode. Ctrl+EKEY will pop up a menu allowing to Clear or Mark
the selected edges as seams.
Select Linked in Face Select Mode now only selects linked faces if no seams
separate them. So if seams are defined, this will now select the 'face group'
defined by the seams. Hotkey is still LKEY.
LSCM Unwrap: unwrap UV's by calculating a conformal mapping (preserving local
angles). Based on seams, the selected faces will be 'cut'. If multiple
'face groups' are selected, they will be unwrapped separately and packed in
the image rectangle in the UV Editor. Packing uses a simple and fast
algorithm, only designed to avoid having overlapping faces.
LSCM can be found in the Unwrap menu (UKEY), and the UV Calculation panel.
Pinning: UV's can be pinned in the UV Editor. When LSCM Unwrap is then
executed, these UV's will stay in place, allowing to tweak the solution.
PKEY and ALT+PKEY will respectively pin and unpin selected UV's.
Face Select Mode Drawing Changes:
- Draw Seams option to enable disable drawing of seams
- Draw Faces option to enable drawing of selected faces in transparent purple
- Draw Hidden Edges option to enable drawing of edges of hidden faces
- Draw Edges option to enable drawing of edges of visible faces
The colors for these seams, faces and edges are themeable.
2004-07-13 11:48:52 +00:00
|
|
|
case EKEY :
|
|
|
|
|
if (okee("LSCM unwrap"))
|
|
|
|
|
unwrap_lscm();
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
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;
|
2004-04-01 12:55:12 +00:00
|
|
|
case HKEY:
|
|
|
|
|
if(G.qual==LR_ALTKEY)
|
|
|
|
|
reveal_tface_uv();
|
|
|
|
|
else if((G.qual==LR_SHIFTKEY))
|
|
|
|
|
hide_tface_uv(1);
|
|
|
|
|
else if((G.qual==0))
|
|
|
|
|
hide_tface_uv(0);
|
|
|
|
|
break;
|
|
|
|
|
case LKEY:
|
|
|
|
|
if((G.qual==0))
|
2004-04-05 13:22:55 +00:00
|
|
|
select_linked_tface_uv();
|
|
|
|
|
else if(G.qual==LR_ALTKEY)
|
|
|
|
|
unlink_selection();
|
|
|
|
|
break;
|
|
|
|
|
case MKEY:
|
|
|
|
|
if((G.qual==0))
|
|
|
|
|
mirrormenu_tface_uv();
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
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;
|
2004-04-01 12:55:12 +00:00
|
|
|
case OKEY:
|
|
|
|
|
if (G.qual==LR_SHIFTKEY) {
|
|
|
|
|
extern int prop_mode;
|
|
|
|
|
prop_mode= !prop_mode;
|
|
|
|
|
}
|
|
|
|
|
else if((G.qual==0)) {
|
|
|
|
|
if(G.f & G_PROPORTIONAL)
|
|
|
|
|
G.f &= ~G_PROPORTIONAL;
|
|
|
|
|
else
|
|
|
|
|
G.f |= G_PROPORTIONAL;
|
|
|
|
|
}
|
|
|
|
|
break;
|
Added LSCM UV Unwrapping:
http://www.loria.fr/~levy/Galleries/LSCM/index.html
http://www.loria.fr/~levy/Papers/2002/s2002_lscm.pdf
Implementation Least Squares Conformal Maps parameterization, based on
chapter 2 of:
Bruno Levy, Sylvain Petitjean, Nicolas Ray, Jerome Maillot. Least Squares
Conformal Maps for Automatic Texture Atlas Generation. In Siggraph 2002,
July 2002.
Seams: Stored as a flag (ME_SEAM) in the new MEdge struct, these seams define
where a mesh will be cut when executing LSCM unwrapping. Seams can be marked
and cleared in Edit Mode. Ctrl+EKEY will pop up a menu allowing to Clear or Mark
the selected edges as seams.
Select Linked in Face Select Mode now only selects linked faces if no seams
separate them. So if seams are defined, this will now select the 'face group'
defined by the seams. Hotkey is still LKEY.
LSCM Unwrap: unwrap UV's by calculating a conformal mapping (preserving local
angles). Based on seams, the selected faces will be 'cut'. If multiple
'face groups' are selected, they will be unwrapped separately and packed in
the image rectangle in the UV Editor. Packing uses a simple and fast
algorithm, only designed to avoid having overlapping faces.
LSCM can be found in the Unwrap menu (UKEY), and the UV Calculation panel.
Pinning: UV's can be pinned in the UV Editor. When LSCM Unwrap is then
executed, these UV's will stay in place, allowing to tweak the solution.
PKEY and ALT+PKEY will respectively pin and unpin selected UV's.
Face Select Mode Drawing Changes:
- Draw Seams option to enable disable drawing of seams
- Draw Faces option to enable drawing of selected faces in transparent purple
- Draw Hidden Edges option to enable drawing of edges of hidden faces
- Draw Edges option to enable drawing of edges of visible faces
The colors for these seams, faces and edges are themeable.
2004-07-13 11:48:52 +00:00
|
|
|
case PKEY:
|
|
|
|
|
if(G.qual==LR_ALTKEY)
|
|
|
|
|
pin_tface_uv(0);
|
|
|
|
|
else
|
|
|
|
|
pin_tface_uv(1);
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
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;
|
2004-04-01 12:55:12 +00:00
|
|
|
case VKEY:
|
|
|
|
|
if((G.qual==0))
|
|
|
|
|
stitch_uv_tface(0);
|
|
|
|
|
else if(G.qual==LR_SHIFTKEY)
|
|
|
|
|
stitch_uv_tface(1);
|
|
|
|
|
break;
|
|
|
|
|
case WKEY:
|
|
|
|
|
transform_tface_uv('w');
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
2004-04-19 22:05:37 +00:00
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
/* Events handled always (whether the draw tool is active or not) */
|
|
|
|
|
switch (event) {
|
2004-04-19 22:05:37 +00:00
|
|
|
case UI_BUT_EVENT:
|
|
|
|
|
do_imagebuts(val); // drawimage.c
|
|
|
|
|
break;
|
|
|
|
|
case MIDDLEMOUSE:
|
|
|
|
|
image_viewmove();
|
|
|
|
|
break;
|
|
|
|
|
case WHEELUPMOUSE:
|
|
|
|
|
case WHEELDOWNMOUSE:
|
|
|
|
|
case PADPLUSKEY:
|
|
|
|
|
case PADMINUS:
|
|
|
|
|
image_viewzoom(event);
|
|
|
|
|
scrarea_queue_winredraw(curarea);
|
|
|
|
|
break;
|
|
|
|
|
case HOMEKEY:
|
|
|
|
|
if((G.qual==0))
|
|
|
|
|
image_home();
|
|
|
|
|
break;
|
|
|
|
|
case NKEY:
|
|
|
|
|
if(G.qual==0) {
|
2004-06-19 12:25:28 +00:00
|
|
|
toggle_blockhandler(curarea, IMAGE_HANDLER_PROPERTIES, UI_PNL_TO_MOUSE);
|
2002-10-12 11:37:38 +00:00
|
|
|
scrarea_queue_winredraw(curarea);
|
2004-04-19 22:05:37 +00:00
|
|
|
}
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
2004-04-19 22:05:37 +00:00
|
|
|
sima->blockscale= 0.7;
|
2002-10-12 11:37:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ******************** 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;
|
|
|
|
|
|
2004-07-16 01:34:19 +00:00
|
|
|
/* swap mouse buttons based on user preference */
|
|
|
|
|
if (U.flag & USER_LMOUSESELECT) {
|
|
|
|
|
if (evt->event == LEFTMOUSE) {
|
|
|
|
|
event = RIGHTMOUSE;
|
|
|
|
|
} else if (evt->event == RIGHTMOUSE) {
|
|
|
|
|
event = LEFTMOUSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
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:
|
2004-01-07 12:26:40 +00:00
|
|
|
if((G.qual==LR_ALTKEY)) {
|
|
|
|
|
if (okee("Shrink blocks")) {
|
|
|
|
|
shrink_oops();
|
|
|
|
|
}
|
|
|
|
|
} else if((G.qual==LR_SHIFTKEY)) {
|
|
|
|
|
if (okee("Shuffle blocks")) {
|
|
|
|
|
shuffle_oops();
|
|
|
|
|
}
|
|
|
|
|
} else if((G.qual==0)) {
|
2003-10-27 23:55:38 +00:00
|
|
|
transform_oops('s');
|
2004-01-07 12:26:40 +00:00
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
break;
|
2004-06-03 14:26:44 +00:00
|
|
|
case PKEY:
|
|
|
|
|
if((G.qual==LR_CTRLKEY)) {
|
|
|
|
|
make_parent();
|
|
|
|
|
} else if((G.qual==LR_ALTKEY)) {
|
|
|
|
|
clear_parent();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
2002-10-12 11:37:38 +00:00
|
|
|
|
|
|
|
|
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;
|
2004-04-19 22:05:37 +00:00
|
|
|
soops->blockscale= 0.7;
|
2002-10-12 11:37:38 +00:00
|
|
|
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
|
|
|
|
2003-12-14 01:18:09 +00:00
|
|
|
/* ******************** SPACE: Script ********************** */
|
|
|
|
|
|
|
|
|
|
extern void drawscriptspace(ScrArea *sa, void *spacedata);
|
|
|
|
|
extern void winqreadscriptspace(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);
|
2003-12-14 01:18:09 +00:00
|
|
|
else if(type==SPACE_SCRIPT)
|
|
|
|
|
init_scriptspace(sa);
|
2002-10-12 11:37:38 +00:00
|
|
|
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);
|
|
|
|
|
}
|
2003-12-14 01:18:09 +00:00
|
|
|
else if(sl->spacetype==SPACE_SCRIPT) {
|
|
|
|
|
free_scriptspace((SpaceScript *)sl);
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
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;
|
2003-12-14 01:18:09 +00:00
|
|
|
case REDRAWSCRIPT:
|
|
|
|
|
if (sa->spacetype==SPACE_SCRIPT) {
|
|
|
|
|
scrarea_queue_winredraw(sa);
|
|
|
|
|
}
|
|
|
|
|
break;
|
2002-10-12 11:37:38 +00:00
|
|
|
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;
|
|
|
|
|
}
|
2003-12-14 01:18:09 +00:00
|
|
|
SpaceType *spacescript_get_type(void)
|
|
|
|
|
{
|
|
|
|
|
static SpaceType *st = NULL;
|
|
|
|
|
|
|
|
|
|
if (!st) {
|
|
|
|
|
st = spacetype_new("Script");
|
|
|
|
|
spacetype_set_winfuncs(st, drawscriptspace, NULL, winqreadscriptspace);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return st;
|
|
|
|
|
}
|
2002-10-12 11:37:38 +00:00
|
|
|
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;
|
|
|
|
|
}
|