void MenuItem::SyncState() { int s = GetVisualState(); if(s != state) { state = s; Refresh(); } }
void HudButton::Draw(nux::GraphicsEngine& GfxContext, bool force_draw) { if (skip_draw_) return; nux::Geometry const& geo = GetGeometry(); GfxContext.PushClippingRectangle(geo); gPainter.PaintBackground(GfxContext, geo); // set up our texture mode nux::TexCoordXForm texxform; texxform.SetWrap(nux::TEXWRAP_CLAMP, nux::TEXWRAP_CLAMP); texxform.SetTexCoordType(nux::TexCoordXForm::OFFSET_COORD); // clear what is behind us unsigned int alpha = 0, src = 0, dest = 0; GfxContext.GetRenderStates().GetBlend(alpha, src, dest); GfxContext.GetRenderStates().SetPremultipliedBlend(nux::SRC_OVER); GfxContext.GetRenderStates().SetBlend(true); nux::Color col(nux::color::Black); col.alpha = 0; GfxContext.QRP_Color(geo.x, geo.y, geo.width, geo.height, col); nux::BaseTexture* texture = normal_->GetTexture(); if (HasKeyFocus() || fake_focused()) texture = active_->GetTexture(); else if (HasKeyFocus()) texture = prelight_->GetTexture(); else if (GetVisualState() == nux::ButtonVisualState::VISUAL_STATE_PRESSED) texture = active_->GetTexture(); GfxContext.QRP_1Tex(geo.x, geo.y, texture->GetWidth(), texture->GetHeight(), texture->GetDeviceTexture(), texxform, nux::color::White); GfxContext.GetRenderStates().SetBlend(alpha, src, dest); GfxContext.PopClippingRectangle(); }
void RatingsButton::Draw(nux::GraphicsEngine& GfxContext, bool force_draw) { int rating = static_cast<int>(GetRating() * NUM_STARS); // FIXME: 9/26/2011 // We should probably support an API for saying whether the ratings // should or shouldn't support half stars...but our only consumer at // the moment is the applications scope which according to design // (Bug #839759) shouldn't. So for now just force rounding. // int total_half_stars = rating % 2; // int total_full_stars = rating / 2; int total_full_stars = rating; nux::Geometry const& geo = GetGeometry(); nux::Geometry geo_star(geo); geo_star.width = star_size_.CP(scale); geo_star.height = star_size_.CP(scale); gPainter.PaintBackground(GfxContext, geo); // set up our texture mode nux::TexCoordXForm texxform; texxform.SetWrap(nux::TEXWRAP_CLAMP_TO_BORDER, nux::TEXWRAP_CLAMP_TO_BORDER); texxform.SetTexCoordType(nux::TexCoordXForm::OFFSET_SCALE_COORD); texxform.SetFilter(nux::TEXFILTER_LINEAR, nux::TEXFILTER_LINEAR); // clear what is behind us unsigned int alpha = 0, src = 0, dest = 0; GfxContext.GetRenderStates().GetBlend(alpha, src, dest); GfxContext.GetRenderStates().SetBlend(true, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); nux::Color col = nux::color::Black; col.alpha = 0; GfxContext.QRP_Color(geo.x, geo.y, geo.width, geo.height, col); for (int index = 0; index < NUM_STARS; ++index) { dash::Style& style = dash::Style::Instance(); auto texture = style.GetStarSelectedIcon(); if (index < total_full_stars) { if (GetVisualState() == nux::ButtonVisualState::VISUAL_STATE_NORMAL) texture = style.GetStarSelectedIcon(); else if (GetVisualState() == nux::ButtonVisualState::VISUAL_STATE_PRELIGHT) texture = style.GetStarSelectedIcon(); else if (GetVisualState() == nux::ButtonVisualState::VISUAL_STATE_PRESSED) texture = style.GetStarSelectedIcon(); } else { if (GetVisualState() == nux::ButtonVisualState::VISUAL_STATE_NORMAL) texture = style.GetStarDeselectedIcon(); else if (GetVisualState() == nux::ButtonVisualState::VISUAL_STATE_PRELIGHT) texture = style.GetStarDeselectedIcon(); else if (GetVisualState() == nux::ButtonVisualState::VISUAL_STATE_PRESSED) texture = style.GetStarDeselectedIcon(); } GfxContext.QRP_1Tex(geo_star.x, geo_star.y, geo_star.width, geo_star.height, texture->GetDeviceTexture(), texxform, nux::Color(1.0f, 1.0f, 1.0f, 1.0f)); if (focused_star_ == index) { GfxContext.QRP_1Tex(geo_star.x, geo_star.y, geo_star.width, geo_star.height, style.GetStarHighlightIcon()->GetDeviceTexture(), texxform, nux::Color(1.0f, 1.0f, 1.0f, 0.5f)); } geo_star.x += geo_star.width + star_gap_.CP(scale); } GfxContext.GetRenderStates().SetBlend(alpha, src, dest); }
void MenuItem::Paint(Draw& w) { int q = text.Find('\t'); String txt, keydesc; if(accel) keydesc = GetKeyDesc(accel); if(q >= 0) { keydesc = text.Mid(q + 1); txt = text.Mid(0, q); } else txt = text; state = GetVisualState(); bool hl = state != NORMAL; Size sz = GetSize(); if(hl) { if(GUI_GlobalStyle() >= GUISTYLE_XP) ChPaint(w, 0, 0, sz.cx, sz.cy, style->item); else w.DrawRect(sz, SColorHighlight); } UPP::Image li = licon; if(li.IsEmpty()) { switch(type) { case CHECK0: li = CtrlImg::MenuCheck0(); break; case CHECK1: li = CtrlImg::MenuCheck1(); break; case RADIO0: li = CtrlImg::MenuRadio0(); break; case RADIO1: li = CtrlImg::MenuRadio1(); break; } } Size isz = li.GetSize(); // Size isz = min(maxiconsize, imsz); // if(isz != imsz) // li = CachedRescale(li, isz); int iy = (sz.cy - isz.cy) / 2; bool chk = false; int x = Zx(2); if(!licon.IsEmpty() && type) { chk = type == CHECK1 || type == RADIO1; if(GUI_GlobalStyle() >= GUISTYLE_XP) { if(chk && !hl) DrawXPButton(w, RectC(0, iy - Zy(2), isz.cx + Zx(4), isz.cy + Zy(4)), BUTTON_EDGE|BUTTON_CHECKED); } else { w.DrawRect(x - Zx(1), iy - Zy(1), isz.cx + Zx(2), isz.cy + Zy(2), chk ? Blend(SColorFace, SColorLight) : SColorFace); DrawBorder(w, x - Zx(2), iy - Zy(2), isz.cx + Zx(4), isz.cy + Zy(4), chk ? ThinInsetBorder : ThinOutsetBorder); } } if(isenabled) DrawHighlightImage(w, x, iy, li, hl || chk, true); else w.DrawImage(x, iy, DisabledImage(li)); x = max(isz.cx, leftgap) + textgap; isz = GetTextSize(text, StdFont()); DrawMenuText(w, x, (sz.cy - isz.cy) / 2, txt, font, isenabled, hl, style->menutext, style->itemtext); isz = ricon.GetSize(); if(isenabled) w.DrawImage(sz.cx - isz.cx, (sz.cy - isz.cy) / 2, ricon, hl ? style->itemtext : style->menutext); else w.DrawImage(sz.cx - isz.cx, (sz.cy - isz.cy) / 2, DisabledImage(ricon)); x = sz.cx - max(isz.cx, Zx(16)) - Zx(1); if(!IsEmpty(keydesc)) { isz = GetTextSize(keydesc, StdFont()); UPP::DrawMenuText(w, x - isz.cx - Zx(2), (sz.cy - isz.cy) / 2, keydesc, font, isenabled, hl, 0, SColorMenuMark(), style->itemtext, false); } }