Decompile 8 functions in Source/UI/Edit/UIEditCtrl.cpp, Source/UI/Edit/UIEditVariants.cpp, ...

Batch #16761 by eAthena: 6 byte-identical, 2 confirmed by peer review.

- fn_10756 UIEditCtrl3::DrawBlinkingCaret: byte-identical
- fn_10975 UIChatEditCtrl::PushHistory: byte-identical
- fn_10976 UIWhisperEditCtrl::AddHistory: byte-identical
- fn_10761 UITextureButton::VisitChildren: byte-identical
- fn_10746 UIEditCtrl3::DecodeLinkNumber: logic confirmed by peer review
- fn_10973 UIEditCtrl3::SetLinkedText: logic confirmed by peer review
- fn_13461 UIItemWnd::RefreshSortButton: byte-identical
- fn_10909 UIChatEditCtrl::SendMsg: byte-identical

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-11 08:22:13 +00:00
commit 9e44e92a17
3 changed files with 58 additions and 44 deletions

View file

@ -573,7 +573,7 @@ __declspec(noinline) void UIEditCtrl::TextColor(unsigned char red, unsigned char
// OFFSET: 0x00856EB0
// FUNCTION: fn_10756
void UIEditCtrl3::DrawBlinkingCaret(const std::uint32_t& color) {
if (timeGetTime() / 500 & 1) {
if (1 == timeGetTime() / 500 % 2) {
return;
}
@ -676,7 +676,11 @@ void UIChatEditCtrl::PushHistory() {
}
++this->historyIndex;
this->SetText(this->historyIndex == static_cast<int>(this->history.size()) ? "" : this->history[this->historyIndex].c_str());
if (this->historyIndex == static_cast<int>(this->history.size())) {
this->SetText("");
} else {
this->SetText(this->history[this->historyIndex].c_str());
}
}
// OFFSET: 0x0086A060
@ -727,7 +731,11 @@ void UIWhisperEditCtrl::AddHistory() {
}
}
this->SetText(this->historyIndex == static_cast<int>(this->history.size()) ? "" : this->history[this->historyIndex].c_str());
if (this->historyIndex == static_cast<int>(this->history.size())) {
this->SetText("");
} else {
this->SetText(this->history[this->historyIndex].c_str());
}
}
// OFFSET: 0x0086A550
@ -843,9 +851,11 @@ void UITextureButton::VisitChildren() {
switch (this->geometry.state) {
case 0:
texture = g_texMgr.Load(
(this->toggleEnabled == 1 && this->toggled == 1 ? this->pressedTexture : this->normalTexture).c_str(), 0, false, true, false
);
if (this->toggleEnabled == 1 && this->toggled == 1) {
texture = g_texMgr.Load(this->pressedTexture.c_str(), 0, false, true, false);
} else {
texture = g_texMgr.Load(this->normalTexture.c_str(), 0, false, true, false);
}
break;
case 1:
texture = g_texMgr.Load(this->hoverTexture.c_str(), 0, false, true, false);
@ -4249,11 +4259,12 @@ void UIMerchantItemShopWnd::OnCreate(int width, int height) {
// FUNCTION: fn_10746
int UIEditCtrl3::DecodeLinkNumber(std::string text) {
char digits[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
const int length = static_cast<int>(text.size());
int value = 0;
char* characters = new char[length + 1];
strcpy_s(characters, length + 1, text.c_str());
const int size = static_cast<int>(text.size()) + 1;
char* characters = new char[size];
strcpy_s(characters, size, text.c_str());
const int length = size - 1;
for (int position = 0; position < length; ++position) {
for (int digit = 0; digit < 62; ++digit) {
if (characters[position] != digits[digit]) {
@ -4465,7 +4476,7 @@ std::string UIEditCtrl3::PlaceLineLinks(const char* line, std::string& text, con
// OFFSET: 0x00869810
// FUNCTION: fn_10973
void UIEditCtrl3::SetLinkedText(const char* value) {
std::string resolved = this->ResolveItemLinks(std::string(value, std::strlen(value)));
std::string resolved = this->ResolveItemLinks(std::string(value));
std::vector<std::string> lines;
int width = this->geometry.width - 6;
@ -4483,7 +4494,7 @@ void UIEditCtrl3::SetLinkedText(const char* value) {
if (this->scrollEnabled != 0) {
lines.clear();
resolved = this->ResolveItemLinks(std::string(value, std::strlen(value)));
resolved = this->ResolveItemLinks(std::string(value));
width = this->geometry.width - 6;
if (this->scrollEnabled != 0) {
width += 3 - this->scrollBar->geometry.width;
@ -4492,7 +4503,7 @@ void UIEditCtrl3::SetLinkedText(const char* value) {
this->WrapLines(lines);
}
std::string text(value, std::strlen(value));
std::string text(value);
for (std::size_t index = 0; index < lines.size(); ++index) {
const int lineIndex = static_cast<int>(index);
lines[index] = this->PlaceLineLinks(lines[index].c_str(), text, &lineIndex);
@ -10022,11 +10033,10 @@ void UIItemWnd::RefreshSortButton() {
name += "_off";
}
UIBitmapButton* button = static_cast<UIBitmapButton*>(this->filterButton);
button->SetBitmap(std::format("{}.bmp", name).c_str(), 0, 0);
button->SetBitmap(std::format("{}_over.bmp", name).c_str(), 1, 0);
button->SetBitmap(std::format("{}_press.bmp", name).c_str(), 2, 0);
button->SetTooltip(std::format("{} {}", LookupMessage(MSI_BABY_INDEPENDENCE_RODEX_ERASED), g_sortPrivateTab ? "ON" : "OFF").c_str());
static_cast<UIBitmapButton*>(this->filterButton)->SetBitmap(std::format("{}.bmp", name).c_str(), 0, 0);
static_cast<UIBitmapButton*>(this->filterButton)->SetBitmap(std::format("{}_over.bmp", name).c_str(), 1, 0);
static_cast<UIBitmapButton*>(this->filterButton)->SetBitmap(std::format("{}_press.bmp", name).c_str(), 2, 0);
this->filterButton->SetTooltip(std::format("{} {}", LookupMessage(MSI_BABY_INDEPENDENCE_RODEX_ERASED), g_sortPrivateTab ? "ON" : "OFF").c_str());
this->Invalidate();
}

View file

@ -30,9 +30,8 @@ __forceinline void UIEditCtrl::PaintTextWithPolicy(const std::string* placeholde
} else {
const char* prefix = g_serverLanguage->Prefix(false);
display = prefix + this->text;
const unsigned prefixBytes = static_cast<unsigned>(std::strlen(prefix));
begin = std::min(this->anchor, this->cursor) + prefixBytes;
end = std::max(this->anchor, this->cursor) + g_serverLanguage->candidate.size() + prefixBytes;
begin = std::min(this->anchor, this->cursor) + std::strlen(prefix);
end = std::max(this->anchor, this->cursor) + g_serverLanguage->candidate.size() + std::strlen(prefix);
}
const int left = begin ? this->TextWidth(display.c_str(), begin, 0, 12, 0, 0) : 0;
@ -40,12 +39,22 @@ __forceinline void UIEditCtrl::PaintTextWithPolicy(const std::string* placeholde
if (std::abs(g_serverLanguage->cursor - g_serverLanguage->anchor) != 0) {
this->DrawSelection(left + x, right - left);
if (this->secondColor == 0xFFFFFFFF) {
this->DrawTextAt(x, this->textY, display.c_str(), 0, 0, 12, this->textColor, 0, 0);
} else {
this->DrawEmboldenedText(x, this->textY, display.c_str(), this->textColor, this->secondColor, 0, 0, 12);
}
} else if (!g_serverLanguage->candidate.empty()) {
this->MoveCandidateWindow(left);
this->MoveReadingWindow(right);
if (((timeGetTime() / 500) & 1) == 0) {
this->DrawSelection(left + x, std::max(right - left, 2));
}
if (this->secondColor == 0xFFFFFFFF) {
this->DrawTextAt(x, this->textY, display.c_str(), 0, 0, 12, this->textColor, 0, 0);
} else {
this->DrawEmboldenedText(x, this->textY, display.c_str(), this->textColor, this->secondColor, 0, 0, 12);
}
} else {
if (this->secondColor == 0xFFFFFFFF) {
this->DrawTextAt(x, this->textY, display.c_str(), 0, 0, 12, this->textColor, 0, 0);
@ -58,36 +67,27 @@ __forceinline void UIEditCtrl::PaintTextWithPolicy(const std::string* placeholde
if (this->invalidatesParent != 0 && this->parent) {
this->parent->Invalidate();
}
this->UpdateLinks();
return;
}
} else {
if (this->mask != 0) {
display.assign(this->text.size(), static_cast<char>(this->mask));
} else {
display = this->text;
}
if (this->secondColor == 0xFFFFFFFF) {
this->DrawTextAt(x, this->textY, display.c_str(), 0, 0, 12, this->textColor, 0, 0);
if (placeholderEnabled) {
this->DrawTextAt(x, this->textY, display == "" ? placeholder->c_str() : display.c_str(), 0, 0, 12, placeholderColor, 0, 0);
} else {
this->DrawTextAt(x, this->textY, display.c_str(), 0, 0, 12, this->textColor, 0, 0);
}
} else {
this->DrawEmboldenedText(x, this->textY, display.c_str(), this->textColor, this->secondColor, 0, 0, 12);
}
this->UpdateLinks();
return;
if (this->invalidatesParent != 0 && this->parent) {
this->parent->Invalidate();
}
}
if (this->mask != 0) {
display.assign(this->text.size(), static_cast<char>(this->mask));
} else {
display = this->text;
}
if (this->secondColor == 0xFFFFFFFF) {
if (placeholderEnabled) {
this->DrawTextAt(x, this->textY, display == "" ? placeholder->c_str() : display.c_str(), 0, 0, 12, placeholderColor, 0, 0);
} else {
this->DrawTextAt(x, this->textY, display.c_str(), 0, 0, 12, this->textColor, 0, 0);
}
} else {
this->DrawEmboldenedText(x, this->textY, display.c_str(), this->textColor, this->secondColor, 0, 0, 12);
}
if (this->invalidatesParent != 0 && this->parent) {
this->parent->Invalidate();
}
this->UpdateLinks();
}

View file

@ -942,7 +942,11 @@ int UIChatEditCtrl::SendMsg(UIWindow* sender, int message, std::intptr_t a, std:
case UM_DOWNPUSH:
if (this->history.size() != 0 && this->historyIndex < this->history.size()) {
++this->historyIndex;
this->SetText((this->historyIndex == this->history.size() ? this->pending : this->history[this->historyIndex]).c_str());
if (this->historyIndex == this->history.size()) {
this->SetText(this->pending.c_str());
} else {
this->SetText(this->history[this->historyIndex].c_str());
}
this->OnBeginEdit();
}
break;