void SmallButton::Draw() { if (IsDisabled()) GetContext()->GetSkin().DrawSmallButtonDisabled(GetActiveOffset(), GetActiveArea()); else if (IsMouseActive()) GetContext()->GetSkin().DrawSmallButtonActive(GetActiveOffset(), GetActiveArea()); else if (IsMouseOver()) GetContext()->GetSkin().DrawSmallButtonHover(GetActiveOffset(), GetActiveArea()); else GetContext()->GetSkin().DrawSmallButtonNormal(GetActiveOffset(), GetActiveArea()); }
void Button::Draw() { if (IsMouseActive()) GetContext()->GetSkin().DrawButtonActive(GetActiveOffset(), GetActiveArea()); else if (IsMouseOver()) GetContext()->GetSkin().DrawButtonHover(GetActiveOffset(), GetActiveArea()); else GetContext()->GetSkin().DrawButtonNormal(GetActiveOffset(), GetActiveArea()); Single::Draw(); }
void Gradient::Draw() { Graphics::Renderer *r = GetContext()->GetRenderer(); if (!m_quad) { const Point &offset = GetActiveOffset(); const Point &area = GetActiveArea(); const float x = offset.x; const float y = offset.y; const float sx = area.x; const float sy = area.y; Graphics::VertexArray va(Graphics::ATTRIB_POSITION | Graphics::ATTRIB_DIFFUSE); va.Add(vector3f(x, y, 0.0f), m_beginColor); va.Add(vector3f(x, y + sy, 0.0f), m_direction == HORIZONTAL ? m_beginColor : m_endColor); va.Add(vector3f(x + sx, y, 0.0f), m_direction == HORIZONTAL ? m_endColor : m_beginColor); va.Add(vector3f(x + sx, y + sy, 0.0f), m_endColor); auto renderState = GetContext()->GetSkin().GetAlphaBlendState(); m_quad.reset(new Graphics::Drawables::TexturedQuad(r, m_material, va, renderState)); } m_quad->Draw(r, Color(Color::WHITE.r, Color::WHITE.g, Color::WHITE.b, GetContext()->GetOpacity()*Color::WHITE.a)); Container::Draw(); }
void Face::Draw() { Graphics::Renderer *r = GetContext()->GetRenderer(); if (!m_quad) { const Point &offset = GetActiveOffset(); const Point &area = GetActiveArea(); const float x = offset.x; const float y = offset.y; const float sx = area.x; const float sy = area.y; const vector2f texSize = m_texture->GetDescriptor().texSize; Graphics::VertexArray va(Graphics::ATTRIB_POSITION | Graphics::ATTRIB_UV0); va.Add(vector3f(x, y, 0.0f), vector2f(0.0f, 0.0f)); va.Add(vector3f(x, y + sy, 0.0f), vector2f(0.0f, texSize.y)); va.Add(vector3f(x + sx, y, 0.0f), vector2f(texSize.x, 0.0f)); va.Add(vector3f(x + sx, y + sy, 0.0f), vector2f(texSize.x, texSize.y)); Graphics::Renderer *r = GetContext()->GetRenderer(); s_material->texture0 = m_texture.get(); auto state = GetContext()->GetSkin().GetAlphaBlendState(); m_quad.reset(new Graphics::Drawables::TexturedQuad(r, s_material, va, state)); } m_quad->Draw(r); Single::Draw(); }
void ShipSpinner::Draw() { Graphics::Renderer *r = GetContext()->GetRenderer(); Graphics::Renderer::StateTicket ticket(r); r->SetPerspectiveProjection(45.f, 1.f, 1.f, 10000.f); r->SetTransform(matrix4x4f::Identity()); r->SetDepthTest(true); r->ClearDepthBuffer(); r->SetLights(1, &m_light); Point pos(GetAbsolutePosition() + GetActiveOffset()); Point size(GetActiveArea()); r->SetViewport(pos.x, GetContext()->GetSize().y - pos.y - size.y, size.x, size.y); matrix4x4f rot = matrix4x4f::RotateXMatrix(m_rotX); rot.RotateY(m_rotY); rot[14] = -1.5f * m_model->GetDrawClipRadius(); m_model->Render(r, rot, &m_params); }
void Face::Draw() { const Point &offset = GetActiveOffset(); const Point &area = GetActiveArea(); const float x = offset.x; const float y = offset.y; const float sx = area.x; const float sy = area.y; const vector2f texSize = m_texture->GetDescriptor().texSize; Graphics::VertexArray va(Graphics::ATTRIB_POSITION | Graphics::ATTRIB_UV0); va.Add(vector3f(x, y, 0.0f), vector2f(0.0f, 0.0f)); va.Add(vector3f(x, y+sy, 0.0f), vector2f(0.0f, texSize.y)); va.Add(vector3f(x+sx, y, 0.0f), vector2f(texSize.x, 0.0f)); va.Add(vector3f(x+sx, y+sy, 0.0f), vector2f(texSize.x, texSize.y)); Graphics::Renderer *r = GetContext()->GetRenderer(); s_material->texture0 = m_texture.get(); auto state = GetContext()->GetSkin().GetAlphaBlendState(); r->DrawTriangles(&va, state, s_material.Get(), Graphics::TRIANGLE_STRIP); Single::Draw(); }
void ModelSpinner::Draw() { Graphics::Renderer *r = GetContext()->GetRenderer(); Graphics::Renderer::StateTicket ticket(r); const float fov = 45.f; r->SetPerspectiveProjection(fov, 1.f, 1.f, 10000.f); r->SetTransform(matrix4x4f::Identity()); r->SetDepthWrite(true); r->SetDepthTest(true); r->ClearDepthBuffer(); r->SetLights(1, &m_light); Point pos(GetAbsolutePosition() + GetActiveOffset()); Point size(GetActiveArea()); r->SetViewport(pos.x, GetContext()->GetSize().y - pos.y - size.y, size.x, size.y); matrix4x4f rot = matrix4x4f::RotateXMatrix(m_rotX); rot.RotateY(m_rotY); const float dist = m_model->GetDrawClipRadius() / sinf(DEG2RAD(fov*0.5f)); rot[14] = -dist; m_model->Render(rot); }
void Slider::HandleMouseMove(const MouseMotionEvent &event) { const Skin &skin = GetContext()->GetSkin(); if (m_buttonDown && IsMouseActive()) { float travel; if (m_orient == SLIDER_HORIZONTAL) { const Skin::EdgedRectElement &gutterRect = skin.SliderHorizontalGutter(); const Skin::RectElement &buttonRect = skin.SliderHorizontalButtonNormal(); const int effectiveLength = GetActiveArea().x - gutterRect.edgeWidth*2 - buttonRect.size.x; const int pos = Clamp(event.pos.x - int(gutterRect.edgeWidth) - buttonRect.size.x/2 - GetActiveOffset().x, 0, effectiveLength); travel = float(pos) / effectiveLength; } else { const Skin::EdgedRectElement &gutterRect = skin.SliderVerticalGutter(); const Skin::RectElement &buttonRect = skin.SliderVerticalButtonNormal(); const int effectiveLength = GetActiveArea().y - gutterRect.edgeWidth*2 - buttonRect.size.y; const int pos = Clamp(event.pos.y - int(gutterRect.edgeWidth) - buttonRect.size.y/2 - GetActiveOffset().y, 0, effectiveLength); travel = float(pos) / effectiveLength; } SetValue(travel); } else { m_lastMousePosition = event.pos; m_mouseOverButton = PointInsideButton(event.pos); } Widget::HandleMouseMove(event); }
void Slider::Layout() { const Skin &skin = GetContext()->GetSkin(); const Point &activeArea = GetActiveArea(); if (m_orient == SLIDER_HORIZONTAL) { const Skin::EdgedRectElement &gutterRect = skin.SliderHorizontalGutter(); m_gutterPos = Point(0, (activeArea.y-gutterRect.size.y)/2); m_gutterSize = Point(activeArea.x, gutterRect.size.y); } else { const Skin::EdgedRectElement &gutterRect = skin.SliderVerticalGutter(); m_gutterPos = Point((activeArea.x-gutterRect.size.x)/2, 0); m_gutterSize = Point(gutterRect.size.x, activeArea.y); } UpdateButton(); Widget::Layout(); }
void Icon::Draw() { const Point &offset = GetActiveOffset(); const Point &area = GetActiveArea(); const float x = offset.x; const float y = offset.y; const float sx = area.x; const float sy = area.y; Graphics::VertexArray va(Graphics::ATTRIB_POSITION | Graphics::ATTRIB_UV0); va.Add(vector3f(x, y, 0.0f), vector2f(s_texScale.x*(m_texPos.x), s_texScale.y*(m_texPos.y))); va.Add(vector3f(x, y+sy, 0.0f), vector2f(s_texScale.x*(m_texPos.x), s_texScale.y*(m_texPos.y+48))); va.Add(vector3f(x+sx, y, 0.0f), vector2f(s_texScale.x*(m_texPos.x+48), s_texScale.y*(m_texPos.y))); va.Add(vector3f(x+sx, y+sy, 0.0f), vector2f(s_texScale.x*(m_texPos.x+48), s_texScale.y*(m_texPos.y+48))); Graphics::Renderer *r = GetContext()->GetRenderer(); r->SetBlendMode(Graphics::BLEND_ALPHA); s_material->diffuse = m_color; r->DrawTriangles(&va, s_material.Get(), Graphics::TRIANGLE_STRIP); }
void Image::Draw() { const Point &offset = GetActiveOffset(); const Point &area = GetActiveArea(); const float x = offset.x; const float y = offset.y; const float sx = area.x; const float sy = area.y; const vector2f texSize = m_texture->GetDescriptor().texSize; Graphics::VertexArray va(Graphics::ATTRIB_POSITION | Graphics::ATTRIB_UV0); va.Add(vector3f(x, y, 0.0f), vector2f(0.0f, 0.0f)); va.Add(vector3f(x, y+sy, 0.0f), vector2f(0.0f, texSize.y)); va.Add(vector3f(x+sx, y, 0.0f), vector2f(texSize.x, 0.0f)); va.Add(vector3f(x+sx, y+sy, 0.0f), vector2f(texSize.x, texSize.y)); Graphics::Renderer *r = GetContext()->GetRenderer(); r->SetBlendMode(Graphics::BLEND_ALPHA); r->DrawTriangles(&va, m_material.Get(), Graphics::TRIANGLE_STRIP); }
void Gradient::Draw() { const Point &offset = GetActiveOffset(); const Point &area = GetActiveArea(); const float x = offset.x; const float y = offset.y; const float sx = area.x; const float sy = area.y; Graphics::VertexArray va(Graphics::ATTRIB_POSITION | Graphics::ATTRIB_DIFFUSE); va.Add(vector3f(x, y, 0.0f), m_beginColor); va.Add(vector3f(x, y+sy, 0.0f), m_direction == HORIZONTAL ? m_beginColor : m_endColor); va.Add(vector3f(x+sx, y, 0.0f), m_direction == HORIZONTAL ? m_endColor : m_beginColor); va.Add(vector3f(x+sx, y+sy, 0.0f), m_endColor); Graphics::Renderer *r = GetContext()->GetRenderer(); r->SetBlendMode(Graphics::BLEND_ALPHA); r->DrawTriangles(&va, m_material.Get(), Graphics::TRIANGLE_STRIP); Container::Draw(); }
void CheckBox::Draw() { if (m_checked) { if (IsDisabled()) GetContext()->GetSkin().DrawCheckBoxCheckedDisabled(GetActiveOffset(), GetActiveArea()); else if (IsMouseOver()) GetContext()->GetSkin().DrawCheckBoxCheckedHover(GetActiveOffset(), GetActiveArea()); else GetContext()->GetSkin().DrawCheckBoxCheckedNormal(GetActiveOffset(), GetActiveArea()); } else { if (IsDisabled()) GetContext()->GetSkin().DrawCheckBoxDisabled(GetActiveOffset(), GetActiveArea()); else if (IsMouseOver()) GetContext()->GetSkin().DrawCheckBoxHover(GetActiveOffset(), GetActiveArea()); else GetContext()->GetSkin().DrawCheckBoxNormal(GetActiveOffset(), GetActiveArea()); } }