Files
HuajisheTools/editor/button.cpp
2025-12-24 13:15:25 +08:00

50 lines
1.4 KiB
C++

#include "Button.h"
Button::Button(float x, float y, float w, float h) {
rect = {x, y, w, h};
hovered = false;
pressed = false;
clicked = false;
}
void Button::updateHover(float mouseX, float mouseY) {
// Corrected logic: check mouse against x + width and y + height
hovered = (mouseX >= rect.x && mouseX <= rect.x + rect.w &&
mouseY >= rect.y && mouseY <= rect.y + rect.h);
}
void Button::handleEvent(const SDL_Event& e) {
clicked = false; // Reset every frame
if (e.type == SDL_EVENT_MOUSE_MOTION) {
updateHover(e.motion.x, e.motion.y);
}
if (e.type == SDL_EVENT_MOUSE_BUTTON_DOWN) {
if (e.button.button == SDL_BUTTON_LEFT && hovered) {
pressed = true;
}
}
if (e.type == SDL_EVENT_MOUSE_BUTTON_UP) {
if (e.button.button == SDL_BUTTON_LEFT) {
// Only a "click" if we release while still over the button
if (pressed && hovered) {
clicked = true;
}
pressed = false;
}
}
}
void Button::render(SDL_Renderer* renderer) {
if (pressed)
SDL_SetRenderDrawColor(renderer, 100, 100, 100, 255); // Darkest
else if (hovered)
SDL_SetRenderDrawColor(renderer, 180, 180, 180, 255); // Lightest
else
SDL_SetRenderDrawColor(renderer, 140, 140, 140, 255); // Default
SDL_RenderFillRect(renderer, &rect);
}