forked from bartvdbraak/blender
Small fixes for UI;
- Add UV Sphere now aligns with view, as do all primitives - Small drawing error in edges between blender areas (black lines were 2 pixels too short) - Replaced the heuristics in opening sublevel menus, to be less frustrating. It now keeps sublevel open while mouse moves within the triangle defined by original mouse location (before moving) and the closest vertical edge of the new sub menu. Works nice for toolbox and pulldowns.
This commit is contained in:
parent
f3106212e8
commit
b5d9b1e72d
@ -501,7 +501,7 @@ void add_primitiveMesh(int type)
|
|||||||
cent[1]-= G.obedit->obmat[3][1];
|
cent[1]-= G.obedit->obmat[3][1];
|
||||||
cent[2]-= G.obedit->obmat[3][2];
|
cent[2]-= G.obedit->obmat[3][2];
|
||||||
|
|
||||||
if(type!= 11) {
|
if(type!= 31) {
|
||||||
Mat3CpyMat4(imat, G.vd->viewmat);
|
Mat3CpyMat4(imat, G.vd->viewmat);
|
||||||
Mat3MulVecfl(imat, cent);
|
Mat3MulVecfl(imat, cent);
|
||||||
Mat3MulMat3(cmat, imat, mat);
|
Mat3MulMat3(cmat, imat, mat);
|
||||||
@ -727,7 +727,6 @@ void add_primitiveMesh(int type)
|
|||||||
recalc_editnormals(); // does face centers too
|
recalc_editnormals(); // does face centers too
|
||||||
}
|
}
|
||||||
else if(type==11) { /* UVsphere */
|
else if(type==11) { /* UVsphere */
|
||||||
float tmat[3][3];
|
|
||||||
|
|
||||||
/* clear all flags */
|
/* clear all flags */
|
||||||
eve= em->verts.first;
|
eve= em->verts.first;
|
||||||
@ -740,10 +739,9 @@ void add_primitiveMesh(int type)
|
|||||||
phi= 0;
|
phi= 0;
|
||||||
phid/=2;
|
phid/=2;
|
||||||
for(a=0; a<=tot; a++) {
|
for(a=0; a<=tot; a++) {
|
||||||
vec[0]= cent[0]+dia*sin(phi);
|
vec[0]= dia*sin(phi);
|
||||||
vec[1]= cent[1];
|
vec[1]= 0.0;
|
||||||
vec[2]= cent[2]+dia*cos(phi);
|
vec[2]= dia*cos(phi);
|
||||||
Mat3MulVecfl(imat,vec);
|
|
||||||
eve= addvertlist(vec);
|
eve= addvertlist(vec);
|
||||||
eve->f= 1+2+4;
|
eve->f= 1+2+4;
|
||||||
if(a==0) v1= eve;
|
if(a==0) v1= eve;
|
||||||
@ -757,14 +755,23 @@ void add_primitiveMesh(int type)
|
|||||||
q[3]= sin(phi);
|
q[3]= sin(phi);
|
||||||
q[1]=q[2]= 0;
|
q[1]=q[2]= 0;
|
||||||
QuatToMat3(q, cmat);
|
QuatToMat3(q, cmat);
|
||||||
Mat3MulMat3(tmat, cmat, mat);
|
|
||||||
Mat3MulMat3(cmat, imat, tmat);
|
|
||||||
|
|
||||||
for(a=0; a<seg; a++) {
|
for(a=0; a<seg; a++) {
|
||||||
extrudeflag_vert(2);
|
extrudeflag_vert(2);
|
||||||
rotateflag(2, v1->co, cmat);
|
rotateflag(2, v1->co, cmat);
|
||||||
}
|
}
|
||||||
|
|
||||||
removedoublesflag(4, 0.0001);
|
removedoublesflag(4, 0.0001);
|
||||||
|
|
||||||
|
/* and now do imat */
|
||||||
|
eve= em->verts.first;
|
||||||
|
while(eve) {
|
||||||
|
if(eve->f & SELECT) {
|
||||||
|
VecAddf(eve->co,eve->co,cent);
|
||||||
|
Mat3MulVecfl(imat,eve->co);
|
||||||
|
}
|
||||||
|
eve= eve->next;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(type==12) { /* Icosphere */
|
else if(type==12) { /* Icosphere */
|
||||||
EditVert *eva[12];
|
EditVert *eva[12];
|
||||||
|
@ -3036,11 +3036,11 @@ void drawscredge_area(ScrArea *sa)
|
|||||||
else sdrawline(x1, y1, x1, y2);
|
else sdrawline(x1, y1, x1, y2);
|
||||||
}
|
}
|
||||||
/* top border area */
|
/* top border area */
|
||||||
if(sa->headertype==HEADERTOP) sdrawline(x1+SCR_ROUND, y2, x2-SCR_ROUND+1, y2);
|
if(sa->headertype==HEADERTOP) sdrawline(x1+SCR_ROUND-3, y2, x2-SCR_ROUND+3, y2);
|
||||||
else sdrawline(x1, y2, x2, y2);
|
else sdrawline(x1, y2, x2, y2);
|
||||||
|
|
||||||
/* bottom border area */
|
/* bottom border area */
|
||||||
if(sa->headertype==HEADERDOWN) sdrawline(x1+SCR_ROUND, y1, x2-SCR_ROUND+1, y1);
|
if(sa->headertype==HEADERDOWN) sdrawline(x1+SCR_ROUND-3, y1, x2-SCR_ROUND+3, y1);
|
||||||
else sdrawline(x1, y1, x2, y1);
|
else sdrawline(x1, y1, x2, y1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2975,18 +2975,16 @@ static void ui_do_active_linklines(uiBlock *block, short *mval)
|
|||||||
|
|
||||||
|
|
||||||
/* only to be used to prevent an 'outside' event when using nested pulldowns */
|
/* only to be used to prevent an 'outside' event when using nested pulldowns */
|
||||||
/* four checks:
|
/* only one checks:
|
||||||
- while mouse moves in good x direction
|
- while mouse moves in triangular area defined old mouse position and left/right side of new menu
|
||||||
- while mouse motion x is bigger than y motion
|
|
||||||
- while distance to center block diminishes
|
|
||||||
- only for 1 second
|
- only for 1 second
|
||||||
|
|
||||||
return 0: check outside
|
return 0: check outside
|
||||||
*/
|
*/
|
||||||
static int ui_mouse_motion_towards_block(uiBlock *block, uiEvent *uevent)
|
static int ui_mouse_motion_towards_block(uiBlock *block, uiEvent *uevent)
|
||||||
{
|
{
|
||||||
short mvalo[2], dx, dy, domx, domy, x1, y1;
|
short mvalo[2], dx, dy, domx, domy;
|
||||||
int disto, dist, counter=0;
|
int counter=0;
|
||||||
|
|
||||||
if((block->direction & UI_TOP) || (block->direction & UI_DOWN)) return 0;
|
if((block->direction & UI_TOP) || (block->direction & UI_DOWN)) return 0;
|
||||||
if(uevent->event!= MOUSEX && uevent->event!= MOUSEY) return 0;
|
if(uevent->event!= MOUSEX && uevent->event!= MOUSEY) return 0;
|
||||||
@ -2997,9 +2995,6 @@ static int ui_mouse_motion_towards_block(uiBlock *block, uiEvent *uevent)
|
|||||||
/* we need some accuracy */
|
/* we need some accuracy */
|
||||||
if( abs(domx)<4 ) return 0;
|
if( abs(domx)<4 ) return 0;
|
||||||
|
|
||||||
/* calculte old dist */
|
|
||||||
disto= domx*domx + domy*domy;
|
|
||||||
|
|
||||||
uiGetMouse(mywinget(), mvalo);
|
uiGetMouse(mywinget(), mvalo);
|
||||||
|
|
||||||
while(TRUE) {
|
while(TRUE) {
|
||||||
@ -3017,35 +3012,40 @@ static int ui_mouse_motion_towards_block(uiBlock *block, uiEvent *uevent)
|
|||||||
dy= uevent->mval[1] - mvalo[1];
|
dy= uevent->mval[1] - mvalo[1];
|
||||||
|
|
||||||
if( abs(dx)+abs(dy)>4 ) { // threshold
|
if( abs(dx)+abs(dy)>4 ) { // threshold
|
||||||
if( abs(dy) > abs(dx) ) {
|
/* menu to right */
|
||||||
//printf("left because y>x direction\n");
|
if(domx>0) {
|
||||||
return 0;
|
int fac= (uevent->mval[0] - mvalo[0])*(mvalo[1] - (short)(block->maxy +20)) + (uevent->mval[1] - mvalo[1])*(-mvalo[0] + (short)block->minx);
|
||||||
|
if( (fac>0)) {
|
||||||
|
// printf("Left outside 1, Fac %d\n", fac);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
fac= (uevent->mval[0] - mvalo[0])*(mvalo[1] - (short)(block->miny-20)) + (uevent->mval[1] - mvalo[1])*(-mvalo[0] + (short)block->minx);
|
||||||
|
if( (fac<0)) {
|
||||||
|
//printf("Left outside 2, Fac %d\n", fac);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( dx>0 && domx>0);
|
|
||||||
else if(dx<0 && domx<0);
|
|
||||||
else {
|
else {
|
||||||
//printf("left because dominant direction\n");
|
int fac= (uevent->mval[0] - mvalo[0])*(mvalo[1] - (short)(block->maxy+20)) + (uevent->mval[1] - mvalo[1])*(-mvalo[0] + (short)block->maxx);
|
||||||
return 0;
|
if( (fac<0)) {
|
||||||
|
// printf("Left outside 1, Fac %d\n", fac);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
fac= (uevent->mval[0] - mvalo[0])*(mvalo[1] - (short)(block->miny-20)) + (uevent->mval[1] - mvalo[1])*(-mvalo[0] + (short)block->maxx);
|
||||||
|
if( (fac>0)) {
|
||||||
|
// printf("Left outside 2, Fac %d\n", fac);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check dist */
|
|
||||||
x1= ( -uevent->mval[0] + (block->maxx+block->minx)/2 );
|
|
||||||
y1= ( -uevent->mval[1] + (block->maxy+block->miny)/2 );
|
|
||||||
dist= x1*x1 + y1*y1;
|
|
||||||
if(dist > disto) {
|
|
||||||
//printf("left because distance\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else disto= dist;
|
|
||||||
|
|
||||||
/* idle for this poor code */
|
/* idle for this poor code */
|
||||||
PIL_sleep_ms(10);
|
PIL_sleep_ms(10);
|
||||||
counter++;
|
counter++;
|
||||||
if(counter > 100) {
|
if(counter > 100) {
|
||||||
// printf("left because of timer (1 sec)\n");
|
//printf("left because of timer (1 sec)\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -364,7 +364,7 @@ void uiRoundBoxEmboss(float minx, float miny, float maxx, float maxy, float rad,
|
|||||||
gl_round_box_topshade(minx+1, miny+1, maxx-1, maxy-1, rad);
|
gl_round_box_topshade(minx+1, miny+1, maxx-1, maxy-1, rad);
|
||||||
|
|
||||||
/* total outline */
|
/* total outline */
|
||||||
if(roundboxtype & UI_RB_ALPHA) glColor4ub(0,0,0, 128); else glColor4ub(0,0,0, 255);
|
if(roundboxtype & UI_RB_ALPHA) glColor4ub(0,0,0, 128); else glColor4ub(0,0,0, 200);
|
||||||
gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
|
gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
|
||||||
|
|
||||||
glDisable( GL_LINE_SMOOTH );
|
glDisable( GL_LINE_SMOOTH );
|
||||||
|
Loading…
Reference in New Issue
Block a user