|
|
- #include "toolbar.hpp"
-
- Toolbar::Toolbar():
- toolbarTopTexture(nullptr),
- toolbarBottomTexture(nullptr),
- toolbarMiddleTexture(nullptr),
- buttonRaisedTexture(nullptr),
- buttonDepressedTexture(nullptr),
- depressedButtonIndex(0)
- {
- toolbarContainer.addChild(&toolbarTopImage);
- toolbarContainer.addChild(&toolbarBottomImage);
- toolbarContainer.addChild(&toolbarMiddleImage);
- }
-
- void Toolbar::setToolbarTopTexture(Texture* texture)
- {
- toolbarTopTexture = texture;
- toolbarTopImage.setTexture(toolbarTopTexture);
- }
-
- void Toolbar::setToolbarBottomTexture(Texture* texture)
- {
- toolbarBottomTexture = texture;
- toolbarBottomImage.setTexture(toolbarBottomTexture);
- }
-
- void Toolbar::setToolbarMiddleTexture(Texture* texture)
- {
- toolbarMiddleTexture = texture;
- toolbarMiddleImage.setTexture(toolbarMiddleTexture);
- }
-
- void Toolbar::setButtonRaisedTexture(Texture* texture)
- {
- buttonRaisedTexture = texture;
- }
-
- void Toolbar::setButtonDepressedTexture(Texture* texture)
- {
- buttonDepressedTexture = texture;
- }
-
- void Toolbar::resize()
- {
- int toolbarWidth = toolbarMiddleTexture->getWidth();
- int toolbarHeight = toolbarTopTexture->getHeight() + toolbarBottomTexture->getHeight() + toolbarMiddleTexture->getHeight() * std::max(0, (int)buttons.size() - 1);
- float borderSpacing = 8.0f;
- float buttonOffsetY = ((toolbarTopTexture->getHeight() + toolbarBottomTexture->getHeight()) - buttonRaisedTexture->getHeight()) / 2;
-
- // Resize toolbar
- toolbarContainer.setAnchor(Vector2(0.0f, 0.5f));
- toolbarContainer.setDimensions(Vector2(toolbarWidth, toolbarHeight));
- toolbarContainer.setTranslation(Vector2(borderSpacing, 0.0f));
-
- toolbarTopImage.setAnchor(Vector2(0.0f, 0.0f));
- toolbarTopImage.setDimensions(Vector2(toolbarTopTexture->getWidth(), toolbarTopTexture->getHeight()));
- toolbarTopImage.setTranslation(Vector2(0.0f, 0.0f));
-
- toolbarBottomImage.setAnchor(Vector2(0.0f, 1.0f));
- toolbarBottomImage.setDimensions(Vector2(toolbarBottomTexture->getWidth(), toolbarBottomTexture->getHeight()));
- toolbarBottomImage.setTranslation(Vector2(0.0f, 0.0f));
-
- toolbarMiddleImage.setAnchor(Vector2(0.0f, 0.5f));
- toolbarMiddleImage.setDimensions(Vector2(toolbarMiddleTexture->getWidth(), toolbarMiddleTexture->getHeight() * std::max(0, (int)buttons.size() - 1)));
- toolbarMiddleImage.setTranslation(Vector2(0.0f, 0.0f));
-
- // Resize buttons and icons
- for (std::size_t i = 0; i < buttons.size(); ++i)
- {
- UIImage* button = buttons[i];
- button->setAnchor(Vector2(0.5f, 0.0f));
- button->setDimensions(Vector2(buttonRaisedTexture->getWidth(), buttonRaisedTexture->getHeight()));
- button->setTranslation(Vector2(0.0f, buttonOffsetY + i * toolbarMiddleTexture->getHeight()));
-
- UIImage* icon = icons[i];
- icon->setAnchor(Vector2(0.5f, 0.5f));
- icon->setDimensions(Vector2(icon->getTexture()->getWidth(), icon->getTexture()->getHeight()));
- icon->setTranslation(Vector2(0.0f, 0.0f));
- }
- }
-
- void Toolbar::addButton(Texture* iconTexture, std::function<void()> pressCallback, std::function<void()> releaseCallback)
- {
- if (depressedButtonIndex == buttons.size())
- {
- ++depressedButtonIndex;
- }
-
- // Allocate new button and icon
- UIImage* button = new UIImage();
- button->setTexture(buttonRaisedTexture);
- buttons.push_back(button);
-
- UIImage* icon = new UIImage();
- icon->setTexture(iconTexture);
- icons.push_back(icon);
-
- // Add button to toolbar
- toolbarContainer.addChild(button);
-
- // Add icon to button
- button->addChild(icon);
-
- // Setup callbacks
- std::size_t buttonIndex = buttons.size() - 1;
- //button->setMouseOverCallback(std::bind(Toolbar::selectMenuItem, this, buttonIndex));
- //button->setMouseMovedCallback(std::bind(Toolbar::selectMenuItem, this, buttonIndex));
- button->setMousePressedCallback(std::bind(Toolbar::pressButton, this, buttonIndex));
-
- pressCallbacks.push_back(pressCallback);
- releaseCallbacks.push_back(releaseCallback);
- }
-
- void Toolbar::pressButton(std::size_t index)
- {
- releaseButton(depressedButtonIndex);
-
- if (index == depressedButtonIndex)
- {
- depressedButtonIndex = buttons.size();
- }
- else
- {
- depressedButtonIndex = index;
- buttons[index]->setTexture(buttonDepressedTexture);
- icons[index]->setTranslation(Vector2(2.0f, 2.0f));
-
- pressCallbacks[index]();
- }
- }
-
- void Toolbar::releaseButton(std::size_t index)
- {
- if (index < buttons.size())
- {
- buttons[index]->setTexture(buttonRaisedTexture);
- icons[index]->setTranslation(Vector2(0.0f, 0.0f));
-
- releaseCallbacks[index]();
- }
- }
|