diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-05-15 17:13:17 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-05-15 17:13:17 (GMT) |
| commit | 136675b56a8a1862afb41ccee5c14e93e483b964 (patch) | |
| tree | 8f679477c5e1c0984a5cb9c169e339c1ca0d6e0c /src/interface/DropDown.cpp | |
| parent | 45563e97e813cfd21724ad1111e5de3e04679e1a (diff) | |
| download | powder-136675b56a8a1862afb41ccee5c14e93e483b964.zip powder-136675b56a8a1862afb41ccee5c14e93e483b964.tar.gz | |
Move style into Component
Diffstat (limited to 'src/interface/DropDown.cpp')
| -rw-r--r-- | src/interface/DropDown.cpp | 81 |
1 files changed, 18 insertions, 63 deletions
diff --git a/src/interface/DropDown.cpp b/src/interface/DropDown.cpp index 5ad255a..9748d7a 100644 --- a/src/interface/DropDown.cpp +++ b/src/interface/DropDown.cpp @@ -15,9 +15,7 @@ namespace ui { class ItemSelectedAction; class DropDownWindow: public ui::Window { friend class ItemSelectedAction; - Colour background, activeBackground; - Colour border, activeBorder; - Colour text, activeText; + Appearance appearance; DropDown * dropDown; std::vector<Button> buttons; bool isMouseInside; @@ -38,19 +36,13 @@ public: DropDownWindow(DropDown * dropDown): Window(ui::Point(dropDown->Position.X+dropDown->GetParentWindow()->Position.X-5, dropDown->Position.Y+dropDown->GetParentWindow()->Position.Y-3), ui::Point(dropDown->Size.X+10, 1+dropDown->options.size()*15)), dropDown(dropDown), - background(dropDown->background), - activeBackground(dropDown->activeBackground), - border(dropDown->border), - activeBorder(dropDown->activeBorder), - text(dropDown->text), - activeText(dropDown->activeText) + appearance(dropDown->Appearance) { int currentY = 1; for(int i = 0; i < dropDown->options.size(); i++) { Button * tempButton = new Button(Point(1, currentY), Point(Size.X-2, 14), dropDown->options[i].first); - tempButton->SetTextColour(dropDown->text); - tempButton->SetBorderColour(dropDown->background); + tempButton->Appearance = appearance; tempButton->SetActionCallback(new ItemSelectedAction(this, dropDown->options[i].first)); AddComponent(tempButton); currentY += 15; @@ -60,7 +52,7 @@ public: { Graphics * g = ui::Engine::Ref().g; g->fillrect(Position.X, Position.Y, Size.X, Size.Y, 100, 100, 100, 255); - g->drawrect(Position.X, Position.Y, Size.X, Size.Y, border.Red, border.Green, border.Blue, border.Alpha); + g->drawrect(Position.X, Position.Y, Size.X, Size.Y, appearance.BackgroundInactive.Red, appearance.BackgroundInactive.Green, appearance.BackgroundInactive.Blue, appearance.BackgroundInactive.Alpha); } void setOption(std::string option) { @@ -83,17 +75,8 @@ DropDown::DropDown(Point position, Point size): Component(position, size), isMouseInside(false), optionIndex(-1), - textPosition(ui::Point(0, 0)), - textVAlign(AlignMiddle), - textHAlign(AlignLeft), callback(NULL) { - activeText = text = Colour(255, 255, 255); - - border = style::Colour::InactiveBorder; - activeBorder = style::Colour::ActiveBorder; - background = style::Colour::InactiveBackground; - activeBackground = style::Colour::ActiveBackground; } void DropDown::OnMouseClick(int x, int y, unsigned int button) @@ -104,59 +87,31 @@ void DropDown::OnMouseClick(int x, int y, unsigned int button) void DropDown::Draw(const Point& screenPos) { + if(!drawn) + { + if(optionIndex!=-1) + TextPosition(options[optionIndex].first); + drawn = true; + } Graphics * g = ui::Engine::Ref().g; Point Position = screenPos; if(isMouseInside) { - g->fillrect(Position.X-1, Position.Y-1, Size.X+2, Size.Y+2, activeBackground.Red, activeBackground.Green, activeBackground.Blue, 255); - g->drawrect(Position.X, Position.Y, Size.X, Size.Y, activeBorder.Red, activeBorder.Green, activeBorder.Blue, 255); + g->fillrect(Position.X-1, Position.Y-1, Size.X+2, Size.Y+2, Appearance.BackgroundActive.Red, Appearance.BackgroundActive.Green, Appearance.BackgroundActive.Blue, 255); + g->drawrect(Position.X, Position.Y, Size.X, Size.Y, Appearance.BorderActive.Red, Appearance.BorderActive.Green, Appearance.BorderActive.Blue, 255); if(optionIndex!=-1) - g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y, options[optionIndex].first, activeText.Red, activeText.Green, activeText.Blue, 255); + g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y, options[optionIndex].first, Appearance.TextActive.Red, Appearance.TextActive.Green, Appearance.TextActive.Blue, 255); } else { - g->fillrect(Position.X, Position.Y, Size.X, Size.Y, background.Red, background.Green, background.Blue, 255); - g->drawrect(Position.X, Position.Y, Size.X, Size.Y, border.Red, border.Green, border.Blue, 255); + g->fillrect(Position.X, Position.Y, Size.X, Size.Y, Appearance.BackgroundInactive.Red, Appearance.BackgroundInactive.Green, Appearance.BackgroundInactive.Blue, 255); + g->drawrect(Position.X, Position.Y, Size.X, Size.Y, Appearance.BorderInactive.Red, Appearance.BorderInactive.Green, Appearance.BorderInactive.Blue, 255); if(optionIndex!=-1) - g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y, options[optionIndex].first, text.Red, text.Green, text.Blue, 255); + g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y, options[optionIndex].first, Appearance.TextInactive.Red, Appearance.TextInactive.Green, Appearance.TextInactive.Blue, 255); } } - void DropDown::TextPosition() - { - std::string displayText; - if(optionIndex!=-1) - displayText = options[optionIndex].first; - - // Values 3 and 10 are for vertical padding of 3 pixels, middle uses 7 as that's the height of a capital - switch(textVAlign) - { - case AlignTop: - textPosition.Y = 3; - break; - case AlignMiddle: - textPosition.Y = (Size.Y-10)/2; - break; - case AlignBottom: - textPosition.Y = Size.Y-10; - break; - } - - switch(textHAlign) - { - case AlignLeft: - textPosition.X = 3; - break; - case AlignCentre: - textPosition.X = (Size.X-Graphics::textwidth((char *)displayText.c_str()))/2; - break; - case AlignRight: - textPosition.X = (Size.X-Graphics::textwidth((char *)displayText.c_str()))-2; - break; - } - } - std::pair<std::string, int> DropDown::GetOption() { if(optionIndex!=-1) @@ -173,7 +128,7 @@ void DropDown::Draw(const Point& screenPos) if(options[i].first == option) { optionIndex = i; - TextPosition(); + TextPosition(options[optionIndex].first); return; } } @@ -185,7 +140,7 @@ void DropDown::Draw(const Point& screenPos) if(options[i].second == option) { optionIndex = i; - TextPosition(); + TextPosition(options[optionIndex].first); return; } } |
