aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/EditBox.cpp
blob: 54ee62ef31289ba0111593fc75db4359c0554d10 (plain)
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
#include "stdafx.h"
#include "EditBox.h"
#include "..\Minecraft.World\SharedConstants.h"

EditBox::EditBox(Screen *screen, Font *font, int x, int y, int width, int height, const wstring& value)
{
	// 4J - added initialisers
	maxLength = 0;
	frame = 0;

	this->screen = screen;
	this->font = font;
	this->x = x;
	this->y = y;
	this->width = width;
	this->height = height;
	this->setValue(value);
}

void EditBox::setValue(const wstring& value)
{
	this->value = value;
}

wstring EditBox::getValue()
{
	return value;
}

void EditBox::tick()
{
	frame++;
}

void EditBox::keyPressed(wchar_t ch, int eventKey)
{
    if (!active || !inFocus) {
        return;
    }


    if (ch == 9)
	{
        screen->tabPressed();
    }
/* 4J removed
    if (ch == 22)
	{
        String msg = Screen.getClipboard();
        if (msg == null) msg = "";
        int toAdd = 32 - value.length();
        if (toAdd > msg.length()) toAdd = msg.length();
        if (toAdd > 0) {
            value += msg.substring(0, toAdd);
        }
    }
	*/

    if (eventKey == Keyboard::KEY_BACK && value.length() > 0)
	{
        value = value.substr(0, value.length() - 1);
    }
    if (SharedConstants::acceptableLetters.find(ch) != wstring::npos && (value.length() < maxLength || maxLength == 0))
	{
        value += ch;
    }

}

void EditBox::mouseClicked(int mouseX, int mouseY, int buttonNum)
{
    bool newFocus = active && (mouseX >= x && mouseX < (x + width) && mouseY >= y && mouseY < (y + height));
    focus(newFocus);
}

void EditBox::focus(bool newFocus)
{
    if (newFocus && !inFocus)
	{
        // reset the underscore counter to give quicker selection feedback
        frame = 0;
    }
    inFocus = newFocus;
}

void EditBox::render()
{
    fill(x - 1, y - 1, x + width + 1, y + height + 1, 0xffa0a0a0);
    fill(x, y, x + width, y + height, 0xff000000);

    if (active)
	{
        bool renderUnderscore = inFocus && (frame / 6 % 2 == 0);
        drawString(font, value + (renderUnderscore ? L"_" : L""), x + 4, y + (height - 8) / 2, 0xe0e0e0);
    }
	else
	{
        drawString(font, value, x + 4, y + (height - 8) / 2, 0x707070);
    }
}

void EditBox::setMaxLength(int maxLength)
{
	this->maxLength = maxLength;
}

int EditBox::getMaxLength()
{
	return maxLength;
}