Update to 14.0-beta1

This commit is contained in:
dP
2024-02-04 02:18:17 +05:30
parent 79037e2c65
commit 33ef333b57
1325 changed files with 138465 additions and 70987 deletions

View File

@@ -12,7 +12,6 @@
#include "window_gui.h"
#include "console_gui.h"
#include "console_internal.h"
#include "guitimer_func.h"
#include "window_func.h"
#include "string_func.h"
#include "strings_func.h"
@@ -21,8 +20,8 @@
#include "console_func.h"
#include "rev.h"
#include "video/video_driver.hpp"
#include <deque>
#include <string>
#include "timer/timer.h"
#include "timer/timer_window.h"
#include "widgets/console_widget.h"
@@ -40,7 +39,7 @@ static const uint ICON_BOTTOM_BORDERWIDTH = 12;
struct IConsoleLine {
std::string buffer; ///< The data to store.
TextColour colour; ///< The colour of the line.
uint16 time; ///< The amount of time the line is in the backlog.
uint16_t time; ///< The amount of time the line is in the backlog.
IConsoleLine() : buffer(), colour(TC_BEGIN), time(0)
{
@@ -72,8 +71,8 @@ static bool TruncateBuffer();
/* ** main console cmd buffer ** */
static Textbuf _iconsole_cmdline(ICON_CMDLN_SIZE);
static char *_iconsole_history[ICON_HISTORY_SIZE];
static int _iconsole_historypos;
static std::deque<std::string> _iconsole_history;
static ptrdiff_t _iconsole_historypos;
IConsoleModes _iconsole_mode;
/* *************** *
@@ -99,15 +98,15 @@ static inline void IConsoleResetHistoryPos()
static const char *IConsoleHistoryAdd(const char *cmd);
static void IConsoleHistoryNavigate(int direction);
static const struct NWidgetPart _nested_console_window_widgets[] = {
static constexpr NWidgetPart _nested_console_window_widgets[] = {
NWidget(WWT_EMPTY, INVALID_COLOUR, WID_C_BACKGROUND), SetResize(1, 1),
};
static WindowDesc _console_window_desc(
static WindowDesc _console_window_desc(__FILE__, __LINE__,
WDP_MANUAL, nullptr, 0, 0,
WC_CONSOLE, WC_NONE,
0,
_nested_console_window_widgets, lengthof(_nested_console_window_widgets)
std::begin(_nested_console_window_widgets), std::end(_nested_console_window_widgets)
);
struct IConsoleWindow : Window
@@ -115,24 +114,22 @@ struct IConsoleWindow : Window
static size_t scroll;
int line_height; ///< Height of one line of text in the console.
int line_offset;
GUITimer truncate_timer;
IConsoleWindow() : Window(&_console_window_desc)
{
_iconsole_mode = ICONSOLE_OPENED;
this->InitNested(0);
this->truncate_timer.SetInterval(3000);
ResizeWindow(this, _screen.width, _screen.height / 3);
}
void OnInit() override
{
this->line_height = FONT_HEIGHT_NORMAL + WidgetDimensions::scaled.hsep_normal;
this->line_height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.hsep_normal;
this->line_offset = GetStringBoundingBox("] ").width + WidgetDimensions::scaled.frametext.left;
}
void Close() override
void Close([[maybe_unused]] int data = 0) override
{
_iconsole_mode = ICONSOLE_CLOSED;
VideoDriver::GetInstance()->EditBoxLostFocus();
@@ -186,10 +183,8 @@ struct IConsoleWindow : Window
}
}
void OnRealtimeTick(uint delta_ms) override
{
if (this->truncate_timer.CountElapsed(delta_ms) == 0) return;
/** Check on a regular interval if the console buffer needs truncating. */
IntervalTimer<TimerWindow> truncate_interval = {std::chrono::seconds(3), [this](auto) {
assert(this->height >= 0 && this->line_height > 0);
size_t visible_lines = (size_t)(this->height / this->line_height);
@@ -198,14 +193,14 @@ struct IConsoleWindow : Window
IConsoleWindow::scroll = std::min<size_t>(IConsoleWindow::scroll, max_scroll);
this->SetDirty();
}
}
}};
void OnMouseLoop() override
{
if (_iconsole_cmdline.HandleCaret()) this->SetDirty();
}
EventState OnKeyPress(WChar key, uint16 keycode) override
EventState OnKeyPress([[maybe_unused]] char32_t key, uint16_t keycode) override
{
if (_focused_window != this) return ES_NOT_HANDLED;
@@ -276,7 +271,7 @@ struct IConsoleWindow : Window
return ES_HANDLED;
}
void InsertTextString(int wid, const char *str, bool marked, const char *caret, const char *insert_location, const char *replacement_end) override
void InsertTextString(WidgetID, const char *str, bool marked, const char *caret, const char *insert_location, const char *replacement_end) override
{
if (_iconsole_cmdline.InsertString(str, marked, caret, insert_location, replacement_end)) {
IConsoleWindow::scroll = 0;
@@ -285,22 +280,9 @@ struct IConsoleWindow : Window
}
}
const char *GetFocusedText() const override
Textbuf *GetFocusedTextbuf() const override
{
return _iconsole_cmdline.buf;
}
const char *GetCaret() const override
{
return _iconsole_cmdline.buf + _iconsole_cmdline.caretpos;
}
const char *GetMarkedText(size_t *length) const override
{
if (_iconsole_cmdline.markend == 0) return nullptr;
*length = _iconsole_cmdline.markend - _iconsole_cmdline.markpos;
return _iconsole_cmdline.buf + _iconsole_cmdline.markpos;
return &_iconsole_cmdline;
}
Point GetCaretPosition() const override
@@ -316,17 +298,17 @@ struct IConsoleWindow : Window
int delta = std::min<int>(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0);
Point p1 = GetCharPosInString(_iconsole_cmdline.buf, from, FS_NORMAL);
Point p2 = from != to ? GetCharPosInString(_iconsole_cmdline.buf, from) : p1;
Point p2 = from != to ? GetCharPosInString(_iconsole_cmdline.buf, to, FS_NORMAL) : p1;
Rect r = {this->line_offset + delta + p1.x, this->height - this->line_height, this->line_offset + delta + p2.x, this->height};
return r;
}
const char *GetTextCharacterAtPosition(const Point &pt) const override
ptrdiff_t GetTextCharacterAtPosition(const Point &pt) const override
{
int delta = std::min<int>(this->width - this->line_offset - _iconsole_cmdline.pixels - ICON_RIGHT_BORDERWIDTH, 0);
if (!IsInsideMM(pt.y, this->height - this->line_height, this->height)) return nullptr;
if (!IsInsideMM(pt.y, this->height - this->line_height, this->height)) return -1;
return GetCharAtPosition(_iconsole_cmdline.buf, pt.x - delta);
}
@@ -341,7 +323,7 @@ struct IConsoleWindow : Window
VideoDriver::GetInstance()->EditBoxGainedFocus();
}
void OnFocusLost(bool closing) override
void OnFocusLost(bool) override
{
VideoDriver::GetInstance()->EditBoxLostFocus();
}
@@ -355,7 +337,6 @@ void IConsoleGUIInit()
_iconsole_mode = ICONSOLE_CLOSED;
IConsoleClearBuffer();
memset(_iconsole_history, 0, sizeof(_iconsole_history));
IConsolePrint(TC_LIGHT_BLUE, "OpenTTD Game Console Revision 7 - {}", _openttd_revision);
IConsolePrint(CC_WHITE, "------------------------------------");
@@ -429,15 +410,14 @@ static const char *IConsoleHistoryAdd(const char *cmd)
if (StrEmpty(cmd)) return nullptr;
/* Do not put in history if command is same as previous */
if (_iconsole_history[0] == nullptr || strcmp(_iconsole_history[0], cmd) != 0) {
free(_iconsole_history[ICON_HISTORY_SIZE - 1]);
memmove(&_iconsole_history[1], &_iconsole_history[0], sizeof(_iconsole_history[0]) * (ICON_HISTORY_SIZE - 1));
_iconsole_history[0] = stredup(cmd);
if (_iconsole_history.empty() || _iconsole_history.front() != cmd) {
_iconsole_history.emplace_front(cmd);
while (_iconsole_history.size() > ICON_HISTORY_SIZE) _iconsole_history.pop_back();
}
/* Reset the history position */
IConsoleResetHistoryPos();
return _iconsole_history[0];
return _iconsole_history.front().c_str();
}
/**
@@ -446,10 +426,8 @@ static const char *IConsoleHistoryAdd(const char *cmd)
*/
static void IConsoleHistoryNavigate(int direction)
{
if (_iconsole_history[0] == nullptr) return; // Empty history
_iconsole_historypos = Clamp(_iconsole_historypos + direction, -1, ICON_HISTORY_SIZE - 1);
if (direction > 0 && _iconsole_history[_iconsole_historypos] == nullptr) _iconsole_historypos--;
if (_iconsole_history.empty()) return; // Empty history
_iconsole_historypos = Clamp<ptrdiff_t>(_iconsole_historypos + direction, -1, _iconsole_history.size() - 1);
if (_iconsole_historypos == -1) {
_iconsole_cmdline.DeleteAll();
@@ -467,7 +445,7 @@ static void IConsoleHistoryNavigate(int direction)
* @param colour_code the colour of the command. Red in case of errors, etc.
* @param str the message entered or output on the console (notice, error, etc.)
*/
void IConsoleGUIPrint(TextColour colour_code, char *str)
void IConsoleGUIPrint(TextColour colour_code, const std::string &str)
{
_iconsole_buffer.push_front(IConsoleLine(str, colour_code));
SetWindowDirty(WC_CONSOLE, 0);
@@ -479,7 +457,7 @@ void IConsoleGUIPrint(TextColour colour_code, char *str)
* all lines in the buffer are aged by one. When a line exceeds both the maximum position
* and also the maximum age, it gets removed.
* @return true if any lines were removed
*/
*/
static bool TruncateBuffer()
{
bool need_truncation = false;