Another phase in panelizing all window types. Did lots of small code

fixes, including:

- Panel in action window (disabled it, since there's no need for it)
- fix: when action was added to mesh with vertex keys, the action couldn't
  be deleted, nor did action window draw key names
- mouse on RVK (key) in Action window: Nkey menu pops as well.
  This is not a good candidate to put in Panel, no selection possible here.
- when you change name of RVK in action window, it shows in IpoWindow too
This commit is contained in:
2004-04-20 18:27:10 +00:00
parent b41cf698dc
commit d694335cc2
14 changed files with 291 additions and 367 deletions

View File

@@ -60,6 +60,9 @@ struct BWinEvent;
/* image handler codes */
#define IMAGE_HANDLER_PROPERTIES 30
/* image handler codes */
#define ACTION_HANDLER_PROPERTIES 30
void scrarea_do_windraw (struct ScrArea *sa);

View File

@@ -57,6 +57,6 @@ void select_actionchannel_by_name (struct bAction *act, char *name, int select);
struct bAction *bake_action_with_client (struct bAction *act, struct Object *arm, float tolerance);
struct Key *get_action_mesh_key(void);
int get_nearest_key_num(struct Key *key, short *mval, float *x);
void stupid_damn_numbuts_action(void);
#endif /* BSE_EDITACTION_H */

View File

@@ -131,7 +131,6 @@ void nextkey_ipo(int dir);
void nextkey_obipo(int dir);
void remake_ipo_transverts(struct TransVert *transmain, float *dvec, int tot);
void transform_ipo(int mode);
void clever_numbuts_ipo(void);
void filter_sampledata(float *data, int sfra, int efra);
void sampledata_to_ipocurve(float *data, int sfra, int efra, struct IpoCurve *icu);
void ipo_record(void);

View File

@@ -35,6 +35,8 @@
struct BezTriple;
// warn these structs are still in ipo.h!
typedef struct IpoKey {
struct IpoKey *next, *prev;
short flag, rt;
@@ -43,7 +45,7 @@ typedef struct IpoKey {
} IpoKey;
typedef struct EditIpo {
char name[12];
char name[32]; // same length as keyblock->name
IpoCurve *icu;
short adrcode, flag;
short disptype, rt;

View File

@@ -47,7 +47,7 @@ typedef struct IpoKey {
} IpoKey;
typedef struct EditIpo {
char name[12];
char name[32];
IpoCurve *icu;
short adrcode, flag;
short disptype, rt;

View File

@@ -85,6 +85,8 @@ typedef struct SpaceAction {
float blockscale;
struct ScrArea *area;
short blockhandler[8];
View2D v2d;
bAction *action;
int flag;

View File

@@ -73,6 +73,7 @@
#include "BIF_screen.h"
#include "BIF_interface.h"
#include "BIF_mywindow.h"
#include "BIF_space.h"
#include "BDR_editcurve.h"
#include "BSE_view.h"
@@ -114,6 +115,7 @@ void meshactionbuts(SpaceAction *saction, Key *key)
char str[64];
float x, y;
uiBlock *block;
uiBut *but;
#define XIC 20
#define YIC 20
@@ -146,20 +148,26 @@ void meshactionbuts(SpaceAction *saction, Key *key)
if (!showsliders) {
ACTWIDTH = NAMEWIDTH;
uiDefIconButS(block, TOG, B_FLIPINFOMENU,
but=uiDefIconButS(block, TOG, B_REDR,
ICON_DISCLOSURE_TRI_RIGHT,
NAMEWIDTH - XIC - 5, y + CHANNELHEIGHT,
XIC,YIC-2,
&(showsliders), 0, 0, 0, 0,
"Show action window sliders");
// no hilite, the winmatrix is not correct later on...
uiButSetFlag(but, UI_NO_HILITE);
}
else {
uiDefIconButS(block, TOG, B_FLIPINFOMENU,
but= uiDefIconButS(block, TOG, B_REDR,
ICON_DISCLOSURE_TRI_DOWN,
NAMEWIDTH - XIC - 5, y + CHANNELHEIGHT,
XIC,YIC-2,
&(showsliders), 0, 0, 0, 0,
"Hide action window sliders");
// no hilite, the winmatrix is not correct later on...
uiButSetFlag(but, UI_NO_HILITE);
ACTWIDTH = NAMEWIDTH + SLIDERWIDTH;
/* sliders are open so draw them */
@@ -251,7 +259,8 @@ static void draw_action_channel_names(bAction *act)
}
static void draw_action_mesh_names(Key *key) {
static void draw_action_mesh_names(Key *key)
{
/* draws the names of the rvk keys in the
* left side of the action window
*/
@@ -325,21 +334,18 @@ static void draw_channel_names(void)
glColor3ub(0x00, 0x00, 0x00);
act=G.saction->action;
if (act) {
/* if there is a selected action then
* draw the channel names
*/
draw_action_channel_names(act);
}
else {
if ( (key = get_action_mesh_key()) ) {
/* if there is a mesh selected with rvk's,
* then draw the RVK names
*/
draw_action_mesh_names(key);
}
if ( (key = get_action_mesh_key()) ) {
/* if there is a mesh selected with rvk's,
* then draw the RVK names
*/
draw_action_mesh_names(key);
}
myortho2(0, NAMEWIDTH, 0, (ofsy+G.v2d->mask.ymax) -
@@ -522,6 +528,54 @@ static void draw_mesh_strips(SpaceAction *saction, Key *key)
glaEnd2DDraw(di);
}
/* ********* action panel *********** */
void do_actionbuts(unsigned short event)
{
switch(event) {
case REDRAWVIEW3D:
allqueue(REDRAWVIEW3D, 0);
break;
case B_REDR:
allqueue(REDRAWACTION, 0);
break;
}
}
static void action_panel_properties(short cntrl) // ACTION_HANDLER_PROPERTIES
{
uiBlock *block;
block= uiNewBlock(&curarea->uiblocks, "action_panel_properties", UI_EMBOSS, UI_HELV, curarea->win);
uiPanelControl(UI_PNL_SOLID | UI_PNL_CLOSE | cntrl);
uiSetPanelHandler(ACTION_HANDLER_PROPERTIES); // for close and esc
if(uiNewPanel(curarea, block, "Transform Properties", "Action", 10, 230, 318, 204)==0) return;
uiDefBut(block, LABEL, 0, "test text", 10,180,300,19, 0, 0, 0, 0, 0, "");
}
static void action_blockhandlers(ScrArea *sa)
{
SpaceAction *sact= sa->spacedata.first;
short a;
for(a=0; a<SPACE_MAXHANDLER; a+=2) {
switch(sact->blockhandler[a]) {
case IMAGE_HANDLER_PROPERTIES:
action_panel_properties(sact->blockhandler[a+1]);
break;
}
/* clear action value for event */
sact->blockhandler[a+1]= 0;
}
uiDrawBlocksPanels(sa, 0);
}
void drawactionspace(ScrArea *sa, void *spacedata)
{
short ofsx = 0, ofsy = 0;
@@ -532,6 +586,9 @@ void drawactionspace(ScrArea *sa, void *spacedata)
if (!G.saction)
return;
/* warning; blocks need to be freed each time, handlers dont remove */
uiFreeBlocksWin(&sa->uiblocks, sa->win);
if (!G.saction->pin) {
if (OBACT)
G.saction->action = OBACT->action;
@@ -552,7 +609,7 @@ void drawactionspace(ScrArea *sa, void *spacedata)
maxymin = key->totkey*(CHANNELHEIGHT+CHANNELSKIP);
if (G.v2d->cur.ymin > maxymin) G.v2d->cur.ymin = maxymin;
}
/* Lets make sure the width of the left hand of the screen
* is set to an appropriate value based on whether sliders
* are showing of not
@@ -582,6 +639,8 @@ void drawactionspace(ScrArea *sa, void *spacedata)
glClear(GL_COLOR_BUFFER_BIT);
myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax);
bwin_clear_viewmat(sa->win); /* clear buttons view */
glLoadIdentity();
/* Draw backdrop */
calc_ipogrid();
@@ -631,6 +690,11 @@ void drawactionspace(ScrArea *sa, void *spacedata)
mywinset(curarea->win); // reset scissor too
myortho2(-0.375, curarea->winx-0.375, -0.375, curarea->winy-0.375);
draw_area_emboss(sa);
/* it is important to end a view in a transform compatible with buttons */
bwin_scalematrix(sa->win, G.saction->blockscale, G.saction->blockscale, G.saction->blockscale);
action_blockhandlers(sa);
curarea->win_swap= WIN_BACK_OK;
}

View File

@@ -2149,17 +2149,80 @@ static void borderselect_function(void (*select_func)(bAction *act,
}
static void clever_keyblock_names(Key *key, short* mval){
int but=0, i, keynum;
char str[64];
float x;
KeyBlock *kb;
/* get the keynum cooresponding to the y value
* of the mouse pointer, return if this is
* an invalid key number (and we don't deal
* with the speed ipo).
*/
keynum = get_nearest_key_num(key, mval, &x);
if ( (keynum < 1) || (keynum >= key->totkey) )
return;
kb= key->block.first;
for (i=0; i<keynum; ++i) kb = kb->next;
if (kb->name[0] == '\0') {
sprintf(str, "Key %d", keynum);
}
else {
strcpy(str, kb->name);
}
if ( (kb->slidermin >= kb->slidermax) ) {
kb->slidermin = 0.0;
kb->slidermax = 1.0;
}
add_numbut(but++, TEX, "KB: ", 0, 24, str,
"Does this really need a tool tip?");
add_numbut(but++, NUM|FLO, "Slider min:",
-10000, kb->slidermax, &kb->slidermin, 0);
add_numbut(but++, NUM|FLO, "Slider max:",
kb->slidermin, 10000, &kb->slidermax, 0);
if (do_clever_numbuts(str, but, REDRAW)) {
strcpy(kb->name, str);
allqueue (REDRAWACTION, 0);
allspace(REMAKEIPO, 0);
allqueue (REDRAWIPO, 0);
}
}
static void numbuts_action(void)
{
/* now called from action window event loop, plus reacts on mouseclick */
/* removed Hos grunts for that reason! :) (ton) */
Key *key;
short mval[2];
if ( (key = get_action_mesh_key()) ) {
getmouseco_areawin (mval);
if (mval[0]<NAMEWIDTH) {
clever_keyblock_names(key, mval);
}
}
}
void winqreadactionspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
{
unsigned short event= evt->event;
short val= evt->val;
extern void do_actionbuts(unsigned short event); // drawaction.c
SpaceAction *saction;
bAction *act;
int doredraw= 0;
short mval[2];
float dx,dy;
int cfra;
Key *key;
float dx,dy;
int doredraw= 0;
int cfra;
short mval[2];
unsigned short event= evt->event;
short val= evt->val;
if(curarea->win==0) return;
@@ -2178,67 +2241,10 @@ void winqreadactionspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
switch(event) {
case UI_BUT_EVENT:
do_butspace(val); // abuse!
do_actionbuts(val); // window itself
break;
case HOMEKEY:
do_action_buttons(B_ACTHOME);
break;
case CKEY:
/* scroll the window so the current
* frame is in the center.
*/
center_currframe();
break;
case DKEY:
if (key) {
if (G.qual & LR_SHIFTKEY && mval[0]>ACTWIDTH) {
duplicate_meshchannel_keys(key);
}
}
else {
if (G.qual & LR_SHIFTKEY && mval[0]>ACTWIDTH){
duplicate_actionchannel_keys();
remake_action_ipos(act);
}
}
break;
case DELKEY:
case XKEY:
if (key) {
delete_meshchannel_keys(key);
}
else {
if (mval[0]<NAMEWIDTH)
delete_actionchannels ();
else
delete_actionchannel_keys ();
}
break;
case GKEY:
if (mval[0]>=ACTWIDTH) {
if (key) {
transform_meshchannel_keys('g', key);
}
else {
transform_actionchannel_keys ('g');
}
}
break;
case SKEY:
if (mval[0]>=ACTWIDTH) {
if (key) {
transform_meshchannel_keys('s', key);
}
else {
transform_actionchannel_keys ('s');
}
}
do_action_buttons(B_ACTHOME); // header
break;
case AKEY:
@@ -2270,44 +2276,6 @@ void winqreadactionspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
break;
case VKEY:
if (key) {
sethandles_meshchannel_keys(HD_VECT, key);
/* to do */
}
else {
sethandles_actionchannel_keys(HD_VECT);
}
break;
case HKEY:
if (key) {
if(G.qual & LR_SHIFTKEY) {
sethandles_meshchannel_keys(HD_AUTO, key);
}
else {
sethandles_meshchannel_keys(HD_ALIGN, key);
}
}
else {
if(G.qual & LR_SHIFTKEY) {
sethandles_actionchannel_keys(HD_AUTO);
}
else {
sethandles_actionchannel_keys(HD_ALIGN);
}
}
break;
/*** set the Ipo type ***/
case TKEY:
if (key) {
/* to do */
}
else {
set_ipotype_actionchannels(SET_IPO_POPUP);
}
break;
case BKEY:
if (key) {
if (mval[0]<ACTWIDTH){
@@ -2353,6 +2321,111 @@ void winqreadactionspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
}
break;
case CKEY:
/* scroll the window so the current
* frame is in the center.
*/
center_currframe();
break;
case DKEY:
if (key) {
if (G.qual & LR_SHIFTKEY && mval[0]>ACTWIDTH) {
duplicate_meshchannel_keys(key);
}
}
else {
if (G.qual & LR_SHIFTKEY && mval[0]>ACTWIDTH){
duplicate_actionchannel_keys();
remake_action_ipos(act);
}
}
break;
case GKEY:
if (mval[0]>=ACTWIDTH) {
if (key) {
transform_meshchannel_keys('g', key);
}
else {
transform_actionchannel_keys ('g');
}
}
break;
case HKEY:
if (key) {
if(G.qual & LR_SHIFTKEY) {
sethandles_meshchannel_keys(HD_AUTO, key);
}
else {
sethandles_meshchannel_keys(HD_ALIGN, key);
}
}
else {
if(G.qual & LR_SHIFTKEY) {
sethandles_actionchannel_keys(HD_AUTO);
}
else {
sethandles_actionchannel_keys(HD_ALIGN);
}
}
break;
case NKEY:
if(G.qual==0) {
numbuts_action();
/* no panel (yet). current numbuts are not easy to put in panel... */
//add_blockhandler(curarea, ACTION_HANDLER_PROPERTIES, UI_PNL_TO_MOUSE);
//scrarea_queue_winredraw(curarea);
}
break;
case SKEY:
if (mval[0]>=ACTWIDTH) {
if (key) {
transform_meshchannel_keys('s', key);
}
else {
transform_actionchannel_keys ('s');
}
}
break;
/*** set the Ipo type ***/
case TKEY:
if (key) {
/* to do */
}
else {
set_ipotype_actionchannels(SET_IPO_POPUP);
}
break;
case VKEY:
if (key) {
sethandles_meshchannel_keys(HD_VECT, key);
/* to do */
}
else {
sethandles_actionchannel_keys(HD_VECT);
}
break;
case DELKEY:
case XKEY:
if (key) {
delete_meshchannel_keys(key);
}
else {
if (mval[0]<NAMEWIDTH)
delete_actionchannels ();
else
delete_actionchannel_keys ();
}
break;
case LEFTMOUSE:
if (mval[0]>ACTWIDTH){
do {
@@ -2380,12 +2453,13 @@ void winqreadactionspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
* channel or constraint channel
*/
if (mval[0]<NAMEWIDTH) {
if(G.qual & LR_SHIFTKEY)
mouse_actionchannels(act, mval, NULL,
SELECT_INVERT);
else
mouse_actionchannels(act, mval, NULL,
SELECT_REPLACE);
if(act) {
if(G.qual & LR_SHIFTKEY)
mouse_actionchannels(act, mval, NULL, SELECT_INVERT);
else
mouse_actionchannels(act, mval, NULL, SELECT_REPLACE);
}
else numbuts_action();
}
else if (mval[0]>ACTWIDTH) {
@@ -2494,71 +2568,4 @@ int get_nearest_key_num(Key *key, short *mval, float *x) {
return (num + 1);
}
static void clever_keyblock_names(Key *key, short* mval){
int but=0, i, keynum;
char str[64];
float x;
KeyBlock *kb;
/* get the keynum cooresponding to the y value
* of the mouse pointer, return if this is
* an invalid key number (and we don't deal
* with the speed ipo).
*/
keynum = get_nearest_key_num(key, mval, &x);
if ( (keynum < 1) || (keynum >= key->totkey) )
return;
kb= key->block.first;
for (i=0; i<keynum; ++i) kb = kb->next;
if (kb->name[0] == '\0') {
sprintf(str, "Key %d", keynum);
}
else {
strcpy(str, kb->name);
}
if ( (kb->slidermin >= kb->slidermax) ) {
kb->slidermin = 0.0;
kb->slidermax = 1.0;
}
add_numbut(but++, TEX, "KB: ", 0, 24, str,
"Does this really need a tool tip?");
add_numbut(but++, NUM|FLO, "Slider min:",
-10000, kb->slidermax, &kb->slidermin, 0);
add_numbut(but++, NUM|FLO, "Slider max:",
kb->slidermin, 10000, &kb->slidermax, 0);
if (do_clever_numbuts(str, but, REDRAW)) {
strcpy(kb->name, str);
allqueue (REDRAWACTION, 0);
allqueue (REDRAWIPO, 0);
}
}
void stupid_damn_numbuts_action(void){
/* I think this function might have been
* deemed clever if it could have been
* called from the event processing
* routine in this file -- rather than having
* to go from the NKEY event from blenderqread
* in toets.c (which returns 0 so nobody else
* can use the NKEY) then into the clever_numbuts
* routine in toolbox.c, the finally to this
* function. Grumble, grumble, grumble ...
*/
Key *key;
short mval[2];
if ( (key = get_action_mesh_key()) ) {
getmouseco_areawin (mval);
if (mval[0]<NAMEWIDTH) {
clever_keyblock_names(key, mval);
}
}
}

View File

@@ -907,6 +907,7 @@ void make_cu_editipo(SpaceIpo *si)
void make_key_editipo(SpaceIpo *si)
{
Key *key;
KeyBlock *kb=NULL;
EditIpo *ei;
int a;
@@ -914,8 +915,12 @@ void make_key_editipo(SpaceIpo *si)
si->totipo= KEY_TOTIPO;
for(a=0; a<KEY_TOTIPO; a++) {
getname_key_ei(key_ar[a], ei->name);
key= (Key *)G.sipo->from;
if(key) kb= key->block.first;
for(a=0; a<KEY_TOTIPO; a++, ei++) {
if(kb && kb->name[0] != 0) strncpy(ei->name, kb->name, 32); // length both same
else getname_key_ei(key_ar[a], ei->name);
ei->adrcode= key_ar[a];
ei->col= ipo_rainbow(a, KEY_TOTIPO);
@@ -926,11 +931,10 @@ void make_key_editipo(SpaceIpo *si)
}
else if(a==0) ei->flag |= IPO_VISIBLE;
ei++;
if(kb) kb= kb->next;
}
ei= si->editipo;
key= (Key *)G.sipo->from;
if(key && key->type==KEY_RELATIVE) {
strcpy(ei->name, "----");
}
@@ -4936,142 +4940,6 @@ void transform_ipo(int mode)
MEM_freeN(transmain);
}
void clever_numbuts_ipo()
{
BezTriple *bezt=0, *bezt1;
Key *key;
KeyBlock *kb;
EditIpo *ei;
float far, delta[3], old[3];
int a, b, scale10=0, totbut=2;
if(G.sipo->ipo && G.sipo->ipo->id.lib) return;
if(G.sipo->editipo==0) return;
/* which vertices are involved */
get_status_editipo();
if(G.qual & LR_SHIFTKEY) totbut= 1;
if(G.vd==0) far= 10000.0;
else far= (float)(MAX2(G.vd->far, 10000.0));
if(totipo_vertsel) {
ei= G.sipo->editipo;
for(a=0; a<G.sipo->totipo; a++, ei++) {
if ISPOIN(ei, flag & IPO_VISIBLE, icu) {
if( (ei->flag & IPO_EDIT) || G.sipo->showkey) {
if(ei->icu->bezt) {
bezt1= ei->icu->bezt;
b= ei->icu->totvert;
while(b--) {
if(BEZSELECTED(bezt1)) {
bezt= bezt1;
break;
}
bezt1++;
}
}
}
}
if(bezt) break;
}
if(bezt==0) return;
if(bezt->f2 & 1) {
VECCOPY(old, bezt->vec[1]);
if(totipo_vis==1 && G.sipo->blocktype==ID_OB) {
if ELEM4(ei->icu->adrcode, OB_TIME, OB_ROT_X, OB_ROT_Y, OB_ROT_Z) scale10= 1;
if ELEM3(ei->icu->adrcode, OB_DROT_X, OB_DROT_Y, OB_DROT_Z) scale10= 1;
}
if(scale10) bezt->vec[1][1]*= 10.0;
add_numbut(0, NUM|FLO, "LocX:", -1000, 10000, bezt->vec[1], 0);
if(totbut==2) add_numbut(1, NUM|FLO, "LocY:", -far, far, bezt->vec[1]+1, 0);
do_clever_numbuts("Active BezierPoint", totbut, REDRAW);
if(scale10) bezt->vec[1][1]/= 10.0;
VecSubf(delta, bezt->vec[1], old);
VECCOPY(bezt->vec[1], old);
/* apply */
ei= G.sipo->editipo;
for(a=0; a<G.sipo->totipo; a++, ei++) {
if ISPOIN(ei, flag & IPO_VISIBLE, icu) {
if( (ei->flag & IPO_EDIT) || G.sipo->showkey) {
if(ei->icu->bezt) {
bezt= ei->icu->bezt;
b= ei->icu->totvert;
while(b--) {
if(bezt->f2 & 1) {
bezt->vec[0][0]+= delta[0];
bezt->vec[1][0]+= delta[0];
bezt->vec[2][0]+= delta[0];
bezt->vec[0][1]+= delta[1];
bezt->vec[1][1]+= delta[1];
bezt->vec[2][1]+= delta[1];
}
bezt++;
}
}
}
}
}
ei= G.sipo->editipo;
for(a=0; a<G.sipo->totipo; a++, ei++) {
if ISPOIN(ei, flag & IPO_VISIBLE, icu) {
sort_time_ipocurve(ei->icu);
testhandles_ipocurve(ei->icu);
}
}
}
else if(bezt->f1 & 1) {
add_numbut(0, NUM|FLO, "LocX:", -1000, 10000, bezt->vec[0], 0);
if(totbut==2) add_numbut(1, NUM|FLO, "LocY:", -far, far, bezt->vec[0]+1, 0);
do_clever_numbuts("Active HandlePoint", totbut, REDRAW);
}
else if(bezt->f3 & 1) {
add_numbut(0, NUM|FLO, "LocX:", -1000, 10000, bezt->vec[0], 0);
if(totbut==2) add_numbut(1, NUM|FLO, "LocY:", -far, far, bezt->vec[2]+1, 0);
do_clever_numbuts("Active HandlePoint", totbut, REDRAW);
}
editipo_changed(G.sipo, 1);
}
else {
if(G.sipo->blocktype==ID_KE) {
key= (Key *)G.sipo->from;
if(key==0) return;
kb= key->block.first;
while(kb) {
if(kb->flag & SELECT) break;
kb= kb->next;
}
if(kb && G.sipo->rowbut&1) {
add_numbut(0, NUM|FLO, "Pos:", -100, 100, &kb->pos, 0);
do_clever_numbuts("Active Key", 1, REDRAW);
sort_keys(key);
}
}
}
}
void filter_sampledata(float *data, int sfra, int efra)
{
float *da;

View File

@@ -278,6 +278,9 @@ void make_rvk_slider(uiBlock *block, Key *key, int keynum,
meshslidervals+keynum, min, max, 10, 2,
"Slider to control rvk");
uiButSetFunc(but, rvk_slider_func, key, keynums+keynum);
// no hilite, the winmatrix is not correct later on...
uiButSetFlag(but, UI_NO_HILITE);
}
static void default_key_ipo(Key *key)

View File

@@ -132,6 +132,7 @@ void do_action_buttons(unsigned short event)
G.v2d->cur.ymin=-SCROLLB;
if (!G.saction->action){ // here the mesh rvk?
G.v2d->cur.xmax=0;
G.v2d->cur.xmax=100;
}
else {
@@ -678,7 +679,7 @@ void action_buttons(void)
uiBlockSetEmboss(block, UI_EMBOSSX);
if (!get_action_mesh_key()) {
if (G.saction->action) {
/* NAME ETC */
ob=OBACT;
from = (ID*) ob;

View File

@@ -2519,6 +2519,13 @@ static int ui_do_block(uiBlock *block, uiEvent *uevent)
}
ui_set_ftf_font(block); // sets just a pointer in ftf lib... the button dont have ftf handles
// added this for panels in windows with buttons...
// maybe speed optimize should require test
if((block->flag & UI_BLOCK_LOOP)==0) {
bwin_load_winmatrix(block->win, block->winmat);
glLoadIdentity();
}
Mat4CpyMat4(UIwinmat, block->winmat);
uiPanelPush(block); // push matrix; no return without pop!

View File

@@ -811,6 +811,7 @@ int blenderqread(unsigned short event, short val)
if(curarea->spacetype==SPACE_VIEW3D); // is new panel, in view3d queue
else if(curarea->spacetype==SPACE_IPO); // is new panel, in ipo queue
else if(curarea->spacetype==SPACE_IMAGE); // is new panel, in ipo queue
else if(curarea->spacetype==SPACE_ACTION); // is new panel
else {
clever_numbuts();
return 0;

View File

@@ -1412,59 +1412,26 @@ void clever_numbuts(void)
char str[128];
if(curarea->spacetype==SPACE_VIEW3D) {
lim= 1000.0*MAX2(1.0, G.vd->grid);
if(G.obpose){
if (G.obpose->type == OB_ARMATURE) clever_numbuts_posearmature();
}
else if(G.obedit==0) {
ob= OBACT;
if(ob==0) return;
add_numbut(0, NUM|FLO, "LocX:", -lim, lim, ob->loc, 0);
add_numbut(1, NUM|FLO, "LocY:", -lim, lim, ob->loc+1, 0);
add_numbut(2, NUM|FLO, "LocZ:", -lim, lim, ob->loc+2, 0);
add_numbut(3, NUM|FLO, "RotX:", -10.0*lim, 10.0*lim, ob->rot, 0);
add_numbut(4, NUM|FLO, "RotY:", -10.0*lim, 10.0*lim, ob->rot+1, 0);
add_numbut(5, NUM|FLO, "RotZ:", -10.0*lim, 10.0*lim, ob->rot+2, 0);
add_numbut(6, NUM|FLO, "SizeX:", -lim, lim, ob->size, 0);
add_numbut(7, NUM|FLO, "SizeY:", -lim, lim, ob->size+1, 0);
add_numbut(8, NUM|FLO, "SizeZ:", -lim, lim, ob->size+2, 0);
sprintf(str, "Active Object: %s", ob->id.name+2);
do_clever_numbuts(str, 9, REDRAW);
}
else if(G.obedit->type==OB_MESH) clever_numbuts_mesh();
else if ELEM(G.obedit->type, OB_CURVE, OB_SURF) clever_numbuts_curve();
else if (G.obedit->type==OB_ARMATURE) clever_numbuts_armature();
}
else if(curarea->spacetype==SPACE_NLA){
clever_numbuts_nla();
}
else if(curarea->spacetype==SPACE_IPO) {
clever_numbuts_ipo();
}
else if(curarea->spacetype==SPACE_SEQ) {
clever_numbuts_seq();
}
else if(curarea->spacetype==SPACE_IMAGE) {
//clever_numbuts_sima();
}
else if(curarea->spacetype==SPACE_IMASEL) {
clever_numbuts_imasel();
}
else if(curarea->spacetype==SPACE_BUTS){
// clever_numbuts_buts();
}
else if(curarea->spacetype==SPACE_OOPS) {
clever_numbuts_oops();
}
else if(curarea->spacetype==SPACE_ACTION){
void stupid_damn_numbuts_action(void); // editaction.c
stupid_damn_numbuts_action();
}
else if(curarea->spacetype==SPACE_FILE) {
clever_numbuts_filesel();