34#include <guichan/font.hpp>
42 setFrameSize(skin.frameSize);
46 static_cast<ScrollArea*
>(mScrollArea)->setOpaque(
false);
48 setHeight(getFont()->getHeight() + 2 *
mPadding);
58 const int h = mDroppedDown ? mFoldedUpHeight : getHeight();
61 gcn::Color faceColor = getBaseColor();
64 highlightColor.a = alpha;
65 gcn::Color shadowColor = faceColor - 0x303030;
66 shadowColor.a = alpha;
68 if (mListBox->getListModel() && mListBox->getSelected() >= 0)
72 graphics->
drawText(mListBox->getListModel()->getElementAt(mListBox->getSelected()),
93 graphics->drawLine(0, h, getWidth() - 1, h);
95 graphics->drawLine(0, h + 1, getWidth() - 1, h + 1);
101 const int bs = getFrameSize();
104 state.
width += bs * 2;
113 const int listBoxHeight = mListBox->getHeight();
114 int height = getFont()->getHeight() + 2 *
mPadding;
118 const int extraHeight = 4;
120 if (mDroppedDown && getParent())
122 int availableHeight = getParent()->getChildrenArea().height - getY() - getFrameSize();
124 if (listBoxHeight > availableHeight - height - extraHeight)
126 mScrollArea->setHeight(availableHeight - height - extraHeight);
127 height = availableHeight;
131 height += listBoxHeight + extraHeight;
132 mScrollArea->setHeight(listBoxHeight);
138 mScrollArea->setWidth(getWidth());
140 mListBox->setWidth(mScrollArea->getChildrenArea().width - 2);
141 mScrollArea->setPosition(0, 0);
150 return gcn::Rectangle(1,
153 getHeight() - mFoldedUpHeight - 4);
156 return gcn::Rectangle();
164 state.
height = mFoldedUpHeight;
173 state.
x = state.
width - skin.getMinWidth();
181 if (keyEvent.isConsumed())
184 const gcn::Key key = keyEvent.getKey();
185 const int selectedIndex = getSelected();
189 else if (key.getValue() ==
Key::UP)
190 setSelected(getSelected() - 1);
192 setSelected(getSelected() + 1);
195 else if (key.getValue() ==
Key::END)
196 setSelected(mListBox->getListModel()->getNumberOfElements() - 1);
202 if (getSelected() != selectedIndex)
203 distributeActionEvent();
208 gcn::DropDown::focusLost(event);
209 releaseModalMouseInputFocus();
214 gcn::DropDown::mousePressed(mouseEvent);
216 if (0 <= mouseEvent.getY() && mouseEvent.getY() < getHeight() &&
217 mouseEvent.getX() >= 0 && mouseEvent.getX() < getWidth() &&
218 mouseEvent.getButton() == gcn::MouseEvent::LEFT && mDroppedDown &&
219 mouseEvent.getSource() == mListBox)
223 releaseModalMouseInputFocus();
224 distributeActionEvent();
230 setSelected(getSelected() - 1);
231 mouseEvent.consume();
232 distributeActionEvent();
237 setSelected(getSelected() + 1);
238 mouseEvent.consume();
239 distributeActionEvent();
248 mFoldedUpHeight = getHeight();
253 getParent()->moveToTop(
this);
257 mListBox->requestFocus();
265 mDroppedDown =
false;
267 mInternalFocusHandler.focusNone();
A drop down box from which you can select different values.
void mouseWheelMovedDown(gcn::MouseEvent &mouseEvent) override
void mouseWheelMovedUp(gcn::MouseEvent &mouseEvent) override
void mousePressed(gcn::MouseEvent &mouseEvent) override
void focusLost(const gcn::Event &event) override
void drawButton(gcn::Graphics *graphics) override
Draws the button with the little down arrow.
DropDown(gcn::ListModel *listModel=nullptr)
Contructor.
void drawFrame(gcn::Graphics *graphics) override
void keyPressed(gcn::KeyEvent &keyEvent) override
gcn::Rectangle getChildrenArea() override
void draw(gcn::Graphics *graphics) override
A central point of control for graphics.
void drawText(const std::string &text, int x, int y, gcn::Graphics::Alignment alignment, const gcn::Color &color, gcn::Font *font, bool outline=false, bool shadow=false, const std::optional< gcn::Color > &outlineColor={}, const std::optional< gcn::Color > &shadowColor={})
void setColor(const gcn::Color &color) override
Theme * getTheme() const
The global GUI theme.
A list box, meant to be used inside a scroll area.
int getGuiAlpha() const
Get the current GUI alpha value.
const Skin & getSkin(SkinType skinType) const
static const gcn::Color & getThemeColor(int type)
Gets the color associated with the type in the default palette (0).
void drawSkin(Graphics *graphics, SkinType type, const WidgetState &state) const