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); }
Eigen::Affine3f roundMatrix(const Eigen::Affine3f& mat) { Eigen::Affine3f ret = mat; roundMatrix(ret); return ret; }
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; }