mirror of
https://github.com/2003scape/deep-c-rsc.git
synced 2024-03-22 05:49:51 -04:00
709 lines
31 KiB
Java
709 lines
31 KiB
Java
|
public class Panel {
|
||
|
|
||
|
public static boolean drawBackgroundArrow = true;
|
||
|
public static int baseSpriteStart;
|
||
|
public static int redMod = 114;
|
||
|
public static int greenMod = 114;
|
||
|
public static int blueMod = 176;
|
||
|
public static int textListEntryHeightMod;
|
||
|
public boolean controlShown[];
|
||
|
public boolean controlListScrollbarHandleDragged[];
|
||
|
public boolean controlMaskText[];
|
||
|
public boolean controlClicked[];
|
||
|
public int controlFlashText[];
|
||
|
public int controlListEntryCount[];
|
||
|
public int controlListEntryMouseButtonDown[];
|
||
|
public int controlListEntryMouseOver[];
|
||
|
public boolean aBoolean219;
|
||
|
protected Surface surface;
|
||
|
int controlCount;
|
||
|
int maxControls;
|
||
|
boolean controlUseAlternativeColour[];
|
||
|
int controlX[];
|
||
|
int controlY[];
|
||
|
int controlType[];
|
||
|
int controlWidth[];
|
||
|
int controlHeight[];
|
||
|
int controlInputMaxLen[];
|
||
|
int controlTextSize[];
|
||
|
String controlText[];
|
||
|
String controlListEntries[][];
|
||
|
int mouseX;
|
||
|
int mouseY;
|
||
|
int mouseLastButtonDown;
|
||
|
int mouseButtonDown;
|
||
|
int focusControlIndex;
|
||
|
int mouseMetaButtonHeld;
|
||
|
int colourScrollbarTop;
|
||
|
int colourScrollbarBottom;
|
||
|
int colourScrollbarHandleLeft;
|
||
|
int colourScrollbarHandleMid;
|
||
|
int colourScrollbarHandleRight;
|
||
|
int colourRoundedBoxOut;
|
||
|
int colourRoundedBoxMid;
|
||
|
int colourRoundedBoxIn;
|
||
|
int colourBoxTopNBottom;
|
||
|
int colourBoxTopNBottom2;
|
||
|
int colourBoxLeftNRight2;
|
||
|
int colourBoxLeftNRight;
|
||
|
|
||
|
public Panel(Surface surface, int max) {
|
||
|
focusControlIndex = -1;
|
||
|
aBoolean219 = true;
|
||
|
this.surface = surface;
|
||
|
maxControls = max;
|
||
|
controlShown = new boolean[max];
|
||
|
controlListScrollbarHandleDragged = new boolean[max];
|
||
|
controlMaskText = new boolean[max];
|
||
|
controlClicked = new boolean[max];
|
||
|
controlUseAlternativeColour = new boolean[max];
|
||
|
controlFlashText = new int[max];// not so sure
|
||
|
controlListEntryCount = new int[max];
|
||
|
controlListEntryMouseButtonDown = new int[max];
|
||
|
controlListEntryMouseOver = new int[max];
|
||
|
controlX = new int[max];
|
||
|
controlY = new int[max];
|
||
|
controlType = new int[max];
|
||
|
controlWidth = new int[max];
|
||
|
controlHeight = new int[max];
|
||
|
controlInputMaxLen = new int[max];
|
||
|
controlTextSize = new int[max];
|
||
|
controlText = new String[max];
|
||
|
controlListEntries = new String[max][];
|
||
|
colourScrollbarTop = rgb2longMod(114, 114, 176);
|
||
|
colourScrollbarBottom = rgb2longMod(14, 14, 62);
|
||
|
colourScrollbarHandleLeft = rgb2longMod(200, 208, 232);
|
||
|
colourScrollbarHandleMid = rgb2longMod(96, 129, 184);
|
||
|
colourScrollbarHandleRight = rgb2longMod(53, 95, 115);
|
||
|
colourRoundedBoxOut = rgb2longMod(117, 142, 171);
|
||
|
colourRoundedBoxMid = rgb2longMod(98, 122, 158);
|
||
|
colourRoundedBoxIn = rgb2longMod(86, 100, 136);
|
||
|
colourBoxTopNBottom = rgb2longMod(135, 146, 179);
|
||
|
colourBoxTopNBottom2 = rgb2longMod(97, 112, 151);
|
||
|
colourBoxLeftNRight2 = rgb2longMod(88, 102, 136);
|
||
|
colourBoxLeftNRight = rgb2longMod(84, 93, 120);
|
||
|
}
|
||
|
|
||
|
public int rgb2longMod(int i, int j, int k) {
|
||
|
return Surface.rgb2long((redMod * i) / 114, (greenMod * j) / 114, (blueMod * k) / 176);
|
||
|
}
|
||
|
|
||
|
public void handleMouse(int mx, int my, int lastmb, int mbdown) {
|
||
|
mouseX = mx;
|
||
|
mouseY = my;
|
||
|
mouseButtonDown = mbdown;
|
||
|
if (lastmb != 0)
|
||
|
mouseLastButtonDown = lastmb;
|
||
|
if (lastmb == 1) {
|
||
|
for (int i1 = 0; i1 < controlCount; i1++) {
|
||
|
if (controlShown[i1] && controlType[i1] == 10 && mouseX >= controlX[i1] && mouseY >= controlY[i1] && mouseX <= controlX[i1] + controlWidth[i1] && mouseY <= controlY[i1] + controlHeight[i1])
|
||
|
controlClicked[i1] = true;
|
||
|
if (controlShown[i1] && controlType[i1] == 14 && mouseX >= controlX[i1] && mouseY >= controlY[i1] && mouseX <= controlX[i1] + controlWidth[i1] && mouseY <= controlY[i1] + controlHeight[i1])
|
||
|
controlListEntryMouseButtonDown[i1] = 1 - controlListEntryMouseButtonDown[i1];
|
||
|
}
|
||
|
|
||
|
}
|
||
|
if (mbdown == 1)
|
||
|
mouseMetaButtonHeld++;
|
||
|
else
|
||
|
mouseMetaButtonHeld = 0;
|
||
|
if (lastmb == 1 || mouseMetaButtonHeld > 20) {
|
||
|
for (int j1 = 0; j1 < controlCount; j1++)
|
||
|
if (controlShown[j1] && controlType[j1] == 15 && mouseX >= controlX[j1] && mouseY >= controlY[j1] && mouseX <= controlX[j1] + controlWidth[j1] && mouseY <= controlY[j1] + controlHeight[j1])
|
||
|
controlClicked[j1] = true;
|
||
|
|
||
|
mouseMetaButtonHeld -= 5;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public boolean isClicked(int i) {
|
||
|
if (controlShown[i] && controlClicked[i]) {
|
||
|
controlClicked[i] = false;
|
||
|
return true;
|
||
|
} else {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void keyPress(int key) {
|
||
|
if (key == 0)
|
||
|
return;
|
||
|
if (focusControlIndex != -1 && controlText[focusControlIndex] != null && controlShown[focusControlIndex]) {
|
||
|
int inputLen = controlText[focusControlIndex].length();
|
||
|
if (key == 8 && inputLen > 0)
|
||
|
controlText[focusControlIndex] = controlText[focusControlIndex].substring(0, inputLen - 1);
|
||
|
if ((key == 10 || key == 13) && inputLen > 0)
|
||
|
controlClicked[focusControlIndex] = true;
|
||
|
String s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!\"£$%^&*()-_=+[{]};:'@#~,<.>/?\\| ";
|
||
|
if (inputLen < controlInputMaxLen[focusControlIndex]) {
|
||
|
for (int k = 0; k < s.length(); k++)
|
||
|
if (key == s.charAt(k))
|
||
|
controlText[focusControlIndex] += (char) key;
|
||
|
|
||
|
}
|
||
|
if (key == 9)
|
||
|
do
|
||
|
focusControlIndex = (focusControlIndex + 1) % controlCount;
|
||
|
while (controlType[focusControlIndex] != 5 && controlType[focusControlIndex] != 6);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void drawPanel() {
|
||
|
for (int i = 0; i < controlCount; i++)
|
||
|
if (controlShown[i])
|
||
|
if (controlType[i] == 0)// text
|
||
|
drawText(i, controlX[i], controlY[i], controlText[i], controlTextSize[i]);
|
||
|
else if (controlType[i] == 1)// text (centered)
|
||
|
drawText(i, controlX[i] - surface.textWidth(controlText[i], controlTextSize[i]) / 2, controlY[i], controlText[i], controlTextSize[i]);
|
||
|
else if (controlType[i] == 2)// component gradient bg
|
||
|
drawBox(controlX[i], controlY[i], controlWidth[i], controlHeight[i]);
|
||
|
else if (controlType[i] == 3)// horiz line
|
||
|
drawLineHoriz(controlX[i], controlY[i], controlWidth[i]);
|
||
|
else if (controlType[i] == 4)// text list (no interaction)
|
||
|
drawTextList(i, controlX[i], controlY[i], controlWidth[i], controlHeight[i], controlTextSize[i], controlListEntries[i], controlListEntryCount[i], controlFlashText[i]);
|
||
|
else if (controlType[i] == 5 || controlType[i] == 6)// input text
|
||
|
drawTextInput(i, controlX[i], controlY[i], controlWidth[i], controlHeight[i], controlText[i], controlTextSize[i]);
|
||
|
else if (controlType[i] == 7)// option list horiz
|
||
|
drawOptionListHoriz(i, controlX[i], controlY[i], controlTextSize[i], controlListEntries[i]);
|
||
|
else if (controlType[i] == 8)// option list vert
|
||
|
drawOptionListVert(i, controlX[i], controlY[i], controlTextSize[i], controlListEntries[i]);
|
||
|
else if (controlType[i] == 9)// text list (interaction)
|
||
|
drawTextListInteractive(i, controlX[i], controlY[i], controlWidth[i], controlHeight[i], controlTextSize[i], controlListEntries[i], controlListEntryCount[i], controlFlashText[i]);
|
||
|
else if (controlType[i] == 11)// rounded box
|
||
|
drawRoundedBox(controlX[i], controlY[i], controlWidth[i], controlHeight[i]);
|
||
|
else if (controlType[i] == 12)// image
|
||
|
drawPicture(controlX[i], controlY[i], controlTextSize[i]);
|
||
|
else if (controlType[i] == 14)// checkbox
|
||
|
drawCheckbox(i, controlX[i], controlY[i], controlWidth[i], controlHeight[i]);
|
||
|
|
||
|
mouseLastButtonDown = 0;
|
||
|
}
|
||
|
|
||
|
protected void drawCheckbox(int control, int x, int y, int width, int height) {
|
||
|
surface.drawBox(x, y, width, height, 0xffffff);
|
||
|
surface.drawLineHoriz(x, y, width, colourBoxTopNBottom);
|
||
|
surface.drawLineVert(x, y, height, colourBoxTopNBottom);
|
||
|
surface.drawLineHoriz(x, (y + height) - 1, width, colourBoxLeftNRight);
|
||
|
surface.drawLineVert((x + width) - 1, y, height, colourBoxLeftNRight);
|
||
|
if (controlListEntryMouseButtonDown[control] == 1) {
|
||
|
for (int j1 = 0; j1 < height; j1++) {
|
||
|
surface.drawLineHoriz(x + j1, y + j1, 1, 0);
|
||
|
surface.drawLineHoriz((x + width) - 1 - j1, y + j1, 1, 0);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected void drawText(int control, int x, int y, String text, int textSize) {
|
||
|
int y2 = y + surface.textHeight(textSize) / 3;
|
||
|
drawstring(control, x, y2, text, textSize);
|
||
|
}
|
||
|
|
||
|
protected void drawstring(int control, int x, int y, String text, int textSize) {
|
||
|
int i1;
|
||
|
if (controlUseAlternativeColour[control])
|
||
|
i1 = 0xffffff;
|
||
|
else
|
||
|
i1 = 0;
|
||
|
surface.drawstring(text, x, y, textSize, i1);
|
||
|
}
|
||
|
|
||
|
protected void drawTextInput(int control, int x, int y, int width, int height, String text, int textSize) {
|
||
|
if (controlMaskText[control]) {
|
||
|
int len = text.length();
|
||
|
text = "";
|
||
|
for (int i2 = 0; i2 < len; i2++)
|
||
|
text = text + "X";
|
||
|
|
||
|
}
|
||
|
if (controlType[control] == 5) {// "list input"
|
||
|
if (mouseLastButtonDown == 1 && mouseX >= x && mouseY >= y - height / 2 && mouseX <= x + width && mouseY <= y + height / 2)
|
||
|
focusControlIndex = control;
|
||
|
} else if (controlType[control] == 6) {// "text input"
|
||
|
if (mouseLastButtonDown == 1 && mouseX >= x - width / 2 && mouseY >= y - height / 2 && mouseX <= x + width / 2 && mouseY <= y + height / 2)
|
||
|
focusControlIndex = control;
|
||
|
x -= surface.textWidth(text, textSize) / 2;
|
||
|
}
|
||
|
if (focusControlIndex == control)
|
||
|
text = text + "*";
|
||
|
int y2 = y + surface.textHeight(textSize) / 3;
|
||
|
drawstring(control, x, y2, text, textSize);
|
||
|
}
|
||
|
|
||
|
public void drawBox(int x, int y, int width, int height) {
|
||
|
surface.setBounds(x, y, x + width, y + height);
|
||
|
surface.drawGradient(x, y, width, height, colourBoxLeftNRight, colourBoxTopNBottom);
|
||
|
if (drawBackgroundArrow) {// set to false inside startGame, draw some kindof an arrow??
|
||
|
for (int i1 = x - (y & 0x3f); i1 < x + width; i1 += 128) {
|
||
|
for (int j1 = y - (y & 0x1f); j1 < y + height; j1 += 128)
|
||
|
surface.drawSpriteAlpha(i1, j1, 6 + baseSpriteStart, 128);
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
surface.drawLineHoriz(x, y, width, colourBoxTopNBottom);
|
||
|
surface.drawLineHoriz(x + 1, y + 1, width - 2, colourBoxTopNBottom);
|
||
|
surface.drawLineHoriz(x + 2, y + 2, width - 4, colourBoxTopNBottom2);
|
||
|
surface.drawLineVert(x, y, height, colourBoxTopNBottom);
|
||
|
surface.drawLineVert(x + 1, y + 1, height - 2, colourBoxTopNBottom);
|
||
|
surface.drawLineVert(x + 2, y + 2, height - 4, colourBoxTopNBottom2);
|
||
|
surface.drawLineHoriz(x, (y + height) - 1, width, colourBoxLeftNRight);
|
||
|
surface.drawLineHoriz(x + 1, (y + height) - 2, width - 2, colourBoxLeftNRight);
|
||
|
surface.drawLineHoriz(x + 2, (y + height) - 3, width - 4, colourBoxLeftNRight2);
|
||
|
surface.drawLineVert((x + width) - 1, y, height, colourBoxLeftNRight);
|
||
|
surface.drawLineVert((x + width) - 2, y + 1, height - 2, colourBoxLeftNRight);
|
||
|
surface.drawLineVert((x + width) - 3, y + 2, height - 4, colourBoxLeftNRight2);
|
||
|
surface.resetBounds();
|
||
|
}
|
||
|
|
||
|
public void drawRoundedBox(int x, int y, int width, int height) {
|
||
|
surface.drawBox(x, y, width, height, 0);
|
||
|
surface.drawBoxEdge(x, y, width, height, colourRoundedBoxOut);
|
||
|
surface.drawBoxEdge(x + 1, y + 1, width - 2, height - 2, colourRoundedBoxMid);
|
||
|
surface.drawBoxEdge(x + 2, y + 2, width - 4, height - 4, colourRoundedBoxIn);
|
||
|
surface.drawSprite(x, y, 2 + baseSpriteStart);
|
||
|
surface.drawSprite((x + width) - 7, y, 3 + baseSpriteStart);
|
||
|
surface.drawSprite(x, (y + height) - 7, 4 + baseSpriteStart);
|
||
|
surface.drawSprite((x + width) - 7, (y + height) - 7, 5 + baseSpriteStart);
|
||
|
}
|
||
|
|
||
|
protected void drawPicture(int x, int y, int size) {
|
||
|
surface.drawSprite(x, y, size);
|
||
|
}
|
||
|
|
||
|
protected void drawLineHoriz(int x, int y, int width) {
|
||
|
surface.drawLineHoriz(x, y, width, 0xffffff);
|
||
|
}
|
||
|
|
||
|
protected void drawTextList(int control, int x, int y, int width, int height, int textSize,
|
||
|
String listEntries[], int listEntryCount, int l1) {
|
||
|
int displayedEntryCount = height / surface.textHeight(textSize);
|
||
|
if (l1 > listEntryCount - displayedEntryCount)
|
||
|
l1 = listEntryCount - displayedEntryCount;
|
||
|
if (l1 < 0)
|
||
|
l1 = 0;
|
||
|
controlFlashText[control] = l1;
|
||
|
if (displayedEntryCount < listEntryCount) {
|
||
|
int cornerTopRight = (x + width) - 12;
|
||
|
int cornerBottomLeft = ((height - 27) * displayedEntryCount) / listEntryCount;
|
||
|
if (cornerBottomLeft < 6)
|
||
|
cornerBottomLeft = 6;
|
||
|
int j3 = ((height - 27 - cornerBottomLeft) * l1) / (listEntryCount - displayedEntryCount);
|
||
|
if (mouseButtonDown == 1 && mouseX >= cornerTopRight && mouseX <= cornerTopRight + 12) {
|
||
|
if (mouseY > y && mouseY < y + 12 && l1 > 0)
|
||
|
l1--;
|
||
|
if (mouseY > (y + height) - 12 && mouseY < y + height && l1 < listEntryCount - displayedEntryCount)
|
||
|
l1++;
|
||
|
controlFlashText[control] = l1;
|
||
|
}
|
||
|
if (mouseButtonDown == 1 && (mouseX >= cornerTopRight && mouseX <= cornerTopRight + 12 || mouseX >= cornerTopRight - 12 && mouseX <= cornerTopRight + 24 && controlListScrollbarHandleDragged[control])) {
|
||
|
if (mouseY > y + 12 && mouseY < (y + height) - 12) {
|
||
|
controlListScrollbarHandleDragged[control] = true;
|
||
|
int l3 = mouseY - y - 12 - cornerBottomLeft / 2;
|
||
|
l1 = (l3 * listEntryCount) / (height - 24);
|
||
|
if (l1 > listEntryCount - displayedEntryCount)
|
||
|
l1 = listEntryCount - displayedEntryCount;
|
||
|
if (l1 < 0)
|
||
|
l1 = 0;
|
||
|
controlFlashText[control] = l1;
|
||
|
}
|
||
|
} else {
|
||
|
controlListScrollbarHandleDragged[control] = false;
|
||
|
}
|
||
|
j3 = ((height - 27 - cornerBottomLeft) * l1) / (listEntryCount - displayedEntryCount);
|
||
|
drawListContainer(x, y, width, height, j3, cornerBottomLeft);
|
||
|
}
|
||
|
int entryListStartY = height - displayedEntryCount * surface.textHeight(textSize);
|
||
|
int y2 = y + (surface.textHeight(textSize) * 5) / 6 + entryListStartY / 2;
|
||
|
for (int entry = l1; entry < listEntryCount; entry++) {
|
||
|
drawstring(control, x + 2, y2, listEntries[entry], textSize);
|
||
|
y2 += surface.textHeight(textSize) - textListEntryHeightMod;
|
||
|
if (y2 >= y + height)
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
protected void drawListContainer(int x, int y, int width, int height, int corner1, int corner2) {
|
||
|
int x2 = (x + width) - 12;
|
||
|
surface.drawBoxEdge(x2, y, 12, height, 0);
|
||
|
surface.drawSprite(x2 + 1, y + 1, baseSpriteStart);// up arrow?
|
||
|
surface.drawSprite(x2 + 1, (y + height) - 12, 1 + baseSpriteStart);// down arrow?
|
||
|
surface.drawLineHoriz(x2, y + 13, 12, 0);
|
||
|
surface.drawLineHoriz(x2, (y + height) - 13, 12, 0);
|
||
|
surface.drawGradient(x2 + 1, y + 14, 11, height - 27, colourScrollbarTop, colourScrollbarBottom);
|
||
|
surface.drawBox(x2 + 3, corner1 + y + 14, 7, corner2, colourScrollbarHandleMid);
|
||
|
surface.drawLineVert(x2 + 2, corner1 + y + 14, corner2, colourScrollbarHandleLeft);
|
||
|
surface.drawLineVert(x2 + 2 + 8, corner1 + y + 14, corner2, colourScrollbarHandleRight);
|
||
|
}
|
||
|
|
||
|
protected void drawOptionListHoriz(int control, int x, int y, int textSize, String listEntries[]) {
|
||
|
int listTotalTextWidth = 0;
|
||
|
int listEntryCount = listEntries.length;
|
||
|
for (int idx = 0; idx < listEntryCount; idx++) {
|
||
|
listTotalTextWidth += surface.textWidth(listEntries[idx], textSize);
|
||
|
if (idx < listEntryCount - 1)
|
||
|
listTotalTextWidth += surface.textWidth(" ", textSize);
|
||
|
}
|
||
|
|
||
|
int left = x - listTotalTextWidth / 2;
|
||
|
int bottom = y + surface.textHeight(textSize) / 3;
|
||
|
for (int idx = 0; idx < listEntryCount; idx++) {
|
||
|
int colour;
|
||
|
if (controlUseAlternativeColour[control])
|
||
|
colour = 0xffffff;
|
||
|
else
|
||
|
colour = 0;
|
||
|
if (mouseX >= left && mouseX <= left + surface.textWidth(listEntries[idx], textSize) && mouseY <= bottom && mouseY > bottom - surface.textHeight(textSize)) {
|
||
|
if (controlUseAlternativeColour[control])
|
||
|
colour = 0x808080;
|
||
|
else
|
||
|
colour = 0xffffff;
|
||
|
if (mouseLastButtonDown == 1) {
|
||
|
controlListEntryMouseButtonDown[control] = idx;
|
||
|
controlClicked[control] = true;
|
||
|
}
|
||
|
}
|
||
|
if (controlListEntryMouseButtonDown[control] == idx)
|
||
|
if (controlUseAlternativeColour[control])
|
||
|
colour = 0xff0000;
|
||
|
else
|
||
|
colour = 0xc00000;
|
||
|
surface.drawstring(listEntries[idx], left, bottom, textSize, colour);
|
||
|
left += surface.textWidth(listEntries[idx] + " ", textSize);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
protected void drawOptionListVert(int control, int x, int y, int textSize, String listEntries[]) {
|
||
|
int listEntryCount = listEntries.length;
|
||
|
int listTotalTextHeightMid = y - (surface.textHeight(textSize) * (listEntryCount - 1)) / 2;
|
||
|
for (int idx = 0; idx < listEntryCount; idx++) {
|
||
|
int colour;
|
||
|
if (controlUseAlternativeColour[control])
|
||
|
colour = 0xffffff;
|
||
|
else
|
||
|
colour = 0;
|
||
|
int entryTextWidth = surface.textWidth(listEntries[idx], textSize);
|
||
|
if (mouseX >= x - entryTextWidth / 2 && mouseX <= x + entryTextWidth / 2 && mouseY - 2 <= listTotalTextHeightMid && mouseY - 2 > listTotalTextHeightMid - surface.textHeight(textSize)) {
|
||
|
if (controlUseAlternativeColour[control])
|
||
|
colour = 0x808080;
|
||
|
else
|
||
|
colour = 0xffffff;
|
||
|
if (mouseLastButtonDown == 1) {
|
||
|
controlListEntryMouseButtonDown[control] = idx;
|
||
|
controlClicked[control] = true;
|
||
|
}
|
||
|
}
|
||
|
if (controlListEntryMouseButtonDown[control] == idx)
|
||
|
if (controlUseAlternativeColour[control])
|
||
|
colour = 0xff0000;
|
||
|
else
|
||
|
colour = 0xc00000;
|
||
|
surface.drawstring(listEntries[idx], x - entryTextWidth / 2, listTotalTextHeightMid, textSize, colour);
|
||
|
listTotalTextHeightMid += surface.textHeight(textSize);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
protected void drawTextListInteractive(int control, int x, int y, int width, int height, int textSize,
|
||
|
String listEntries[], int listEntryCount, int l1) {
|
||
|
int displayedEntryCount = height / surface.textHeight(textSize);
|
||
|
if (displayedEntryCount < listEntryCount) {
|
||
|
int right = (x + width) - 12;
|
||
|
int l2 = ((height - 27) * displayedEntryCount) / listEntryCount;
|
||
|
if (l2 < 6)
|
||
|
l2 = 6;
|
||
|
int j3 = ((height - 27 - l2) * l1) / (listEntryCount - displayedEntryCount);
|
||
|
if (mouseButtonDown == 1 && mouseX >= right && mouseX <= right + 12) {
|
||
|
if (mouseY > y && mouseY < y + 12 && l1 > 0)
|
||
|
l1--;
|
||
|
if (mouseY > (y + height) - 12 && mouseY < y + height && l1 < listEntryCount - displayedEntryCount)
|
||
|
l1++;
|
||
|
controlFlashText[control] = l1;
|
||
|
}
|
||
|
if (mouseButtonDown == 1 && (mouseX >= right && mouseX <= right + 12 || mouseX >= right - 12 && mouseX <= right + 24 && controlListScrollbarHandleDragged[control])) {
|
||
|
if (mouseY > y + 12 && mouseY < (y + height) - 12) {
|
||
|
controlListScrollbarHandleDragged[control] = true;
|
||
|
int l3 = mouseY - y - 12 - l2 / 2;
|
||
|
l1 = (l3 * listEntryCount) / (height - 24);
|
||
|
if (l1 < 0)
|
||
|
l1 = 0;
|
||
|
if (l1 > listEntryCount - displayedEntryCount)
|
||
|
l1 = listEntryCount - displayedEntryCount;
|
||
|
controlFlashText[control] = l1;
|
||
|
}
|
||
|
} else {
|
||
|
controlListScrollbarHandleDragged[control] = false;
|
||
|
}
|
||
|
j3 = ((height - 27 - l2) * l1) / (listEntryCount - displayedEntryCount);
|
||
|
drawListContainer(x, y, width, height, j3, l2);
|
||
|
} else {
|
||
|
l1 = 0;
|
||
|
controlFlashText[control] = 0;
|
||
|
}
|
||
|
controlListEntryMouseOver[control] = -1;
|
||
|
int k2 = height - displayedEntryCount * surface.textHeight(textSize);
|
||
|
int i3 = y + (surface.textHeight(textSize) * 5) / 6 + k2 / 2;
|
||
|
for (int k3 = l1; k3 < listEntryCount; k3++) {
|
||
|
int i4;
|
||
|
if (controlUseAlternativeColour[control])
|
||
|
i4 = 0xffffff;
|
||
|
else
|
||
|
i4 = 0;
|
||
|
if (mouseX >= x + 2 && mouseX <= x + 2 + surface.textWidth(listEntries[k3], textSize) && mouseY - 2 <= i3 && mouseY - 2 > i3 - surface.textHeight(textSize)) {
|
||
|
if (controlUseAlternativeColour[control])
|
||
|
i4 = 0x808080;
|
||
|
else
|
||
|
i4 = 0xffffff;
|
||
|
controlListEntryMouseOver[control] = k3;
|
||
|
if (mouseLastButtonDown == 1) {
|
||
|
controlListEntryMouseButtonDown[control] = k3;
|
||
|
controlClicked[control] = true;
|
||
|
}
|
||
|
}
|
||
|
if (controlListEntryMouseButtonDown[control] == k3 && aBoolean219)
|
||
|
i4 = 0xff0000;
|
||
|
surface.drawstring(listEntries[k3], x + 2, i3, textSize, i4);
|
||
|
i3 += surface.textHeight(textSize);
|
||
|
if (i3 >= y + height)
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
public int addText(int x, int y, String text, int size, boolean flag) {
|
||
|
controlType[controlCount] = 1;
|
||
|
controlShown[controlCount] = true;
|
||
|
controlClicked[controlCount] = false;
|
||
|
controlTextSize[controlCount] = size;
|
||
|
controlUseAlternativeColour[controlCount] = flag;
|
||
|
controlX[controlCount] = x;
|
||
|
controlY[controlCount] = y;
|
||
|
controlText[controlCount] = text;
|
||
|
return controlCount++;
|
||
|
}
|
||
|
|
||
|
public int addButtonBackground(int x, int y, int width, int height) {
|
||
|
controlType[controlCount] = 2;
|
||
|
controlShown[controlCount] = true;
|
||
|
controlClicked[controlCount] = false;
|
||
|
controlX[controlCount] = x - width / 2;
|
||
|
controlY[controlCount] = y - height / 2;
|
||
|
controlWidth[controlCount] = width;
|
||
|
controlHeight[controlCount] = height;
|
||
|
return controlCount++;
|
||
|
}
|
||
|
|
||
|
public int addBoxRounded(int x, int y, int width, int height) {
|
||
|
controlType[controlCount] = 11;
|
||
|
controlShown[controlCount] = true;
|
||
|
controlClicked[controlCount] = false;
|
||
|
controlX[controlCount] = x - width / 2;
|
||
|
controlY[controlCount] = y - height / 2;
|
||
|
controlWidth[controlCount] = width;
|
||
|
controlHeight[controlCount] = height;
|
||
|
return controlCount++;
|
||
|
}
|
||
|
|
||
|
public int addSprite(int x, int y, int spriteId) {
|
||
|
int imgWidth = surface.spriteWidth[spriteId];
|
||
|
int imgHeight = surface.spriteHeight[spriteId];
|
||
|
controlType[controlCount] = 12;
|
||
|
controlShown[controlCount] = true;
|
||
|
controlClicked[controlCount] = false;
|
||
|
controlX[controlCount] = x - imgWidth / 2;
|
||
|
controlY[controlCount] = y - imgHeight / 2;
|
||
|
controlWidth[controlCount] = imgWidth;
|
||
|
controlHeight[controlCount] = imgHeight;
|
||
|
controlTextSize[controlCount] = spriteId;
|
||
|
return controlCount++;
|
||
|
}
|
||
|
|
||
|
public int addTextList(int x, int y, int width, int height, int size, int maxLength, boolean flag) {
|
||
|
controlType[controlCount] = 4;
|
||
|
controlShown[controlCount] = true;
|
||
|
controlClicked[controlCount] = false;
|
||
|
controlX[controlCount] = x;
|
||
|
controlY[controlCount] = y;
|
||
|
controlWidth[controlCount] = width;
|
||
|
controlHeight[controlCount] = height;
|
||
|
controlUseAlternativeColour[controlCount] = flag;
|
||
|
controlTextSize[controlCount] = size;
|
||
|
controlInputMaxLen[controlCount] = maxLength;
|
||
|
controlListEntryCount[controlCount] = 0;
|
||
|
controlFlashText[controlCount] = 0;
|
||
|
controlListEntries[controlCount] = new String[maxLength];
|
||
|
return controlCount++;
|
||
|
}
|
||
|
|
||
|
public int addTextListInput(int x, int y, int width, int height, int size, int maxLength, boolean flag,
|
||
|
boolean flag1) {
|
||
|
controlType[controlCount] = 5;
|
||
|
controlShown[controlCount] = true;
|
||
|
controlMaskText[controlCount] = flag;
|
||
|
controlClicked[controlCount] = false;
|
||
|
controlTextSize[controlCount] = size;
|
||
|
controlUseAlternativeColour[controlCount] = flag1;
|
||
|
controlX[controlCount] = x;
|
||
|
controlY[controlCount] = y;
|
||
|
controlWidth[controlCount] = width;
|
||
|
controlHeight[controlCount] = height;
|
||
|
controlInputMaxLen[controlCount] = maxLength;
|
||
|
controlText[controlCount] = "";
|
||
|
return controlCount++;
|
||
|
}
|
||
|
|
||
|
public int addTextInput(int x, int y, int width, int height, int size, int maxLength, boolean flag,
|
||
|
boolean flag1) {
|
||
|
controlType[controlCount] = 6;
|
||
|
controlShown[controlCount] = true;
|
||
|
controlMaskText[controlCount] = flag;
|
||
|
controlClicked[controlCount] = false;
|
||
|
controlTextSize[controlCount] = size;
|
||
|
controlUseAlternativeColour[controlCount] = flag1;
|
||
|
controlX[controlCount] = x;
|
||
|
controlY[controlCount] = y;
|
||
|
controlWidth[controlCount] = width;
|
||
|
controlHeight[controlCount] = height;
|
||
|
controlInputMaxLen[controlCount] = maxLength;
|
||
|
controlText[controlCount] = "";
|
||
|
return controlCount++;
|
||
|
}
|
||
|
|
||
|
public int addTextListInteractive(int x, int y, int width, int height, int textSize, int maxLength, boolean flag) {
|
||
|
controlType[controlCount] = 9;
|
||
|
controlShown[controlCount] = true;
|
||
|
controlClicked[controlCount] = false;
|
||
|
controlTextSize[controlCount] = textSize;
|
||
|
controlUseAlternativeColour[controlCount] = flag;
|
||
|
controlX[controlCount] = x;
|
||
|
controlY[controlCount] = y;
|
||
|
controlWidth[controlCount] = width;
|
||
|
controlHeight[controlCount] = height;
|
||
|
controlInputMaxLen[controlCount] = maxLength;
|
||
|
controlListEntries[controlCount] = new String[maxLength];
|
||
|
controlListEntryCount[controlCount] = 0;
|
||
|
controlFlashText[controlCount] = 0;
|
||
|
controlListEntryMouseButtonDown[controlCount] = -1;
|
||
|
controlListEntryMouseOver[controlCount] = -1;
|
||
|
return controlCount++;
|
||
|
}
|
||
|
|
||
|
public int addButton(int x, int y, int width, int height) {
|
||
|
controlType[controlCount] = 10;
|
||
|
controlShown[controlCount] = true;
|
||
|
controlClicked[controlCount] = false;
|
||
|
controlX[controlCount] = x - width / 2;
|
||
|
controlY[controlCount] = y - height / 2;
|
||
|
controlWidth[controlCount] = width;
|
||
|
controlHeight[controlCount] = height;
|
||
|
return controlCount++;
|
||
|
}
|
||
|
|
||
|
public int addLineHoriz(int x, int y, int width) {
|
||
|
controlType[controlCount] = 3;
|
||
|
controlShown[controlCount] = true;
|
||
|
controlX[controlCount] = x;
|
||
|
controlY[controlCount] = y;
|
||
|
controlWidth[controlCount] = width;
|
||
|
return controlCount++;
|
||
|
}
|
||
|
|
||
|
public int addOptionListHoriz(int x, int y, int textSize, int maxListCount,
|
||
|
boolean useAltColour) {
|
||
|
controlType[controlCount] = 7;
|
||
|
controlShown[controlCount] = true;
|
||
|
controlX[controlCount] = x;
|
||
|
controlY[controlCount] = y;
|
||
|
controlTextSize[controlCount] = textSize;
|
||
|
controlListEntries[controlCount] = new String[maxListCount];
|
||
|
controlListEntryCount[controlCount] = 0;
|
||
|
controlUseAlternativeColour[controlCount] = useAltColour;
|
||
|
controlClicked[controlCount] = false;
|
||
|
return controlCount++;
|
||
|
}
|
||
|
|
||
|
public int addOptionListVert(int x, int y, int textSize, int maxListCount,
|
||
|
boolean useAltColour) {
|
||
|
controlType[controlCount] = 8;
|
||
|
controlShown[controlCount] = true;
|
||
|
controlX[controlCount] = x;
|
||
|
controlY[controlCount] = y;
|
||
|
controlTextSize[controlCount] = textSize;
|
||
|
controlListEntries[controlCount] = new String[maxListCount];
|
||
|
controlListEntryCount[controlCount] = 0;
|
||
|
controlUseAlternativeColour[controlCount] = useAltColour;
|
||
|
controlClicked[controlCount] = false;
|
||
|
return controlCount++;
|
||
|
}
|
||
|
|
||
|
public int addCheckbox(int x, int y, int width, int height) {
|
||
|
controlType[controlCount] = 14;
|
||
|
controlShown[controlCount] = true;
|
||
|
controlX[controlCount] = x;
|
||
|
controlY[controlCount] = y;
|
||
|
controlWidth[controlCount] = width;
|
||
|
controlHeight[controlCount] = height;
|
||
|
controlListEntryMouseButtonDown[controlCount] = 0;
|
||
|
return controlCount++;
|
||
|
}
|
||
|
|
||
|
public void clearList(int control) {
|
||
|
controlListEntryCount[control] = 0;
|
||
|
}
|
||
|
|
||
|
public void resetListProps(int control) {
|
||
|
controlFlashText[control] = 0;
|
||
|
controlListEntryMouseOver[control] = -1;
|
||
|
}
|
||
|
|
||
|
public void addListEntry(int control, int index, String text) {
|
||
|
controlListEntries[control][index] = text;
|
||
|
if (index + 1 > controlListEntryCount[control])
|
||
|
controlListEntryCount[control] = index + 1;
|
||
|
}
|
||
|
|
||
|
public void removeListEntry(int control, String text, boolean flag) {
|
||
|
int j = controlListEntryCount[control]++;
|
||
|
if (j >= controlInputMaxLen[control]) {
|
||
|
j--;
|
||
|
controlListEntryCount[control]--;
|
||
|
for (int k = 0; k < j; k++)
|
||
|
controlListEntries[control][k] = controlListEntries[control][k + 1];
|
||
|
|
||
|
}
|
||
|
controlListEntries[control][j] = text;
|
||
|
if (flag)
|
||
|
controlFlashText[control] = 999999;// 0xf423f;
|
||
|
}
|
||
|
|
||
|
public void updateText(int control, String s) {
|
||
|
controlText[control] = s;
|
||
|
}
|
||
|
|
||
|
public String getText(int control) {
|
||
|
if (controlText[control] == null)
|
||
|
return "null";
|
||
|
else
|
||
|
return controlText[control];
|
||
|
}
|
||
|
|
||
|
public void show(int control) {
|
||
|
controlShown[control] = true;
|
||
|
}
|
||
|
|
||
|
public void hide(int control) {
|
||
|
controlShown[control] = false;
|
||
|
}
|
||
|
|
||
|
public void setFocus(int control) {
|
||
|
focusControlIndex = control;
|
||
|
}
|
||
|
|
||
|
public int getListEntryIndex(int control) {
|
||
|
return controlListEntryMouseOver[control];
|
||
|
}
|
||
|
|
||
|
}
|