From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.Client/Button.cpp | 85 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 Minecraft.Client/Button.cpp (limited to 'Minecraft.Client/Button.cpp') diff --git a/Minecraft.Client/Button.cpp b/Minecraft.Client/Button.cpp new file mode 100644 index 00000000..7de105c1 --- /dev/null +++ b/Minecraft.Client/Button.cpp @@ -0,0 +1,85 @@ +#include "stdafx.h" +#include "Button.h" +#include "Textures.h" + +Button::Button(int id, int x, int y, const wstring& msg) +{ + init(id, x, y, 200, 20, msg); +} + +Button::Button(int id, int x, int y, int w, int h, const wstring& msg) +{ + init(id, x, y, w, h, msg); +} + +// 4J - added +void Button::init(int id, int x, int y, int w, int h, const wstring& msg) +{ + active = true; + visible = true; + + // this bit of code from original ctor + this->id = id; + this->x = x; + this->y = y; + this->w = w; + this->h = h; + this->msg = msg; +} + +int Button::getYImage(bool hovered) +{ + int res = 1; + if (!active) res = 0; + else if (hovered) res = 2; + return res; +} + +void Button::render(Minecraft *minecraft, int xm, int ym) +{ + if (!visible) return; + + Font *font = minecraft->font; + + glBindTexture(GL_TEXTURE_2D, minecraft->textures->loadTexture(TN_GUI_GUI)); // 4J was L"/gui/gui.png" + glColor4f(1, 1, 1, 1); + + + bool hovered = xm >= x && ym >= y && xm < x + w && ym < y + h; + int yImage = getYImage(hovered); + + blit(x, y, 0, 46 + yImage * 20, w / 2, h); + blit(x + w / 2, y, 200 - w / 2, 46 + yImage * 20, w / 2, h); + + renderBg(minecraft, xm, ym); + + if (!active) + { + drawCenteredString(font, msg, x + w / 2, y + (h - 8) / 2, 0xffa0a0a0); + } + else + { + if (hovered) + { + drawCenteredString(font, msg, x + w / 2, y + (h - 8) / 2, 0xffffa0); + } + else + { + drawCenteredString(font, msg, x + w / 2, y + (h - 8) / 2, 0xe0e0e0); + } + } + +} + +void Button::renderBg(Minecraft *minecraft, int xm, int ym) +{ +} + +void Button::released(int mx, int my) +{ +} + +bool Button::clicked(Minecraft *minecraft, int mx, int my) +{ + return active && mx >= x && my >= y && mx < x + w && my < y + h; +} \ No newline at end of file -- cgit v1.2.3