- wrapping failed with the cursor at the screen edge,
- changed numbuts behavior with continuous grab so dragging back after passing the button limit immediately adjusts the value
This commit is contained in:
parent
9d98b48925
commit
d11888b470
@ -228,20 +228,19 @@ inline void GHOST_Rect::unionPoint(GHOST_TInt32 x, GHOST_TInt32 y)
|
||||
if (y < m_t) m_t = y;
|
||||
if (y > m_b) m_b = y;
|
||||
}
|
||||
|
||||
#include <stdio.h>
|
||||
inline void GHOST_Rect::wrapPoint(GHOST_TInt32 &x, GHOST_TInt32 &y, GHOST_TInt32 ofs)
|
||||
{
|
||||
GHOST_TInt32 w= getWidth();
|
||||
GHOST_TInt32 h= getHeight();
|
||||
|
||||
/* highly unlikely but avoid eternal loop */
|
||||
if(w-ofs <= 0 || h-ofs <= 0)
|
||||
if(w-ofs*2 <= 0 || h-ofs*2 <= 0)
|
||||
return;
|
||||
|
||||
while(x-ofs < m_l) x+= w;
|
||||
while(y-ofs < m_t) y+= h;
|
||||
while(x+ofs > m_r) x-= w;
|
||||
while(y+ofs > m_b) y-= h;
|
||||
while(x-ofs < m_l) x+= w-(ofs*2);
|
||||
while(y-ofs < m_t) y+= h-(ofs*2);
|
||||
while(x+ofs > m_r) x-= w-(ofs*2);
|
||||
while(y+ofs > m_b) y-= h-(ofs*2);
|
||||
}
|
||||
|
||||
inline bool GHOST_Rect::isInside(GHOST_TInt32 x, GHOST_TInt32 y) const
|
||||
|
@ -399,9 +399,7 @@ GHOST_SystemX11::processEvent(XEvent *xe)
|
||||
|
||||
/* could also clamp to screen bounds
|
||||
* wrap with a window outside the view will fail atm */
|
||||
|
||||
bounds.wrapPoint(x_new, y_new, 1); /* offset of one incase blender is at screen bounds */
|
||||
|
||||
bounds.wrapPoint(x_new, y_new, 2); /* offset of one incase blender is at screen bounds */
|
||||
window->getCursorGrabAccum(x_accum, y_accum);
|
||||
|
||||
if(x_new != xme.x_root || y_new != xme.y_root) {
|
||||
|
@ -2056,9 +2056,21 @@ static int ui_numedit_but_NUM(uiBut *but, uiHandleButtonData *data, float fac, i
|
||||
/* Mouse location isn't screen clamped to the screen so use a linear mapping
|
||||
* 2px == 1-int, or 1px == 1-ClickStep */
|
||||
if(ui_is_but_float(but)) {
|
||||
tempf = data->startvalue + ((mx - data->dragstartx) * fac * 0.01*but->a1);
|
||||
fac *= 0.01*but->a1;
|
||||
tempf = data->startvalue + ((mx - data->dragstartx) * fac);
|
||||
tempf= ui_numedit_apply_snapf(tempf, softmin, softmax, softrange, snap);
|
||||
|
||||
#if 1 /* fake moving the click start, nicer for dragging back after passing the limit */
|
||||
if(tempf < softmin) {
|
||||
data->dragstartx -= (softmin-tempf) / fac;
|
||||
tempf= softmin;
|
||||
} else if (tempf > softmax) {
|
||||
data->dragstartx += (tempf-softmax) / fac;
|
||||
tempf= softmax;
|
||||
}
|
||||
#else
|
||||
CLAMP(tempf, softmin, softmax);
|
||||
#endif
|
||||
|
||||
if(tempf != data->value) {
|
||||
data->dragchange= 1;
|
||||
@ -2067,9 +2079,22 @@ static int ui_numedit_but_NUM(uiBut *but, uiHandleButtonData *data, float fac, i
|
||||
}
|
||||
}
|
||||
else {
|
||||
temp= data->startvalue + (mx - data->dragstartx)/2; /* simple 2px == 1 */
|
||||
fac = 0.5; /* simple 2px == 1 */
|
||||
|
||||
temp= data->startvalue + ((mx - data->dragstartx) * fac);
|
||||
temp= ui_numedit_apply_snap(temp, softmin, softmax, snap);
|
||||
|
||||
#if 1 /* fake moving the click start, nicer for dragging back after passing the limit */
|
||||
if(temp < softmin) {
|
||||
data->dragstartx -= (softmin-temp) / fac;
|
||||
temp= softmin;
|
||||
} else if (temp > softmax) {
|
||||
data->dragstartx += (temp-softmax) / fac;
|
||||
temp= softmax;
|
||||
}
|
||||
#else
|
||||
CLAMP(temp, softmin, softmax);
|
||||
#endif
|
||||
|
||||
if(temp != data->value) {
|
||||
data->dragchange= 1;
|
||||
@ -2077,6 +2102,8 @@ static int ui_numedit_but_NUM(uiBut *but, uiHandleButtonData *data, float fac, i
|
||||
changed= 1;
|
||||
}
|
||||
}
|
||||
|
||||
data->draglastx= mx;
|
||||
}
|
||||
else {
|
||||
/* Use a non-linear mapping of the mouse drag especially for large floats (normal behavior) */
|
||||
|
Loading…
Reference in New Issue
Block a user