Files
BluTac10-Xbox_Neo/Minecraft.Client/Common/UI/UIControl_Base.cpp
George V. 506ebd2176 Merge remote-tracking branch 'itsRevela/main'
# Conflicts:
#	.github/workflows/nightly.yml
#	.gitignore
#	Minecraft.Client/ChatScreen.cpp
#	Minecraft.Client/ClientConnection.cpp
#	Minecraft.Client/Common/Audio/SoundEngine.cpp
#	Minecraft.Client/Common/Audio/SoundEngine.h
#	Minecraft.Client/Common/Media/MediaWindows64.arc
#	Minecraft.Client/Common/UI/IUIScene_HUD.cpp
#	Minecraft.Client/Common/UI/UIControl_Base.cpp
#	Minecraft.Client/Common/UI/UIScene_DeathMenu.cpp
#	Minecraft.Client/Common/UI/UIScene_JoinMenu.cpp
#	Minecraft.Client/Common/XUI/XUI_Chat.cpp
#	Minecraft.Client/Common/XUI/XUI_Death.cpp
#	Minecraft.Client/Font.cpp
#	Minecraft.Client/Gui.cpp
#	Minecraft.Client/PendingConnection.cpp
#	Minecraft.Client/PlayerConnection.cpp
#	Minecraft.Client/PlayerConnection.h
#	Minecraft.Client/PlayerList.cpp
#	Minecraft.Client/Windows64/Network/WinsockNetLayer.cpp
#	Minecraft.Client/Windows64/Network/WinsockNetLayer.h
#	Minecraft.Client/Windows64Media/strings.h
#	Minecraft.Client/cmake/sources/Common.cmake
#	Minecraft.Server/Console/ServerCliEngine.cpp
#	Minecraft.Server/Console/commands/whitelist/CliCommandWhitelist.cpp
#	Minecraft.Server/Windows64/ServerMain.cpp
#	Minecraft.World/WitherBoss.h
#	Minecraft.World/cmake/sources/Common.cmake
#	README.md
2026-04-09 15:21:43 +03:00

132 lines
3.7 KiB
C++

#include "stdafx.h"
#include "UI.h"
#include "UIControl.h"
#include "../../../Minecraft.World/StringHelpers.h"
#include "../../../Minecraft.World/JavaMath.h"
#include "../../../Minecraft.World/ArabicShaping.h"
UIControl_Base::UIControl_Base()
{
m_bLabelChanged = false;
m_label;
m_id = 0;
}
bool UIControl_Base::setupControl(UIScene *scene, IggyValuePath *parent, const string &controlName)
{
bool success = UIControl::setupControl(scene,parent,controlName);
m_setLabelFunc = registerFastName(L"SetLabel");
m_initFunc = registerFastName(L"Init");
m_funcGetH = registerFastName(L"height");
m_funcGetLabel = registerFastName(L"GetLabel");
m_funcCheckLabelWidths = registerFastName(L"CheckLabelWidths");
return success;
}
int UIControl_Base::height() {
//IggyDataValue result;
//IggyResult out = IggyPlayerCallMethodRS(m_parentScene->getMovie(), &result, getIggyValuePath(), m_funcGetH, 0, nullptr);
F64 t;
IggyValueGetF64RS(getIggyValuePath(), m_funcGetH, nullptr, &t);
if (t)
{
//m_label = wstring((wchar_t*)result.string16.string, result.string16.length);
return static_cast<S32>(t);
}
return -1;
}
void UIControl_Base::tick()
{
UIControl::tick();
if ( m_label.needsUpdating() || m_bLabelChanged )
{
//app.DebugPrintf("Calling SetLabel - '%ls'\n", m_label.c_str());
m_bLabelChanged = false;
// Shape the text before sending to Iggy; m_label stays unshaped for future updates
wstring shaped = shapeArabicText(m_label.getString());
IggyDataValue result;
IggyDataValue value[1];
value[0].type = IGGY_DATATYPE_string_UTF16;
IggyStringUTF16 stringVal;
stringVal.string = (IggyUTF16*) shaped.c_str();
stringVal.length = (int)shaped.length();
value[0].string16 = stringVal;
IggyResult out = IggyPlayerCallMethodRS ( m_parentScene->getMovie() , &result, getIggyValuePath() , m_setLabelFunc , 1 , value );
m_label.setUpdated();
}
}
void UIControl_Base::setLabel(UIString label, bool instant, bool force)
{
if( force || ((!m_label.empty() || !label.empty()) && m_label.compare(label) != 0) ) m_bLabelChanged = true;
m_label = label;
if(m_bLabelChanged && instant)
{
m_bLabelChanged = false;
// Shape the text before sending to Iggy; m_label stays unshaped for future updates
wstring shaped = shapeArabicText(m_label.getString());
IggyDataValue result;
IggyDataValue value[1];
value[0].type = IGGY_DATATYPE_string_UTF16;
IggyStringUTF16 stringVal;
stringVal.string = (IggyUTF16*) shaped.c_str();
stringVal.length = (int)shaped.length();
value[0].string16 = stringVal;
IggyResult out = IggyPlayerCallMethodRS ( m_parentScene->getMovie() , &result, getIggyValuePath() , m_setLabelFunc , 1 , value );
}
}
const wchar_t* UIControl_Base::getLabel()
{
IggyDataValue result;
IggyResult out = IggyPlayerCallMethodRS(m_parentScene->getMovie(), &result, getIggyValuePath(), m_funcGetLabel, 0, nullptr);
if(result.type == IGGY_DATATYPE_string_UTF16)
{
m_label = wstring((wchar_t *)result.string16.string, result.string16.length);
}
return m_label.c_str();
}
void UIControl_Base::setAllPossibleLabels(int labelCount, wchar_t labels[][256])
{
IggyDataValue result;
IggyDataValue *value = new IggyDataValue[labelCount];
IggyStringUTF16 * stringVal = new IggyStringUTF16[labelCount];
for(unsigned int i = 0; i < labelCount; ++i)
{
stringVal[i].string = static_cast<IggyUTF16 *>(labels[i]);
stringVal[i].length = wcslen(labels[i]);
value[i].type = IGGY_DATATYPE_string_UTF16;
value[i].string16 = stringVal[i];
}
IggyResult out = IggyPlayerCallMethodRS ( m_parentScene->getMovie() , &result, getIggyValuePath() , m_funcCheckLabelWidths , labelCount , value );
delete [] value;
delete [] stringVal;
}
bool UIControl_Base::hasFocus()
{
return m_parentScene->controlHasFocus( this );
}