void TextComponent::render(const Eigen::Affine3f& parentTrans)
{
	Eigen::Affine3f trans = parentTrans * getTransform();

	/*Eigen::Vector3f dim(mSize.x(), mSize.y(), 0);
	dim = trans * dim - trans.translation();
	Renderer::pushClipRect(Eigen::Vector2i((int)trans.translation().x(), (int)trans.translation().y()), 
		Eigen::Vector2i((int)(dim.x() + 0.5f), (int)(dim.y() + 0.5f)));
		*/

	if(mTextCache)
	{
		const Eigen::Vector2f& textSize = mTextCache->metrics.size;
		Eigen::Vector3f off(0, (getSize().y() - textSize.y()) / 2.0f, 0);

		if(Settings::getInstance()->getBool("DebugText"))
		{
			// draw the "textbox" area, what we are aligned within
			Renderer::setMatrix(trans);
			Renderer::drawRect(0.f, 0.f, mSize.x(), mSize.y(), 0xFF000033);
		}
		
		trans.translate(off);
		trans = roundMatrix(trans);
		Renderer::setMatrix(trans);

		// draw the text area, where the text actually is going
		if(Settings::getInstance()->getBool("DebugText"))
		{
			switch(mAlignment)
			{
			case ALIGN_LEFT:
				Renderer::drawRect(0.0f, 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033);
				break;
			case ALIGN_CENTER:
				Renderer::drawRect((mSize.x() - mTextCache->metrics.size.x()) / 2.0f, 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033);
				break;
			case ALIGN_RIGHT:
				Renderer::drawRect(mSize.x() - mTextCache->metrics.size.x(), 0.0f, mTextCache->metrics.size.x(), mTextCache->metrics.size.y(), 0x00000033);
				break;
			}
		}

		mFont->renderTextCache(mTextCache.get());
	}

	//Renderer::popClipRect();
}
void TextEditComponent::render(const Eigen::Affine3f& parentTrans)
{
	Eigen::Affine3f trans = getTransform() * parentTrans;
	renderChildren(trans);

	// text + cursor rendering
	// offset into our "text area" (padding)
	trans.translation() += Eigen::Vector3f(getTextAreaPos().x(), getTextAreaPos().y(), 0);

	Eigen::Vector2i clipPos((int)trans.translation().x(), (int)trans.translation().y());
	Eigen::Vector3f dimScaled = trans * Eigen::Vector3f(getTextAreaSize().x(), getTextAreaSize().y(), 0); // use "text area" size for clipping
	Eigen::Vector2i clipDim((int)dimScaled.x() - trans.translation().x(), (int)dimScaled.y() - trans.translation().y());
	Renderer::pushClipRect(clipPos, clipDim);

	trans.translate(Eigen::Vector3f(-mScrollOffset.x(), -mScrollOffset.y(), 0));
	trans = roundMatrix(trans);

	Renderer::setMatrix(trans);

	if(mTextCache)
	{
		mFont->renderTextCache(mTextCache.get());
	}

	// pop the clip early to allow the cursor to be drawn outside of the "text area"
	Renderer::popClipRect();

	// draw cursor
	if(mEditing)
	{
		Eigen::Vector2f cursorPos;
		if(isMultiline())
		{
			cursorPos = mFont->getWrappedTextCursorOffset(mText, getTextAreaSize().x(), mCursor);
		}else{
			cursorPos = mFont->sizeText(mText.substr(0, mCursor));
			cursorPos[1] = 0;
		}

		float cursorHeight = mFont->getHeight() * 0.8f;
		Renderer::drawRect(cursorPos.x(), cursorPos.y() + (mFont->getHeight() - cursorHeight) / 2, 2.0f, cursorHeight, 0x000000FF);
	}
}
void ButtonComponent::render(const Eigen::Affine3f& parentTrans)
{
	Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform());
	
	mBox.render(trans);

	if(mTextCache)
	{
		Eigen::Vector3f centerOffset((mSize.x() - mTextCache->metrics.size.x()) / 2, (mSize.y() - mTextCache->metrics.size.y()) / 2, 0);
		centerOffset = roundVector(centerOffset);
		trans = trans.translate(centerOffset);

		Renderer::setMatrix(trans);
		mTextCache->setColor(getCurTextColor());
		mFont->renderTextCache(mTextCache.get());
		trans = trans.translate(-centerOffset);
	}

	renderChildren(trans);
}
void SliderComponent::render(const Eigen::Affine3f& parentTrans)
{
	Eigen::Affine3f trans = roundMatrix(parentTrans * getTransform());
	Renderer::setMatrix(trans);

	// render suffix
	if(mValueCache)
		mFont->renderTextCache(mValueCache.get());

	float width = mSize.x() - mKnob.getSize().x() - (mValueCache ? mValueCache->metrics.size.x() + 4 : 0);

	//render line
	const float lineWidth = 2;
	Renderer::drawRect(mKnob.getSize().x() / 2, mSize.y() / 2 - lineWidth / 2, width, lineWidth, 0x777777FF);

	//render knob
	mKnob.render(trans);
	
	GuiComponent::renderChildren(trans);
}
Esempio n. 5
0
Eigen::Affine3f roundMatrix(const Eigen::Affine3f& mat)
{
	Eigen::Affine3f ret = mat;
	roundMatrix(ret);
	return ret;
}
Esempio n. 6
0
Matrix callFunc(const char *funcName, ASTNode *argListNode){
    /* sort out args */
    ASTNode *argNode[10];
    Matrix result;
	Number calcresult;
	MatList *p;
    if (strcmp(funcName, "eye")==0) { /* generate eye matrix */
        argNode[0] = getNthArgFromArgList(argListNode,1);
        result =  createEyeMatrix((int)readOneElementOfMatrix(argNode[0]->mat,1,1));
    }
	else if(strcmp(funcName, "rand")==0){/*generate rand matrix*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		argNode[1] = getNthArgFromArgList(argListNode,2);
		result = createRandMatrix((int)readOneElementOfMatrix(argNode[0]->mat,1,1),readOneElementOfMatrix(argNode[1]->mat,1,1));
	}
	else if(strcmp(funcName, "zeros")==0){/*generate rand matrix*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		argNode[1] = getNthArgFromArgList(argListNode,2);
		result = createZeroMatrix((int)readOneElementOfMatrix(argNode[0]->mat,1,1),readOneElementOfMatrix(argNode[1]->mat,1,1));
	}
	else if(strcmp(funcName, "max")==0){/*calculate maximum of matrix*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		calcresult = maxMatrix(argNode[0]->mat);
		result = createEyeMatrix(1);
		changeOneElementOfMatrix(result, 1, 1, calcresult);
	}
	else if(strcmp(funcName, "min")==0){/*calculate minimum of matrix*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		calcresult = minMatrix(argNode[0]->mat);
		result = createEyeMatrix(1);
		changeOneElementOfMatrix(result, 1, 1, calcresult);
	}
	else if(strcmp(funcName, "sum")==0){/*calculate sum of matrix*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		calcresult = sumMatrix(argNode[0]->mat);
		result = createEyeMatrix(1);
		changeOneElementOfMatrix(result, 1, 1, calcresult);
	}
	else if(strcmp(funcName, "round")==0){/*calculate round of matrix*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		result = roundMatrix(argNode[0]->mat);
	}
	else if(strcmp(funcName, "upper")==0){/*calculate upper of matrix*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		result = upperMatrix(argNode[0]->mat);
	}
	else if(strcmp(funcName, "lower")==0){/*calculate upper of matrix*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		result = lowerMatrix(argNode[0]->mat);
	}
	else if(strcmp(funcName, "det")==0){/*calculate DeterminantCalc*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		calcresult = DeterminantCalc(argNode[0]->mat.row, argNode[0]->mat);
		result = createEyeMatrix(1);
		changeOneElementOfMatrix(result, 1, 1, calcresult);
	}

	else if(strcmp(funcName, "turn")==0){/*calculate turn*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		result = turnMatrix(argNode[0]->mat);		
	}
	else if(strcmp(funcName, "power")==0){/*calculate power*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		argNode[1] = getNthArgFromArgList(argListNode,2);
		result = powerMatrix(argNode[0]->mat,(int)readOneElementOfMatrix(argNode[1]->mat,1,1));		
	}
	else if(strcmp(funcName, "dot")==0){/*calculate dot*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		argNode[1] = getNthArgFromArgList(argListNode,2);
		result = dotMatrix(argNode[0]->mat,argNode[1]->mat);		
	}
	else if(strcmp(funcName, "norm")==0){/*calculate norm*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		result = normMatrix(argNode[0]->mat);		
	}
	else if(strcmp(funcName, "angle")==0){/*calculate norm*/
		argNode[0] = getNthArgFromArgList(argListNode,1);
		argNode[1] = getNthArgFromArgList(argListNode,2);
		result = angleMatrix(argNode[0]->mat,argNode[1]->mat);	
	}

	else{
		if (get_submatrix == 1){
			p = checkMatName(funcName);
			argNode[0] = getNthArgFromArgList(argListNode,1);
			argNode[1] = getNthArgFromArgList(argListNode,2);
			result = createSubMatrix(p->mat,argNode[0]->mat,argNode[1]->mat);
			get_submatrix = 0;
		}
		else{
			p = checkMatName(funcName);
			argNode[0] = getNthArgFromArgList(argListNode,1);
			argNode[1] = getNthArgFromArgList(argListNode,2);
			calcresult = readOneElementOfMatrix(p->mat,(int)readOneElementOfMatrix(argNode[0]->mat,1,1),readOneElementOfMatrix(argNode[1]->mat,1,1));
			result = createEyeMatrix(1);
			changeOneElementOfMatrix(result, 1, 1, calcresult);
		}
	}
	
	

    return result;
}