*/
#include "guiConfirmRegistration.h"
-#include "client.h"
+#include "client/client.h"
#include <IGUICheckBox.h>
#include <IGUIButton.h>
#include <IGUIStaticText.h>
#include <IGUIFont.h>
#include "intlGUIEditBox.h"
+#include "porting.h"
#include "gettext.h"
m_client(client), m_playername(playername), m_password(password),
m_address(address), m_aborted(aborted)
{
+#ifdef __ANDROID__
+ m_touchscreen_visible = false;
+#endif
}
GUIConfirmRegistration::~GUIConfirmRegistration()
/*
Calculate new sizes and positions
*/
- core::rect<s32> rect(screensize.X / 2 - 600 / 2, screensize.Y / 2 - 360 / 2,
- screensize.X / 2 + 600 / 2, screensize.Y / 2 + 360 / 2);
-
- DesiredRect = rect;
+ const float s = m_gui_scale;
+ DesiredRect = core::rect<s32>(
+ screensize.X / 2 - 600 * s / 2,
+ screensize.Y / 2 - 360 * s / 2,
+ screensize.X / 2 + 600 * s / 2,
+ screensize.Y / 2 + 360 * s / 2
+ );
recalculateAbsolutePosition(false);
- v2s32 size = rect.getSize();
+ v2s32 size = DesiredRect.getSize();
v2s32 topleft_client(0, 0);
const wchar_t *text;
/*
Add stuff
*/
- s32 ypos = 30;
+ s32 ypos = 30 * s;
{
std::string address = m_address;
if (address.empty())
address = "localhost";
- core::rect<s32> rect2(0, 0, 540, 180);
- rect2 += topleft_client + v2s32(30, ypos);
+ core::rect<s32> rect2(0, 0, 540 * s, 180 * s);
+ rect2 += topleft_client + v2s32(30 * s, ypos);
static const std::string info_text_template = strgettext(
"You are about to join the server at %1$s with the "
"name \"%2$s\" for the first time. If you proceed, a "
"Join to confirm account creation or click Cancel to "
"abort.");
char info_text_buf[1024];
- snprintf(info_text_buf, sizeof(info_text_buf), info_text_template.c_str(),
- address.c_str(), m_playername.c_str());
+ porting::mt_snprintf(info_text_buf, sizeof(info_text_buf),
+ info_text_template.c_str(), address.c_str(),
+ m_playername.c_str());
- gui::IGUIEditBox *e = new gui::intlGUIEditBox(
- utf8_to_wide_c(info_text_buf), true, Environment, this,
- ID_message, rect2, false, true);
+ wchar_t *info_text_buf_wide = utf8_to_wide_c(info_text_buf);
+ gui::IGUIEditBox *e = new gui::intlGUIEditBox(info_text_buf_wide, true,
+ Environment, this, ID_message, rect2, false, true);
+ delete[] info_text_buf_wide;
e->drop();
e->setMultiLine(true);
e->setWordWrap(true);
e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_CENTER);
}
- ypos += 210;
+ ypos += 210 * s;
{
- core::rect<s32> rect2(0, 0, 540, 30);
- rect2 += topleft_client + v2s32(30, ypos);
+ core::rect<s32> rect2(0, 0, 540 * s, 30 * s);
+ rect2 += topleft_client + v2s32(30 * s, ypos);
gui::IGUIEditBox *e = Environment->addEditBox(m_pass_confirm.c_str(),
rect2, true, this, ID_confirmPassword);
e->setPasswordBox(true);
}
- ypos += 60;
+ ypos += 60 * s;
{
- core::rect<s32> rect2(0, 0, 230, 35);
- rect2 = rect2 + v2s32(size.X / 2 - 220, ypos);
+ core::rect<s32> rect2(0, 0, 230 * s, 35 * s);
+ rect2 = rect2 + v2s32(size.X / 2 - 220 * s, ypos);
text = wgettext("Register and Join");
Environment->addButton(rect2, this, ID_confirm, text);
delete[] text;
}
{
- core::rect<s32> rect2(0, 0, 120, 35);
- rect2 = rect2 + v2s32(size.X / 2 + 70, ypos);
+ core::rect<s32> rect2(0, 0, 120 * s, 35 * s);
+ rect2 = rect2 + v2s32(size.X / 2 + 70 * s, ypos);
text = wgettext("Cancel");
Environment->addButton(rect2, this, ID_cancel, text);
delete[] text;
}
{
- core::rect<s32> rect2(0, 0, 200, 20);
- rect2 += topleft_client + v2s32(30, ypos - 40);
+ core::rect<s32> rect2(0, 0, 200 * s, 20 * s);
+ rect2 += topleft_client + v2s32(30 * s, ypos - 40 * s);
text = wgettext("Passwords do not match!");
IGUIElement *e = Environment->addStaticText(
text, rect2, false, true, this, ID_message);
driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);
gui::IGUIElement::draw();
+#ifdef __ANDROID__
+ getAndroidUIInput();
+#endif
}
void GUIConfirmRegistration::closeMenu(bool goNext)
bool GUIConfirmRegistration::OnEvent(const SEvent &event)
{
if (event.EventType == EET_KEY_INPUT_EVENT) {
- if (event.KeyInput.Key == KEY_ESCAPE && event.KeyInput.PressedDown) {
+ // clang-format off
+ if ((event.KeyInput.Key == KEY_ESCAPE ||
+ event.KeyInput.Key == KEY_CANCEL) &&
+ event.KeyInput.PressedDown) {
closeMenu(false);
return true;
}
+ // clang-format on
if (event.KeyInput.Key == KEY_RETURN && event.KeyInput.PressedDown) {
acceptInput();
if (processInput())
return false;
}
+
+#ifdef __ANDROID__
+bool GUIConfirmRegistration::getAndroidUIInput()
+{
+ if (!hasAndroidUIInput() || m_jni_field_name != "password")
+ return false;
+
+ std::string text = porting::getInputDialogValue();
+ gui::IGUIElement *e = getElementFromId(ID_confirmPassword);
+ if (e)
+ e->setText(utf8_to_wide(text).c_str());
+
+ m_jni_field_name.clear();
+ return false;
+}
+#endif