bool nuiWindow::MouseClicked (nuiSize X, nuiSize Y, nglMouseInfo::Flags Button) { // OUT("MouseClicked %d - %d\n",X,Y); if (Button == nglMouseInfo::ButtonLeft) { LocalToLocal(GetParent(), X,Y); mClickX = X; mClickY = Y; nuiRect _Rect = GetRect(); _Rect.Transform(GetMatrix()); nuiTheme* pTheme = GetTheme(); NGL_ASSERT(pTheme); mClickPos = pTheme->GetWindowPart(_Rect, X, Y, GetFlags(), false); pTheme->Release(); nuiRect wRect = GetRect(); nuiRect woriginal = wRect; switch (mClickPos) { case nuiCenter: if (mNoMove) { mMoving = eNoMove; return true; } break; case nuiTopLeft: case nuiBottomLeft: case nuiLeft: case nuiTopRight: case nuiBottomRight: case nuiRight: case nuiTop: case nuiBottom: if (mNoResize) mMoving = eNoMove; break; default: return true; break; } mMoving = ePreMove; SetAlpha(0.5f); Invalidate(); Grab(); return true; } return true; }
void DisAggregateSweep(const int ibox) { // Function DisAggregateSweep() performs a top-down // sweep. Afterwards, each target box of the subtree rooted at ibox // has received the far-field potential result. ProcessList4(ibox); if (g_tboxes[ibox].nchild == 0) { LocalToTarget(ibox); } else { ExponentialToLocal(ibox); LocalToLocal(ibox); cilk_for (int i = 0; i < 8; i++) { int child = g_tboxes[ibox].child[i]; if (child) DisAggregateSweep(child); } } }
bool nuiWindow::MouseUnclicked (nuiSize X, nuiSize Y, nglMouseInfo::Flags Button) { // OUT("MouseUnclicked %d - %d\n",X,Y); if (Button == nglMouseInfo::ButtonLeft && mMoving != eNoMove) { LocalToLocal(GetParent(), X, Y); mClickX = X; mClickY = Y; mMoving = eNoMove; Invalidate(); SetAlpha(1.0f); mMoving = eNoMove; Ungrab(); return true; } return true; }
bool nuiScrollView::SetChildrenRect(nuiSize x, nuiSize y, nuiSize xx, nuiSize yy, nuiSize scrollv, nuiSize scrollh) { #ifdef _DEBUG_LAYOUT if (GetDebug()) { NGL_OUT(_T("\tnuiScrollView::SetChildrenRect: (%f, %f) (%f, %f) - (%f, %f)\n"), x, y, xx, yy, scrollv, scrollh); } #endif nuiRect VisibleRect = GetRect().Size(); VisibleRect.Right() -= scrollv; VisibleRect.Bottom() -= scrollh; nuiRange& hrange = mpHorizontal->GetRange(); nuiRange& vrange = mpVertical->GetRange(); nuiSize XOffset = hrange.GetValue(); nuiSize YOffset = vrange.GetValue(); if (mSmoothScrolling) { if (mTimerOn) { if (!mHThumbPressed) XOffset = mXOffset; if (!mVThumbPressed) YOffset = mYOffset; } } XOffset = (nuiSize)ToNearest(XOffset); YOffset = (nuiSize)ToNearest(YOffset); if (!mFillChildren) { IteratorPtr pIt; for (pIt = GetFirstChild(); pIt && pIt->IsValid(); GetNextChild(pIt)) { nuiWidgetPtr pItem = pIt->GetWidget(); if (pItem != mpVertical && pItem != mpHorizontal) { nuiRect rect = pItem->GetIdealRect(); rect.Move(-XOffset, -YOffset); float w = rect.GetWidth(); float h = rect.GetHeight(); if (mForceNoHorizontal) w = xx; if (mForceNoVertical) h = yy; rect.SetSize(w, h); #ifdef _DEBUG_LAYOUT if (GetDebug()) { NGL_OUT(_T("\tnuiScrollView::SetChildrenRect: SetLayout(%s)\n"), rect.GetValue().GetChars()); } #endif pItem->SetLayout(rect); rect = VisibleRect; LocalToLocal(pItem, rect); //pItem->SetVisibleRect(rect); } } delete pIt; } else { if (x < xx - scrollv) x = xx - scrollv; if (y < yy - scrollh) y = yy - scrollh; IteratorPtr pIt; for (pIt = GetFirstChild(); pIt && pIt->IsValid(); GetNextChild(pIt)) { nuiWidgetPtr pItem = pIt->GetWidget(); if (pItem != mpVertical && pItem != mpHorizontal) { float w = x, h = y; if (mForceNoHorizontal) { w = xx - scrollv; } if (mForceNoVertical) { h = yy - scrollh; } nuiRect rect(-XOffset, -YOffset, w, h); #ifdef _DEBUG_LAYOUT if (GetDebug()) { NGL_OUT(_T("\tnuiScrollView::SetChildrenRect: SetLayout(%s)\n"), rect.GetValue().GetChars()); } #endif pItem->SetLayout(rect); rect = VisibleRect; LocalToLocal(pItem, rect); pItem->SetVisibleRect(rect); } } delete pIt; } return true; }
bool nuiWindow::MouseMoved(nuiSize X, nuiSize Y) { nuiSize dx, dy; LocalToLocal(GetParent(), X, Y); dx = X - mClickX; dy = Y - mClickY; if (mMoving == ePreMove) { if (abs((int)dx) > WINDOW_MINIMOVE || abs((int)dy) > WINDOW_MINIMOVE) { mMoving = eMove; SetAlpha(0.5f); } else return true; } mClickX = X; mClickY = Y; if (mMoving == eMove) { nuiRect wRect = GetIdealRect(); wRect.RoundToNearest(); nuiRect woriginal = wRect; switch (mClickPos) { case nuiCenter: { wRect.Move(dx, dy); } break; case nuiTopLeft: { wRect.mTop += dy; wRect.mLeft += dx; if (wRect.GetHeight() < mMinimumHeight) wRect.mTop += wRect.GetHeight() - mMinimumHeight; if (wRect.GetWidth() < mMinimumWidth) wRect.mLeft += wRect.GetWidth() - mMinimumWidth; } break; case nuiBottomLeft: { wRect.mBottom += dy; wRect.mLeft += dx; if (wRect.GetHeight() < mMinimumHeight) wRect.SetSize(wRect.GetWidth(), mMinimumHeight); if (wRect.GetWidth() < mMinimumWidth) wRect.mLeft += wRect.GetWidth() - mMinimumWidth; } break; case nuiLeft: { wRect.mLeft += dx; if (wRect.GetWidth() < mMinimumWidth) wRect.mLeft += wRect.GetWidth() - mMinimumWidth; } break; case nuiTopRight: { wRect.mTop += dy; wRect.mRight += dx; if (wRect.GetHeight() < mMinimumHeight) wRect.mTop += wRect.GetHeight() - mMinimumHeight; if (wRect.GetWidth() < mMinimumWidth) wRect.SetSize(mMinimumWidth, wRect.GetHeight()); } break; case nuiBottomRight: { wRect.mBottom += dy; wRect.mRight += dx; if (wRect.GetWidth() < mMinimumWidth) wRect.SetSize(mMinimumWidth, wRect.GetHeight()); if (wRect.GetHeight() < mMinimumHeight) wRect.SetSize(wRect.GetWidth(), mMinimumHeight); } break; case nuiRight: { wRect.mRight += dx; if (wRect.GetWidth() < mMinimumWidth) wRect.SetSize(mMinimumWidth, wRect.GetHeight()); } break; case nuiTop: { wRect.mTop += dy; if (wRect.GetHeight() < mMinimumHeight) wRect.mTop += wRect.GetHeight() - mMinimumHeight; } break; case nuiBottom: { wRect.mBottom += dy; if (wRect.GetHeight() < mMinimumHeight) wRect.SetSize(wRect.GetWidth(), mMinimumHeight); } break; default: return true; break; } wRect.RoundToNearest(); if (mpManager) mpManager->ValidateWindowRect(wRect); if (GetRect().GetWidth() == wRect.GetWidth() && GetRect().GetHeight() == wRect.GetHeight()) SetUserPos(wRect.mLeft, wRect.mTop); else SetUserRect(wRect); return true; } else { if (IsInsideFromParent(X,Y)) { nuiRect _Rect = GetRect(); _Rect.Transform(GetMatrix()); nuiTheme* pTheme = GetTheme(); NGL_ASSERT(pTheme); mClickPos= pTheme->GetWindowPart(_Rect, X, Y, GetFlags(), false); pTheme->Release(); SetMouseCursor(eCursorDoNotSet); switch (mClickPos) { case nuiCenter: if (!mNoMove) SetMouseCursor(eCursorHand); break; case nuiTopLeft: if (!mNoResize) SetMouseCursor(eCursorResizeNW); break; case nuiBottomLeft: if (!mNoResize) SetMouseCursor(eCursorResizeSW); break; case nuiLeft: if (!mNoResize) SetMouseCursor(eCursorResizeW); break; case nuiTopRight: if (!mNoResize) SetMouseCursor(eCursorResizeNE); break; case nuiBottomRight: if (!mNoResize) SetMouseCursor(eCursorResizeSE); break; case nuiRight: if (!mNoResize) SetMouseCursor(eCursorResizeE); break; case nuiTop: if (!mNoResize) SetMouseCursor(eCursorResizeN); break; case nuiBottom: if (!mNoResize) SetMouseCursor(eCursorResizeS); break; default: break; } } } return true; // Always block mouse event that are not from this window }