void TextInputMenu::drawMenu(FWRenderer &r, bool top) { const int x = _pos.x; const int y = _pos.y; int i, tx, ty, tw; int line = 0, words = 0, cw = 0; int space = 0, extraSpace = 0; const bool isAmiga = (g_cine->getPlatform() == Common::kPlatformAmiga); if (isAmiga) r.drawTransparentBox(x, y, _width, 4); else r.drawPlainBox(x, y, _width, 4, r._messageBg); tx = x + 4; ty = _info[0] ? y - 5 : y + 4; tw = _width - 8; const int infoSize = _info.size(); // input box info message for (i = 0; i < infoSize; i++, line--) { // fit line of text if (!line) { line = fitLine(_info.c_str() + i, tw, words, cw); if (i + line < infoSize && words) { space = (tw - cw) / words; extraSpace = (tw - cw) % words; } else { space = 5; extraSpace = 0; } ty += 9; if (isAmiga) r.drawTransparentBox(x, ty, _width, 9); else r.drawPlainBox(x, ty, _width, 9, r._messageBg); tx = x + 4; } // draw characters if (_info[i] == ' ') { tx += space + extraSpace; if (extraSpace) { extraSpace = 0; } } else { tx = r.drawChar(_info[i], tx, ty); } } // input area background ty += 9; if (isAmiga) r.drawTransparentBox(x, ty, _width, 9); else r.drawPlainBox(x, ty, _width, 9, r._messageBg); r.drawPlainBox(x + 16, ty - 1, _width - 32, 9, 0); tx = x + 20; // text in input area const int inputSize = _input.size(); for (i = 0; i < inputSize; i++) { tx = r.drawChar(_input[i], tx, ty); if (_cursor == i + 2) { r.drawLine(tx, ty - 1, 1, 9, 2); } } if (_input.empty() || _cursor == 1) { r.drawLine(x + 20, ty - 1, 1, 9, 2); } ty += 9; if (isAmiga) r.drawTransparentBox(x, ty, _width, 4); else r.drawPlainBox(x, ty, _width, 4, r._messageBg); r.drawDoubleBorder(x, y, _width, ty - y + 4, isAmiga ? 18 : 2); }