void drawCheckBox(struct NVGcontext* vg, const char* text, float x, float y, float w, float h) { struct NVGpaint bg; char icon[8]; NVG_NOTUSED(w); nvgFontSize(vg, 18.0f); nvgFontFace(vg, "sans"); nvgFillColor(vg, nvgRGBA(255,255,255,160) ); nvgTextAlign(vg,NVG_ALIGN_LEFT|NVG_ALIGN_MIDDLE); nvgText(vg, x+28,y+h*0.5f,text, NULL); bg = nvgBoxGradient(vg, x+1,y+(int)(h*0.5f)-9+1, 18,18, 3,3, nvgRGBA(0,0,0,32), nvgRGBA(0,0,0,92) ); nvgBeginPath(vg); nvgRoundedRect(vg, x+1,y+(int)(h*0.5f)-9, 18,18, 3); nvgFillPaint(vg, bg); nvgFill(vg); nvgFontSize(vg, 40); nvgFontFace(vg, "icons"); nvgFillColor(vg, nvgRGBA(255,255,255,128) ); nvgTextAlign(vg,NVG_ALIGN_CENTER|NVG_ALIGN_MIDDLE); nvgText(vg, x+9+2, y+h*0.5f, cpToUTF8(ICON_CHECK,icon), NULL); }
void CheckBox::draw(NVGcontext *ctx) { Widget::draw(ctx); nvgFontSize(ctx, fontSize()); nvgFontFace(ctx, "sans"); nvgFillColor(ctx, mEnabled ? mTheme->mTextColor : mTheme->mDisabledTextColor); nvgTextAlign(ctx, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE); nvgText(ctx, mPos.x + 1.2f * mSize.y + 5, mPos.y + mSize.y * 0.5f, mCaption.c_str(), nullptr); NVGpaint bg = nvgBoxGradient(ctx, mPos.x + 1.5f, mPos.y + 1.5f, mSize.y - 2.0f, mSize.y - 2.0f, 3, 3, mPushed ? Color(0, 100) : Color(0, 32), Color(0, 0, 0, 180)); nvgBeginPath(ctx); nvgRoundedRect(ctx, mPos.x + 1.0f, mPos.y + 1.0f, mSize.y - 2.0f, mSize.y - 2.0f, 3); nvgFillPaint(ctx, bg); nvgFill(ctx); if (mChecked) { nvgFontSize(ctx, 1.8 * mSize.y); nvgFontFace(ctx, "icons"); nvgFillColor(ctx, mEnabled ? mTheme->mIconColor : mTheme->mDisabledTextColor); nvgTextAlign(ctx, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE); nvgText(ctx, mPos.x + mSize.y * 0.5f + 1, mPos.y + mSize.y * 0.5f, utf8(ENTYPO_ICON_CHECK).data(), nullptr); } }
void drawDropDown(struct NVGcontext* vg, const char* text, float x, float y, float w, float h) { struct NVGpaint bg; char icon[8]; float cornerRadius = 4.0f; bg = nvgLinearGradient(vg, x,y,x,y+h, nvgRGBA(255,255,255,16), nvgRGBA(0,0,0,16) ); nvgBeginPath(vg); nvgRoundedRect(vg, x+1,y+1, w-2,h-2, cornerRadius-1); nvgFillPaint(vg, bg); nvgFill(vg); nvgBeginPath(vg); nvgRoundedRect(vg, x+0.5f,y+0.5f, w-1,h-1, cornerRadius-0.5f); nvgStrokeColor(vg, nvgRGBA(0,0,0,48) ); nvgStroke(vg); nvgFontSize(vg, 20.0f); nvgFontFace(vg, "sans"); nvgFillColor(vg, nvgRGBA(255,255,255,160) ); nvgTextAlign(vg,NVG_ALIGN_LEFT|NVG_ALIGN_MIDDLE); nvgText(vg, x+h*0.3f,y+h*0.5f,text, NULL); nvgFontSize(vg, h*1.3f); nvgFontFace(vg, "icons"); nvgFillColor(vg, nvgRGBA(255,255,255,64) ); nvgTextAlign(vg,NVG_ALIGN_CENTER|NVG_ALIGN_MIDDLE); nvgText(vg, x+w-h*0.5f, y+h*0.5f, cpToUTF8(ICON_CHEVRON_RIGHT,icon), NULL); }
void Application::Impl_::paintEvent(NVGcontext* context){ int winWidth, winHeight; glfwGetWindowSize(window_.get(), &winWidth, &winHeight); int fWidth, fHeight; glfwGetFramebufferSize(window_.get(), &fWidth, &fHeight); float pxRatio = (float)fWidth / (float)winWidth; nvgBeginFrame(context, winWidth, winHeight, pxRatio); Rect textRect(0.f,10.f,winWidth,20.f); Rect boardMaxRect(0.f,textRect.height + textRect.y,winWidth,winHeight - textRect.height); float boardSizeMin = std::min(boardMaxRect.width,boardMaxRect.height); Rect boardRect(20.f, 20.f + textRect.height,boardSizeMin-40.f, boardSizeMin-40.f); if (boardMaxRect.height > boardMaxRect.width){ boardRect.move(0,(boardMaxRect.height - boardMaxRect.width)/2.f); }else{ boardRect.move((boardMaxRect.width - boardMaxRect.height)/2.f,0); } // draw the text rect nvgBeginPath(context); nvgFillColor(context, nvgRGBA(0,0,0,50)); nvgRect(context,textRect); nvgFill(context); nvgClosePath(context); // draw the board boardView_->paint(context,boardRect); if (isEnd_){ // change the color of the board nvgBeginPath(context); nvgFillColor(context, nvgRGBA(0,0,0,30)); nvgRect(context,boardMaxRect); nvgFill(context); nvgClosePath(context); // & display the game over std::string text("GAME OVER"); nvgBeginPath(context); float x= 0; float y= 0; textRect.center(x,y); nvgFontSize(context, 20); nvgFontFace(context, "sans"); nvgTextAlign(context, NVG_ALIGN_MIDDLE|NVG_ALIGN_CENTER); nvgFill(context); nvgFillColor(context, nvgRGBA(0,0,0,255)); nvgText(context,x+1,y+1,text.c_str(),NULL); nvgFillColor(context, nvgRGBA(200,20,20,255)); nvgText(context,x,y,text.c_str(),NULL); } nvgEndFrame(context); }
void TreeItem::draw(ExpandTree* tree, AlloyContext* context, const pixel2& offset) { box2px bounds = getBounds(); NVGcontext* nvg = context->nvgContext; nvgFontFaceId(nvg, context->getFontHandle(FontType::Icon)); float spaceWidth = fontSize + PADDING * 2; float iconWidth = 0; static const std::string rightArrow = CodePointToUTF8(0xf0da); static const std::string downArrow = CodePointToUTF8(0xf0d7); pixel2 pt = bounds.position + offset; bool selected = (tree->getSelectedItem() == this)&&!tree->isOverArrow(); nvgFontSize(nvg, fontSize); if (iconCodeString.length() > 0) { iconWidth = nvgTextBounds(nvg, 0, 0, iconCodeString.c_str(), nullptr, nullptr) + PADDING * 2; if (children.size() > 0 || onExpand) { nvgTextAlign(nvg, NVG_ALIGN_CENTER | NVG_ALIGN_TOP); if (tree->isOverArrow()) { nvgFillColor(nvg, context->theme.LIGHTEST); } else { nvgFillColor(nvg, context->theme.LIGHTER); } nvgText(nvg, pt.x + spaceWidth * 0.5f, pt.y + PADDING, (expanded) ? downArrow.c_str() : rightArrow.c_str(), nullptr); } if (selected) { nvgFillColor(nvg, context->theme.LIGHTEST); } else { nvgFillColor(nvg, context->theme.LIGHTER); } nvgTextAlign(nvg, NVG_ALIGN_LEFT | NVG_ALIGN_TOP); nvgText(nvg, pt.x + spaceWidth, pt.y + PADDING, iconCodeString.c_str(), nullptr); } if (name.length() > 0) { if (selected) { nvgFillColor(nvg, context->theme.LIGHTEST); } else { nvgFillColor(nvg, context->theme.LIGHTER); } nvgTextAlign(nvg, NVG_ALIGN_LEFT | NVG_ALIGN_TOP); nvgFontFaceId(nvg, context->getFontHandle(FontType::Bold)); nvgText(nvg, pt.x + iconWidth + spaceWidth, pt.y + PADDING, name.c_str(), nullptr); } if (expanded) { for (TreeItemPtr& item : children) { item->draw(tree, context, offset); } } }
void Graph::draw(NVGcontext *ctx) { Widget::draw(ctx); nvgBeginPath(ctx); nvgRect(ctx, mPos.x, mPos.y, mSize.x, mSize.y); nvgFillColor(ctx, mBackgroundColor); nvgFill(ctx); if (mValues.size() < 2) return; nvgBeginPath(ctx); nvgMoveTo(ctx, mPos.x, mPos.y + mSize.y); for (size_t i = 0; i < (size_t)mValues.size(); i++) { float value = mValues[i]; float vx = mPos.x + i * mSize.x / (float)(mValues.size() - 1); float vy = mPos.y + (1 - value) * mSize.y; nvgLineTo(ctx, vx, vy); } nvgLineTo(ctx, mPos.x + mSize.x, mPos.y + mSize.y); nvgStrokeColor(ctx, Colour(100, 255)); nvgStroke(ctx); nvgFillColor(ctx, mForegroundColor); nvgFill(ctx); nvgFontFace(ctx, "sans"); if (!mCaption.empty()) { nvgFontSize(ctx, 14.0f); nvgTextAlign(ctx, NVG_ALIGN_LEFT | NVG_ALIGN_TOP); nvgFillColor(ctx, mTextColor); nvgText(ctx, mPos.x + 3, mPos.y + 1, mCaption.c_str(), NULL); } if (!mHeader.empty()) { nvgFontSize(ctx, 18.0f); nvgTextAlign(ctx, NVG_ALIGN_RIGHT | NVG_ALIGN_TOP); nvgFillColor(ctx, mTextColor); nvgText(ctx, mPos.x + mSize.x - 3, mPos.y + 1, mHeader.c_str(), NULL); } if (!mFooter.empty()) { nvgFontSize(ctx, 15.0f); nvgTextAlign(ctx, NVG_ALIGN_RIGHT | NVG_ALIGN_BOTTOM); nvgFillColor(ctx, mTextColor); nvgText(ctx, mPos.x + mSize.x - 3, mPos.y + mSize.y - 1, mFooter.c_str(), NULL); } nvgBeginPath(ctx); nvgRect(ctx, mPos.x, mPos.y, mSize.x, mSize.y); nvgStrokeColor(ctx, Colour(100, 255)); nvgStroke(ctx); }
void drawWindow(struct NVGcontext* vg, const char* title, float x, float y, float w, float h) { float cornerRadius = 3.0f; struct NVGpaint shadowPaint; struct NVGpaint headerPaint; nvgSave(vg); // nvgClearState(vg); // Window nvgBeginPath(vg); nvgRoundedRect(vg, x,y, w,h, cornerRadius); nvgFillColor(vg, nvgRGBA(28,30,34,192) ); // nvgFillColor(vg, nvgRGBA(0,0,0,128) ); nvgFill(vg); // Drop shadow shadowPaint = nvgBoxGradient(vg, x,y+2, w,h, cornerRadius*2, 10, nvgRGBA(0,0,0,128), nvgRGBA(0,0,0,0) ); nvgBeginPath(vg); nvgRect(vg, x-10,y-10, w+20,h+30); nvgRoundedRect(vg, x,y, w,h, cornerRadius); nvgPathWinding(vg, NVG_HOLE); nvgFillPaint(vg, shadowPaint); nvgFill(vg); // Header headerPaint = nvgLinearGradient(vg, x,y,x,y+15, nvgRGBA(255,255,255,8), nvgRGBA(0,0,0,16) ); nvgBeginPath(vg); nvgRoundedRect(vg, x+1,y+1, w-2,30, cornerRadius-1); nvgFillPaint(vg, headerPaint); nvgFill(vg); nvgBeginPath(vg); nvgMoveTo(vg, x+0.5f, y+0.5f+30); nvgLineTo(vg, x+0.5f+w-1, y+0.5f+30); nvgStrokeColor(vg, nvgRGBA(0,0,0,32) ); nvgStroke(vg); nvgFontSize(vg, 18.0f); nvgFontFace(vg, "sans-bold"); nvgTextAlign(vg,NVG_ALIGN_CENTER|NVG_ALIGN_MIDDLE); nvgFontBlur(vg,2); nvgFillColor(vg, nvgRGBA(0,0,0,128) ); nvgText(vg, x+w/2,y+16+1, title, NULL); nvgFontBlur(vg,0); nvgFillColor(vg, nvgRGBA(220,220,220,160) ); nvgText(vg, x+w/2,y+16, title, NULL); nvgRestore(vg); }
void drawButton(struct NVGcontext* vg, int preicon, const char* text, float x, float y, float w, float h, struct NVGcolor col) { struct NVGpaint bg; char icon[8]; float cornerRadius = 4.0f; float tw = 0, iw = 0; bg = nvgLinearGradient(vg, x,y,x,y+h, nvgRGBA(255,255,255,isBlack(col)?16:32), nvgRGBA(0,0,0,isBlack(col)?16:32) ); nvgBeginPath(vg); nvgRoundedRect(vg, x+1,y+1, w-2,h-2, cornerRadius-1); if (!isBlack(col) ) { nvgFillColor(vg, col); nvgFill(vg); } nvgFillPaint(vg, bg); nvgFill(vg); nvgBeginPath(vg); nvgRoundedRect(vg, x+0.5f,y+0.5f, w-1,h-1, cornerRadius-0.5f); nvgStrokeColor(vg, nvgRGBA(0,0,0,48) ); nvgStroke(vg); nvgFontSize(vg, 20.0f); nvgFontFace(vg, "sans-bold"); tw = nvgTextBounds(vg, 0,0, text, NULL, NULL); if (preicon != 0) { nvgFontSize(vg, h*1.3f); nvgFontFace(vg, "icons"); iw = nvgTextBounds(vg, 0,0, cpToUTF8(preicon,icon), NULL, NULL); iw += h*0.15f; } if (preicon != 0) { nvgFontSize(vg, h*1.3f); nvgFontFace(vg, "icons"); nvgFillColor(vg, nvgRGBA(255,255,255,96) ); nvgTextAlign(vg,NVG_ALIGN_LEFT|NVG_ALIGN_MIDDLE); nvgText(vg, x+w*0.5f-tw*0.5f-iw*0.75f, y+h*0.5f, cpToUTF8(preicon,icon), NULL); } nvgFontSize(vg, 20.0f); nvgFontFace(vg, "sans-bold"); nvgTextAlign(vg,NVG_ALIGN_LEFT|NVG_ALIGN_MIDDLE); nvgFillColor(vg, nvgRGBA(0,0,0,160) ); nvgText(vg, x+w*0.5f-tw*0.5f+iw*0.25f,y+h*0.5f-1,text, NULL); nvgFillColor(vg, nvgRGBA(255,255,255,160) ); nvgText(vg, x+w*0.5f-tw*0.5f+iw*0.25f,y+h*0.5f,text, NULL); }
void TextNode::renderItself(RenderContext& renderContext) { NVGcontext& nanoVgContext = renderContext.getNanoVgContext(); nvgSave(&nanoVgContext); setupContext(nanoVgContext); Color finalColor = mFontColor.getBlendedColor(renderContext.getBlendColors()); nvgFillColor(&nanoVgContext, nvgRGBAf(finalColor.getRed(), finalColor.getGreen(), finalColor.getBlue(), finalColor.getAlpha())); for(const Text& text : mTexts) { const char* charArray = text.getString().getCharArray(); float positionX = text.getPosition().getX(); float positionY = text.getPosition().getY(); if(isPositive(text.getBoxWidth())) { nvgTextBox(&nanoVgContext, positionX, positionY, text.getBoxWidth(), charArray, nullptr); } else { nvgText(&nanoVgContext, positionX, positionY, charArray, nullptr); } } nvgRestore(&nanoVgContext); Node::renderItself(renderContext); }
void Renderer2D::drawText( const attributes_2d& attributes,Font2D font, const char* text, const float32_t& fontSize, const color_argb& color, const float32_t& blur, const float32_t& spacing, const float32_t& lineHeight, const TextAlignment& alignment ) { Context2D* context = _context2D; nvgSave( context ); nvgBeginPath( context ); nvgRotate( context, attributes.rotation ); nvgFontSize( context, fontSize * attributes.scale ); nvgFontBlur( context, blur ); nvgTextLetterSpacing(context, spacing); nvgTextLineHeight(context, lineHeight); nvgTextAlign(context, alignment.value ); nvgFontFaceId(context, font); nvgFillColor( context, nvgRGBA( color.r, color.g, color.b, color.a) ); nvgFill(context); nvgText(context, attributes.position[0], attributes.position[1], text, NULL); nvgRestore( context ); }
void Label::on_draw() { nvgFontSize(vg, 18.0f); nvgFontFace(vg, "sans"); nvgTextAlign(vg, NVG_ALIGN_RIGHT | NVG_ALIGN_MIDDLE); nvgFillColor(vg, nvgRGBA(240, 240, 240, 255)); nvgText(vg, x,y, text.c_str(), NULL); }
float NVGRenderer::text(float x, float y, const char* string, const char* end) { auto res = nvgText(m_context, x, y, string, end); resetGLState(); return res; }
void IterationRunWork::output(run::World& run) { // draw background demo::background( batb, run ); if ( item_ ) { switch ( item_->mode ) { case WorkItem::Mode::Definite: { //tb_widget_->set( item_->alpha, item_->tag ); const auto& tag = item_->tag; auto alpha = item_->alpha; // draw progressbar. FIXME auto nvg = batb.gl.nanovg_begin( run.scene ); float_t w = 512; float_t h = 22; float_t x = 0.5 * (run.scene.wth - w); float_t y = 0.5 * run.scene.hth + 112; float_t r = 11; nvgBeginPath( nvg ); nvgRoundedRect( nvg, x, y, w, h, r ); nvgFillColor( nvg, nvgRGBf( 1.0, 1.0, 1.0 ) ); nvgFill( nvg ); nvgBeginPath( nvg ); nvgRoundedRect( nvg, x, y, alpha * w, h, r ); nvgFillColor( nvg, nvgRGBf( 1.0, 0.22, 0.0 ) ); nvgFill( nvg ); static int font = -1; if ( font == -1 ) { font = batb.gl.nanovg_font( "sans", file::static_data( "batb/Ubuntu-Title.ttf" ) ); } nvgFontSize( nvg, 20 ); nvgTextAlign( nvg, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE ); nvgFontFaceId( nvg, font ); nvgFillColor( nvg, nvgRGBf( 0.0, 0.0, 0.0 ) ); //nvgFillColor( nvg, nvgRGBf( 0.11, 0.64, 0.04 ) ); nvgText( nvg, x + 0.5 * w, y + 0.5 * h, tag.c_str(), nullptr ); batb.gl.nanovg_end(); } break; case WorkItem::Mode::Indefinite: // FIXME: draw a finite progressbar/spinner break; } } }
void Console::draw(NVGcontext* ctx){ Widget::draw(ctx); //Screen *sc = dynamic_cast<Screen *>(this->window()->parent()); // Draw rounded rectangel around text area //////////////////// NVGpaint paint = nvgBoxGradient( ctx, mPos.x() + 1, mPos.y() + 1, mSize.x()-2, mSize.y(), 3, 4, Color(0, 32), Color(0, 92)); nvgBeginPath(ctx); nvgRoundedRect(ctx, mPos.x(), mPos.y(), mSize.x(), mSize.y(), 3); nvgFillPaint(ctx, paint); nvgFill(ctx); /////////////////////////////////////////////////////////////// nvgFontSize(ctx, 18.0f); nvgFontFace(ctx, "sans"); nvgTextAlign(ctx, NVG_ALIGN_LEFT|NVG_ALIGN_TOP); float x, y, linew, lineh; nvgTextMetrics(ctx, nullptr, nullptr, &lineh); x = mPos.x(); y = mPos.y(); linew = mSize.x(); mNumRows = mSize.y()/lineh ; // make sure that the size of console is updated //setSize(Vector2i(mSize.x(), nrows*lineh)); // this code does not work. It //changes size each frame. Move from draw into one time function. // init console output if(mInit) { initBuffer(ctx, linew); mInit = false; } //typedef std::deque<std::string> Buffer_t; //temp solution: when buffer is not full. Move this to updateFunction. for(auto it = mBuffer.begin();it!=mBuffer.end();++it) { nvgBeginPath(ctx); nvgFillColor(ctx, nvgRGBA(255,255,255,16)); nvgRect(ctx, x, y, linew, lineh); nvgFill(ctx); nvgFillColor(ctx, nvgRGBA(255,255,255,255)); nvgText(ctx, x, y, it->c_str(), nullptr); y += lineh; } updateCursor(ctx, lineh); //update cursor and draw //mCaret.onClick(ctx, lineh, mMouseDownPos - mPos); mCaret.draw(ctx, lineh, mPos); }
void drawEditBox(struct NVGcontext* vg, const char* text, float x, float y, float w, float h) { drawEditBoxBase(vg, x,y, w,h); nvgFontSize(vg, 20.0f); nvgFontFace(vg, "sans"); nvgFillColor(vg, nvgRGBA(255,255,255,64) ); nvgTextAlign(vg,NVG_ALIGN_LEFT|NVG_ALIGN_MIDDLE); nvgText(vg, x+h*0.3f,y+h*0.5f,text, NULL); }
void QNanoPainter::fillText(const QString &text, float x, float y, float maxWidth) { _checkAlignPixelsText(&x, &y); _checkFont(); if (maxWidth < 0) { nvgText(nvgCtx(), x, y, text.toUtf8().constData(), nullptr); } else { nvgTextBox(nvgCtx(), x, y, maxWidth, text.toUtf8().constData(), nullptr); } }
JNIEXPORT jfloat JNICALL Java_firststep_internal_NVG_text (JNIEnv *e, jclass c, jlong ctx, jfloat x, jfloat y, jstring jmesg) { checkJO(jmesg,"\nvg.Text was passed a NULL string\n"); const char *mesg = (*e)->GetStringUTFChars(e, jmesg, 0); float r=nvgText((NVGcontext*)ctx, x,y, mesg, NULL); (*e)->ReleaseStringUTFChars(e, jmesg, mesg); return r; }
void drawLabel(struct NVGcontext* vg, const char* text, float x, float y, float w, float h) { NVG_NOTUSED(w); nvgFontSize(vg, 18.0f); nvgFontFace(vg, "sans"); nvgFillColor(vg, nvgRGBA(255,255,255,128) ); nvgTextAlign(vg,NVG_ALIGN_LEFT|NVG_ALIGN_MIDDLE); nvgText(vg, x,y+h*0.5f,text, NULL); }
static void draw_text(NVGcontext *ctx, float x, float y, float w, float h, struct gui_color c, struct gui_color bg, const gui_char *string, gui_size len) { draw_rect(ctx, x,y,w,h,0, bg); nvgBeginPath(ctx); nvgFillColor(ctx, nvgRGBA(c.r, c.g, c.b, c.a)); nvgTextAlign(ctx, NVG_ALIGN_MIDDLE); nvgText(ctx, x, y + h * 0.5f, string, &string[len]); nvgFill(ctx); }
static void draw_text(NVGcontext *ctx, float x, float y, const gui_byte *c, const gui_char *string, gui_size len) { gui_float height = 0; nvgBeginPath(ctx); nvgTextMetrics(ctx, NULL, NULL, &height); nvgFillColor(ctx, nvgRGBA(c[0], c[1], c[2], c[3])); nvgText(ctx, x, y + height, string, &string[len]); nvgFill(ctx); }
void drawEditBoxNum(struct NVGcontext* vg, const char* text, const char* units, float x, float y, float w, float h) { float uw; drawEditBoxBase(vg, x,y, w,h); uw = nvgTextBounds(vg, 0,0, units, NULL, NULL); nvgFontSize(vg, 18.0f); nvgFontFace(vg, "sans"); nvgFillColor(vg, nvgRGBA(255,255,255,64) ); nvgTextAlign(vg,NVG_ALIGN_RIGHT|NVG_ALIGN_MIDDLE); nvgText(vg, x+w-h*0.3f,y+h*0.5f,units, NULL); nvgFontSize(vg, 20.0f); nvgFontFace(vg, "sans"); nvgFillColor(vg, nvgRGBA(255,255,255,128) ); nvgTextAlign(vg,NVG_ALIGN_RIGHT|NVG_ALIGN_MIDDLE); nvgText(vg, x+w-uw-h*0.5f,y+h*0.5f,text, NULL); }
void Label::draw(NVGcontext *ctx) { Widget::draw(ctx); nvgFontFace(ctx, mFont.c_str()); nvgFontSize(ctx, fontSize()); nvgFillColor(ctx, mColor); if (mFixedSize.x() > 0) { nvgTextAlign(ctx, NVG_ALIGN_LEFT | NVG_ALIGN_TOP); nvgTextBox(ctx, mPos.x(), mPos.y(), mFixedSize.x(), mCaption.c_str(), nullptr); } else { nvgTextAlign(ctx, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE); nvgText(ctx, mPos.x(), mPos.y() + mSize.y() * 0.5f, mCaption.c_str(), nullptr); } }
void drawSearchBox(struct NVGcontext* vg, const char* text, float x, float y, float w, float h) { struct NVGpaint bg; char icon[8]; float cornerRadius = h/2-1; // Edit bg = nvgBoxGradient(vg, x,y+1.5f, w,h, h/2,5, nvgRGBA(0,0,0,16), nvgRGBA(0,0,0,92) ); nvgBeginPath(vg); nvgRoundedRect(vg, x,y, w,h, cornerRadius); nvgFillPaint(vg, bg); nvgFill(vg); /* nvgBeginPath(vg); nvgRoundedRect(vg, x+0.5f,y+0.5f, w-1,h-1, cornerRadius-0.5f); nvgStrokeColor(vg, nvgRGBA(0,0,0,48) ); nvgStroke(vg);*/ nvgFontSize(vg, h*1.3f); nvgFontFace(vg, "icons"); nvgFillColor(vg, nvgRGBA(255,255,255,64) ); nvgTextAlign(vg,NVG_ALIGN_CENTER|NVG_ALIGN_MIDDLE); nvgText(vg, x+h*0.55f, y+h*0.55f, cpToUTF8(ICON_SEARCH,icon), NULL); nvgFontSize(vg, 20.0f); nvgFontFace(vg, "sans"); nvgFillColor(vg, nvgRGBA(255,255,255,32) ); nvgTextAlign(vg,NVG_ALIGN_LEFT|NVG_ALIGN_MIDDLE); nvgText(vg, x+h*1.05f,y+h*0.5f,text, NULL); nvgFontSize(vg, h*1.3f); nvgFontFace(vg, "icons"); nvgFillColor(vg, nvgRGBA(255,255,255,32) ); nvgTextAlign(vg,NVG_ALIGN_CENTER|NVG_ALIGN_MIDDLE); nvgText(vg, x+w-h*0.55f, y+h*0.55f, cpToUTF8(ICON_CIRCLED_CROSS,icon), NULL); }
void Cursor::draw(AlloyContext* context) const { pixel2 cursor = context->cursorPosition; if (fontSize > 0.0f && context->hasFocus && cursor.x >= 0 && cursor.y >= 0 && cursor.x < context->getScreenWidth() && cursor.y < context->getScreenHeight()) { NVGcontext* nvg = context->nvgContext; nvgTextAlign(nvg, align); nvgSave(nvg); nvgFontFaceId(nvg, context->getFontHandle(fontType)); nvgFontSize(nvg, fontSize); nvgFillColor(nvg, Color(255, 255, 255)); nvgTranslate(nvg, cursor.x+nudge.x, cursor.y+nudge.y); nvgRotate(nvg, angle); const float shift = 1.0f; const char* txt = codeString.c_str(); nvgFillColor(nvg, Color(0, 0, 0)); nvgText(nvg, +shift, 0, txt, nullptr); nvgText(nvg, -shift, 0, txt, nullptr); nvgText(nvg, 0, +shift, txt, nullptr); nvgText(nvg, 0, -shift, txt, nullptr); nvgFillColor(nvg, Color(255, 255, 255)); nvgText(nvg, 0, 0, txt, nullptr); nvgRestore(nvg); } }
//Render text - the implementation should keep track of loaded fonts etc. bool renderText(Skin::SkinClass::Attributes &skinClass, const std::string& text, float x, float y, float bx, float by) { if (!m_inited) return false; static int alignment = 0; alignment = 0; if (skinClass.hTextAlign == HA_LEFT) { alignment |= NVG_ALIGN_LEFT; } else if (skinClass.hTextAlign == HA_RIGHT) { alignment |= NVG_ALIGN_RIGHT; x += bx; } else if (skinClass.hTextAlign == HA_CENTER) { alignment |= NVG_ALIGN_CENTER; x += (bx / 2.f); } if (skinClass.vTextAlign == VA_TOP) { alignment |= NVG_ALIGN_TOP; } else if (skinClass.vTextAlign == VA_MIDDLE) { alignment |= NVG_ALIGN_MIDDLE; y += (by / 2.f); } else if (skinClass.vTextAlign == VA_BOTTOM) { alignment |= NVG_ALIGN_BOTTOM; y += by; } nvgTextAlign(m_vg, alignment); nvgFontFace(m_vg, skinClass.font.c_str()); if (skinClass.hasTextStroke) { //nvgStrokeWidth(m_vg, skinClass.strokeWidth); /* nvgFillColor(m_vg, nvgRGBA(skinClass.stroke.r, skinClass.stroke.g, skinClass.stroke.b, skinClass.stroke.a)); //nvgFontBlur(m_vg, skinClass.strokeWidth); nvgFontSize(m_vg, skinClass.textSize + 2); nvgText(m_vg, p.x - 1, p.y - 1, text.c_str(), NULL); nvgFontBlur(m_vg, 0.f);*/ // nvgStroke(m_vg); } nvgFontSize(m_vg, skinClass.textSize); nvgFillColor(m_vg, nvgRGBA(skinClass.textFill.r, skinClass.textFill.g, skinClass.textFill.b, skinClass.textFill.a)); nvgText(m_vg, x, y, text.c_str(), NULL); return true; }
void Material::update(NVGcontext* vg, double time) { if (m_framebufferObject == nullptr) return; if (m_initialized == true && m_animate == false) return; float circle_size = float((cos(time) + 1.0) * 128.0); nvgluBindFramebuffer(m_framebufferObject); glViewport(0, 0, m_width, m_height); // Any alpha other than zero will fail for some FBO reason glClearColor(m_color.r, m_color.g, m_color.b, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); nvgBeginFrame(vg, m_width, m_height, /*pixelRatio*/1.0f); nvgBeginPath(vg); if (m_animate) nvgCircle(vg, float(m_width) * 0.5f, float(m_height) * 0.5f, circle_size); if(m_type == 2) nvgFillColor(vg, nvgRGBA(220, 45, 0, 200)); else if(m_type == 1) nvgFillColor(vg, nvgRGBA(0, 220, 45, 200)); else nvgFillColor(vg, nvgRGBA(10, 145, 200, 200)); nvgFill(vg); if(m_type == 2) { nvgFontFace(vg, "sans"); nvgFontSize(vg, 80.0f); nvgTextAlign(vg, NVG_ALIGN_CENTER); nvgFillColor(vg, nvgRGBA(255, 255, 255, 255)); nvgText(vg, float(m_width) * 0.5f, (float(m_height) * 0.5f) + 20.0f, "Add Object", nullptr); } nvgEndFrame(vg); nvgluBindFramebuffer(NULL); m_initialized = true; }
static void drawText(float x, float y, const char *text, int align, unsigned int col) { if (font<0) return; int vgalign = NVG_ALIGN_MIDDLE; if (align == IMGUI_ALIGN_CENTER) vgalign |= NVG_ALIGN_CENTER; else if (align == IMGUI_ALIGN_RIGHT) vgalign |= NVG_ALIGN_RIGHT; else vgalign |= IMGUI_ALIGN_LEFT; nvgFontSize(vg::ctx, 14); nvgFontFace(vg::ctx, "imguifont"); nvgTextAlign(vg::ctx, vgalign); nvgFillColor(vg::ctx, nvgRGBA(col&0xff, (col>>8)&0xff, (col>>16)&0xff, (col>>24)&0xff)); nvgText(vg::ctx, x, y, text, NULL); }
void PopupButton::draw(NVGcontext* ctx) { if (!mEnabled && mPushed) mPushed = false; mPopup->setVisible(mPushed); Button::draw(ctx); auto icon = utf8(ENTYPO_ICON_CHEVRON_SMALL_RIGHT); NVGcolor textColor = mTextColor.w() == 0 ? mTheme->mTextColor : mTextColor; nvgFontSize(ctx, mTheme->mButtonFontSize * 1.5f); nvgFontFace(ctx, "icons"); nvgFillColor(ctx, mEnabled ? textColor : mTheme->mDisabledTextColor); nvgTextAlign(ctx, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE); float iw = nvgTextBounds(ctx, 0, 0, icon.data(), nullptr, nullptr); Vector2f iconPos( mPos.x() + mSize.x() - iw - 8, mPos.y() + mSize.y() * 0.5f -1); nvgText(ctx, iconPos.x(), iconPos.y(), icon.data(), nullptr); }
void PopupButton::draw (NVGcontext * ctx) { if (!mEnabled && mPushed) mPushed = false; mPopup->setVisible (mPushed); Button::draw (ctx); if (mChevronIcon) { auto icon = utf8 (mChevronIcon); NVGcolor textColor = mTextColor.a == 0 ? mTheme->mTextColor : mTextColor; nvgFontSize (ctx, (mFontSize < 0 ? mTheme->mButtonFontSize : mFontSize) * 1.5f); nvgFontFace (ctx, "icons"); nvgFillColor (ctx, mEnabled ? textColor : mTheme->mDisabledTextColor); nvgTextAlign (ctx, NVG_ALIGN_LEFT | NVG_ALIGN_MIDDLE); float iw = nvgTextBounds (ctx, 0, 0, icon.data(), nullptr, nullptr); vec2 iconPos (mPos.x + mSize.x - iw - 8, mPos.y + mSize.y * 0.5f - 1); nvgText (ctx, iconPos.x, iconPos.y, icon.data(), nullptr); } }
void FHUD::Render(int w, int h) { if(!Temp) { Temp = RC.Render->NewSGObject(); Temp->LoadModelFromResource(RC.Engine->EnemyMesh1); Temp->SetScale(glm::vec3(1.2f)); Temp->SetVisible(false); } if(Health <= 0) { nvgBeginPath(vg); nvgRect(vg, 0, 0, (float)w, (float)h); nvgFillColor(vg, nvgRGBA(255, 0, 0, 200)); nvgFill(vg); Temp->SetVisible(true); Temp->SetRed(true); } else { Temp->SetVisible(false); nvgFillColor(vg, nvgRGB(0, 0, 0)); nvgFontSize(vg, 36); nvgFontFace(vg, "normal"); nvgText(vg, 0, 50, "Health", nullptr); nvgBeginPath(vg); nvgRect(vg, 100, 23, (float)Health * 10, 35); nvgStrokeColor(vg, nvgRGBA(0, 0, 0, 255)); NVGpaint redPaint = nvgLinearGradient(vg, 100, 23, 100, 35, nvgRGBA(255, 255, 255, 255), nvgRGBA(255, 0, 0, 100)); //nvgFillColor(vg, nvgRGBA(255, 0, 0, 128)); nvgFillPaint(vg, redPaint); nvgFill(vg); nvgBeginPath(vg); nvgRect(vg, 100, 23, (float)MaxHealth * 10, 35); nvgStrokeColor(vg, nvgRGBA(0, 0, 0, 255)); nvgStroke(vg); } }