Decompile 8 functions in Source/UI/Buttons/UITextButton.cpp

Batch #12361 by cremane: 0 byte-identical, 8 confirmed by peer review.

- fn_11392 UITextButton::Paint: logic confirmed by peer review
- fn_11254 UITextButton::Configure: logic confirmed by peer review
- fn_11376 UIRPImageWnd::Paint: logic confirmed by peer review
- fn_11460 UITabControl::Slot28: logic confirmed by peer review
- fn_11516 UITreeView::Slot53: logic confirmed by peer review
- fn_11448 UIBasicItemCtrl::Slot28: logic confirmed by peer review
- fn_11449 UIBasicSkillCtrl::Slot28: logic confirmed by peer review
- fn_11452 UIINT64BarGraph::Slot28: logic confirmed by peer review

Peer-reviewed-by: Yommy, gordaoprogramas, dori
Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes).
This commit is contained in:
ragnarok-clanker 2026-11-05 16:08:50 +00:00
commit e7cd4d4840

View file

@ -81,7 +81,7 @@ void UITextButton::Configure(const char* text, std::uint32_t color, int family,
this->m_underline = underline;
const auto extent = static_cast<std::uint32_t>(height) * static_cast<std::uint32_t>(std::strlen(text));
const int width = static_cast<int>(extent / 2 + 4u * outline + 12u);
this->Resize(width, height + 2);
this->UIWindow::Resize(width, height + 2);
this->Slot15(width, height + 2);
this->Slot22(width, height + 2);
}
@ -89,38 +89,18 @@ void UITextButton::Configure(const char* text, std::uint32_t color, int family,
// OFFSET: 0x0088F820
// FUNCTION: fn_11392
void UITextButton::Paint() {
if (this->geometry.surface) {
this->geometry.surface->Fill(nullptr, 0xFFFF00FFu);
}
this->ClearSurface(0xFFFF00FFu);
if (this->parent) {
this->parent->Invalidate();
}
TextContext context(*this->geometry.surface);
context.SetFont(this->m_family, this->m_height, this->m_outline != 0, 0);
const int bytes = static_cast<int>(std::strlen(this->m_text.c_str()));
if (this->m_outline != 0) {
if (this->HasTextBackground()) {
context.SetBackground(this->TextBackground(), OPAQUE);
}
context.SetColor(this->m_outlineColor);
context.Draw(0, 1, this->m_text.c_str(), bytes);
context.Draw(2, 1, this->m_text.c_str(), bytes);
context.Draw(1, 0, this->m_text.c_str(), bytes);
context.Draw(1, 2, this->m_text.c_str(), bytes);
if (this->m_outline) {
DrawOutlinedText(*this, 1, 1, this->m_text.c_str(), 0, this->m_color, this->m_outlineColor, this->m_family, this->m_height, 1, 0);
} else {
this->DrawTextAt(1, 1, this->m_text.c_str(), 0, this->m_family, this->m_height, this->m_color, 0, 0);
}
context.SetColor(this->m_color);
context.Draw(1, 1, this->m_text.c_str(), bytes);
if (this->m_outline != 0 && this->HasTextBackground()) {
context.SetBackground(this->TextBackground(), TRANSPARENT);
}
if (this->m_underline != 0) {
if (this->m_underline) {
this->FillRegion(0, (this->geometry.height - 1), this->geometry.width, 1, this->m_color);
}
}
@ -437,10 +417,10 @@ void UIINT64BarGraph::Slot28(int, int) {
int screenX = 0, screenY = -16;
for (const UIWindow* window = this; window; window = window->parent) {
screenX = (screenX + window->geometry.x);
screenY = (screenY + window->geometry.y);
}
this->ToScreen(screenX, screenY);
char text[260];
std::memset(text, 0, sizeof(text));
@ -488,10 +468,10 @@ void UITabControl::Slot28(int x, int y) {
int screenY = -20;
for (const UIWindow* window = this; window; window = window->parent) {
screenX = (screenX + window->geometry.x);
screenY = (screenY + window->geometry.y);
}
this->ToScreen(screenX, screenY);
g_modeMgr.gameMode->ShowTooltip(this->tooltips[index].c_str(), screenX, screenY, -1, false, true);
}
@ -533,10 +513,10 @@ void UIBasicItemCtrl::Slot28(int, int) {
int screenX = 0, screenY = 0;
for (const UIWindow* window = this; window; window = window->parent) {
screenX = (screenX + window->geometry.x);
screenY = (screenY + window->geometry.y);
}
this->ToScreen(screenX, screenY);
if (!text.empty()) {
g_modeMgr.gameMode->ShowTooltip(text.c_str(), screenX, screenY, -1, false, true);
@ -552,10 +532,10 @@ void UIBasicSkillCtrl::Slot28(int, int) {
int screenX = 0, screenY = 0;
for (const UIWindow* window = this; window; window = window->parent) {
screenX = (screenX + window->geometry.x);
screenY = (screenY + window->geometry.y);
}
this->ToScreen(screenX, screenY);
LuaScript& script = *g_session.m_hotkeyScript;
CSkillInfo skill = g_session.LookupSkill(static_cast<std::uint32_t>(this->m_skillId));
@ -1482,7 +1462,6 @@ void UITreeView::Slot53() {
if (bar->position > bar->maximum) {
bar->position = bar->maximum;
bar->Invalidate();
}
if (!overflow) {
@ -1490,7 +1469,8 @@ void UITreeView::Slot53() {
this->itemCount = 0;
}
bar->Invalidate();
this->verticalBar->Invalidate();
}
// OFFSET: 0x00892F90
@ -3416,7 +3396,7 @@ void UITextViewEX::Paint() {
void UIRPImageWnd::Paint() {
this->SetSolid(g_renderer->primitives, this->geometry.width, this->geometry.height, 0);
for (int i = 0; i < this->m_imageCount; ++i) {
this->DrawNamed(g_renderer->primitives, 0, 0, this->m_imageName.c_str(), 0xFFFFFFFF, 0, 0);
this->DrawNamed(g_renderer->primitives, 0, 0, this->m_imageName, 0xFFFFFFFF, 0, 0);
}
}