1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include "fsCNativeTextEntry.h"

#if !defined(fsKeyboard)

#include <base/Director.h>
#include <renderer/Renderer.h>

#include <fsCore/fsStr.h>
#include <fsCore/fsPoint.h>
#include <fsCore/fsIFile.h>
#include <fsCore/src/fsCResourceName.h>

#include <fsAppCore/fsIDisplay.h>


fsStr fsCNativeTextEntry::fontNameGet() const<--- The member function 'fsCNativeTextEntry::fontNameGet' can be static.
{
    const auto candidates = {
            fsCResourceName("gui/mainStyles.txt", fsCResourceName::eRES_LOCATION_ASSETS),
            fsCResourceName("gui/fontStyles.txt", fsCResourceName::eRES_LOCATION_ASSETS)
    };

    for (auto candidate: candidates) {
        if (fsIFile::fileExistsGet(candidate))
        {
            const fsStr fontExt(".ttf");
            fsStr styleData = fsIFile::strGetFromFile(candidate);
            if (styleData.find("style sansTitleFont") != fsStr::npos)
            {
                styleData.chomp("style sansTitleFont");
                styleData.erase(styleData.find(fontExt) + fontExt.dataSizeGet());
                styleData.erase(0, styleData.find("=") + 1);
                styleData.leadingWhitespaceTrim();
                return styleData;
            }
        }
    }
    return "fonts/arial.ttf";
}

void fsCNativeTextEntry::matrixApplyDo(const fsAffineMtx2d& pRenderMatrix)
{
}

ax::Node* fsCNativeTextEntry::implGet() const
{
	return mImpl;
}

void fsCNativeTextEntry::virtualKeyboardActivate(const fsStr& pPrompt, fsS32 pMaxStingLength, const fsPoint& pPos, std::function<void(const fsStr&)> pFinalise)
{
	if (!mImpl)
	{
		mFinalise = pFinalise;
		mImpl = ax::ui::EditBox::create(ax::Size(270 * fsIDisplay::instanceGet()->scaleGet().x,
			54 * fsIDisplay::instanceGet()->scaleGet().y),
			"gui/newplayer/textfield.png",
			ax::ui::Widget::TextureResType::LOCAL),

        mImpl->retain();

		//    mImpl->setTextHorizontalAlignment(ax::TextHAlignment::CENTER);

		mImpl->setPosition(ax::Vec2(pPos.x, pPos.y));

        const auto fontName = fontNameGet();

#if AX_TARGET_PLATFORM == AX_PLATFORM_ANDROID
        const auto fontSize(24);
#elif AX_TARGET_PLATFORM == AX_PLATFORM_IOS
        const auto fontSize(38);
#endif

		mImpl->setFont(fontName.utf8Get(), fontSize);
		mImpl->setFontColor(ax::Color3B::WHITE);

        mImpl->setPlaceholderFont(fontName.utf8Get(), fontSize);
		mImpl->setPlaceholderFontColor(ax::Color3B::WHITE);

        mImpl->setPlaceHolder(pPrompt.utf8Get());
		mImpl->setMaxLength(12);

		mImpl->setReturnType(ax::ui::EditBox::KeyboardReturnType::DONE);
		mImpl->setInputMode(ax::ui::EditBox::InputMode::SINGLE_LINE);
		mImpl->setInputFlag(ax::ui::EditBox::InputFlag::INITIAL_CAPS_WORD);

		mImpl->setDelegate(new fsTextEntry(const_cast<fsCNativeTextEntry*>(this)));
		mImpl->openKeyboard();
	} 
    else 
    {
        mImpl->setVisible(true);
        mImpl->openKeyboard();
    }
}

void fsCNativeTextEntry::update(fsS32 pDeltaMs)
{
	if (mImpl)
	{
		mImpl->update(pDeltaMs);
	}
}

void fsCNativeTextEntry::renderDo()
{
	if (mImpl)
	{
		mImpl->ax::Node::visit();
		ax::Director::getInstance()->getRenderer()->render();
	}
}

fsCNativeTextEntry::fsCNativeTextEntry():
fsINative(),
mImpl(nullptr)
{
}

fsCNativeTextEntry::~fsCNativeTextEntry()
{
	if (mImpl)
	{
		mImpl->removeFromParentAndCleanup(true);
	}
}

void fsCNativeTextEntry::fsTextEntry::editBoxReturn(ax::ui::EditBox* editBox)
{
	mParent->mFinalise(editBox->getText());
};

#endif