delete unused file
This commit is contained in:
parent
2c320effc6
commit
ae27e7deee
1 changed files with 0 additions and 82 deletions
|
|
@ -1,82 +0,0 @@
|
|||
#pragma once
|
||||
#include "UIDrawable.h"
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
|
||||
// Base class for UI containers that provides common click handling logic
|
||||
class UIContainerBase {
|
||||
protected:
|
||||
// Transform a point from parent coordinates to this container's local coordinates
|
||||
virtual sf::Vector2f toLocalCoordinates(sf::Vector2f point) const = 0;
|
||||
|
||||
// Transform a point from this container's local coordinates to child coordinates
|
||||
virtual sf::Vector2f toChildCoordinates(sf::Vector2f localPoint, int childIndex) const = 0;
|
||||
|
||||
// Get the bounds of this container in parent coordinates
|
||||
virtual sf::FloatRect getBounds() const = 0;
|
||||
|
||||
// Check if a local point is within this container's bounds
|
||||
virtual bool containsPoint(sf::Vector2f localPoint) const = 0;
|
||||
|
||||
// Get click handler if this container has one
|
||||
virtual UIDrawable* getClickHandler() = 0;
|
||||
|
||||
// Get children to check for clicks (can be empty)
|
||||
virtual std::vector<UIDrawable*> getClickableChildren() = 0;
|
||||
|
||||
public:
|
||||
// Standard click handling algorithm for all containers
|
||||
// Returns the deepest UIDrawable that has a click handler and contains the point
|
||||
UIDrawable* handleClick(sf::Vector2f point) {
|
||||
// Transform to local coordinates
|
||||
sf::Vector2f localPoint = toLocalCoordinates(point);
|
||||
|
||||
// Check if point is within our bounds
|
||||
if (!containsPoint(localPoint)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// Check children in reverse z-order (top-most first)
|
||||
// This ensures that elements rendered on top get first chance at clicks
|
||||
auto children = getClickableChildren();
|
||||
|
||||
// TODO: Sort by z-index if not already sorted
|
||||
// std::sort(children.begin(), children.end(),
|
||||
// [](UIDrawable* a, UIDrawable* b) { return a->z_index > b->z_index; });
|
||||
|
||||
for (int i = children.size() - 1; i >= 0; --i) {
|
||||
if (!children[i]->visible) continue;
|
||||
|
||||
sf::Vector2f childPoint = toChildCoordinates(localPoint, i);
|
||||
if (auto target = children[i]->click_at(childPoint)) {
|
||||
// Child (or its descendant) handled the click
|
||||
return target;
|
||||
}
|
||||
// If child didn't handle it, continue checking other children
|
||||
// This allows click-through for elements without handlers
|
||||
}
|
||||
|
||||
// No child consumed the click
|
||||
// Now check if WE have a click handler
|
||||
return getClickHandler();
|
||||
}
|
||||
};
|
||||
|
||||
// Helper for containers with simple box bounds
|
||||
class RectangularContainer : public UIContainerBase {
|
||||
protected:
|
||||
sf::FloatRect bounds;
|
||||
|
||||
sf::Vector2f toLocalCoordinates(sf::Vector2f point) const override {
|
||||
return point - sf::Vector2f(bounds.left, bounds.top);
|
||||
}
|
||||
|
||||
bool containsPoint(sf::Vector2f localPoint) const override {
|
||||
return localPoint.x >= 0 && localPoint.y >= 0 &&
|
||||
localPoint.x < bounds.width && localPoint.y < bounds.height;
|
||||
}
|
||||
|
||||
sf::FloatRect getBounds() const override {
|
||||
return bounds;
|
||||
}
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue