Ejemplo n.º 1
0
void GxDock::myClampFloatPos(GxVec2i view)
{
	int w = myFloatRect.w;
	int h = myFloatRect.h;

	myFloatRect.x = GxClamp(myFloatRect.x, 0, GxMax(0, view.x-24));
	myFloatRect.y = GxClamp(myFloatRect.y, 0, GxMax(0, view.y-24));
}
Ejemplo n.º 2
0
void GxFreeLayout::Arrange(GxRecti rect)
{
	int dx = rect.x + myMargin.l;
	int dy = rect.y + myMargin.t;

	for(int i=0; i<myItems.Size(); ++i)
	{
		GxWidget* w = myItems[i].widget;

		GxSizePolicyResult pol(w);
		GxVec2i pos = myItems[i].pos;

		GxRecti r(dx + pos.x, dy + pos.y, 0, 0);
		r.w = GxClamp(pol.hint.x, pol.min.x, pol.max.x);
		r.h = GxClamp(pol.hint.y, pol.min.y, pol.max.y);

		w->SetRect(r);
	}
}
Ejemplo n.º 3
0
void GxSliderAbstract::myUpdateValue(double value, bool emitEvent)
{
	bool snap = myFlags[F_SNAPPING];
	double min = GxMin(myBegin, myEnd);
	double max = GxMax(myBegin, myEnd);
	if(snap && abs(myTickInterval) >= 0.001 && value > min && value < max)
	{
		value -= myBegin;
		value = floor(value/myTickInterval + 0.5) * myTickInterval;
		value += myBegin;
	}
	value = GxClamp(value, min, max);

	if(myValue != value && emitEvent)
	{
		EmitEvent(eChanged(), value);
		myFlags.Set(F_CHANGED);
	}

	myValue = value;
	if(myVarPtr) *myVarPtr = value;
}
Ejemplo n.º 4
0
void GxDockArea::Tick(float dt)
{
	GxVec2i mpos = GxInput::Get()->GetMousePos();
	mpos.x = GxClamp(mpos.x, 0, myRect.w);
	mpos.y = GxClamp(mpos.y, 0, myRect.h);

	GxVec2i resizeDir = GxVec2i(0, 0);
	bool draggingAction = false;

	if(myHoverDock)
	{
		GxDock::Item item = myHoverDock->myGetItemAt(mpos.x, mpos.y);

		if(item == GxDock::I_BAR)
			draggingAction = true;

		if(item == GxDock::I_FRAME)
			resizeDir = myHoverDock->myGetResizeDir(mpos.x, mpos.y);
	}

	// Handle floating dock dragging action.
	if(myActionType == FA_DRAG)
	{
		draggingAction = true;

		GxRecti r = myActionDims;
		r.x += mpos.x - myActionPos.x;
		r.y += mpos.y - myActionPos.y;

		myFocusDock->myFloatRect = r;
		myFocusDock->myClampFloatSize(GxVec2i());
		myFocusDock->myClampFloatPos(GxVec2i(myRect.w, myRect.h));

		myDragHl = GxMin(1.f, myDragHl + dt * 2);
	}
	else 
	{
		myDragHl = GxMax(0.f, myDragHl - dt * 4);
	}

	// Handle floating dock resize action.
	if(myActionType == FA_RESIZE)
	{
		resizeDir = myResizeDir;
		GxRecti r = myActionDims;
		GxVec2i d = mpos - myActionPos;

		if(myResizeDir.x < 0) r.Expand(-d.x, 0, 0, 0);
		if(myResizeDir.y < 0) r.Expand(0, -d.y, 0, 0);
		if(myResizeDir.x > 0) r.Expand(0, 0, +d.x, 0);
		if(myResizeDir.y > 0) r.Expand(0, 0, 0, +d.y);

		myFocusDock->myFloatRect = r;
		myFocusDock->myClampFloatSize(myResizeDir);
		myFocusDock->myClampFloatPos(GxVec2i(myRect.w, myRect.h));
	}

	// Change the mouse cursor image when resizing.
	if(resizeDir.x != 0 || resizeDir.y != 0)
	{
		GxVec2i d = resizeDir;
		GxCursorImage c = GX_CI_DRAG;

		if(d.x != 0 && d.y == 0) c = GX_CI_SIZE_WE;
		if(d.x == 0 && d.y != 0) c = GX_CI_SIZE_NS;
		if(d.x <  0 && d.y <  0) c = GX_CI_SIZE_NWSE;
		if(d.x >  0 && d.y >  0) c = GX_CI_SIZE_NWSE;
		if(d.x <  0 && d.y >  0) c = GX_CI_SIZE_NESW;
		if(d.x >  0 && d.y <  0) c = GX_CI_SIZE_NESW;

		GetContext()->SetCursor(c);
	}

	// Change the mouse cursor image when dragging.
	if(draggingAction)
	{
		GetContext()->SetCursor(GX_CI_DRAG);
	}

	// Tick the dock bars.
	for(int i=0; i<binCount; ++i)
		if(myBins[i])
			myBins[i]->Tick(dt);

	// Tick the floating docks.
	for(int i=0; i<myDocks.Size(); ++i)
		if(myDocks[i]->IsFloating() && !myDocks[i]->IsHidden())
			myDocks[i]->Tick(dt);
}