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
#include "fsCNativeTextEntry.h"

#if !defined fsDesktop

#include <base/CCDirector.h>
#include <renderer/CCRenderer.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)
{
}

cocos2d::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 = cocos2d::ui::EditBox::create(cocos2d::Size(270 * fsIDisplay::instanceGet()->scaleGet().x,
			54 * fsIDisplay::instanceGet()->scaleGet().y),
			"gui/newplayer/textfield.png",
			cocos2d::ui::Widget::TextureResType::LOCAL),

			mImpl->retain();

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

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

        fsChar const* const fontName = fontNameGet().utf8Get();

#if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
        const auto fontSize(22);
#elif CC_TARGET_PLATFORM == CC_PLATFORM_IOS
        const auto fontSize(52);
#endif

		mImpl->setFont(fontName, fontSize);
		mImpl->setFontColor(cocos2d::Color3B::WHITE);

        mImpl->setPlaceholderFont(fontName, fontSize);
		mImpl->setPlaceholderFontColor(cocos2d::Color3B::WHITE);

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

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

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

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

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

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

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

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

#endif