diff options
-rw-r--r-- | src/ai/ai_gui.cpp | 18 | ||||
-rw-r--r-- | src/ai/api/ai_log.cpp | 2 |
2 files changed, 17 insertions, 3 deletions
diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index ae98e6cb7..b534d89cd 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -629,6 +629,8 @@ enum AIDebugWindowWidgets { struct AIDebugWindow : public Window { static CompanyID ai_debug_company; int redraw_timer; + int last_vscroll_pos; + bool autoscroll; AIDebugWindow(const WindowDesc *desc, WindowNumber number) : Window(desc, number) { @@ -641,6 +643,8 @@ struct AIDebugWindow : public Window { this->vscroll.cap = 14; this->vscroll.pos = 0; this->resize.step_height = 12; + this->last_vscroll_pos = 0; + this->autoscroll = true; if (ai_debug_company != INVALID_COMPANY) this->LowerWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START); @@ -722,9 +726,17 @@ struct AIDebugWindow : public Window { this->InvalidateWidget(AID_WIDGET_SCROLLBAR); if (log == NULL) return; + /* Detect when the user scrolls the window. Enable autoscroll when the + * bottom-most line becomes visible. */ + if (this->last_vscroll_pos != this->vscroll.pos) { + this->autoscroll = this->vscroll.pos >= log->used - this->vscroll.cap; + } + if (this->autoscroll) this->vscroll.pos = max(0, log->used - this->vscroll.cap); + last_vscroll_pos = this->vscroll.pos; + int y = 6; - for (int i = this->vscroll.pos; i < (this->vscroll.cap + this->vscroll.pos); i++) { - uint pos = (log->count + log->pos - i) % log->count; + for (int i = this->vscroll.pos; i < (this->vscroll.cap + this->vscroll.pos) && i < log->used; i++) { + uint pos = (i + log->pos + 1 - log->used + log->count) % log->count; if (log->lines[pos] == NULL) break; TextColour colour; @@ -747,6 +759,8 @@ struct AIDebugWindow : public Window { this->RaiseWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START); ai_debug_company = show_ai; this->LowerWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START); + this->autoscroll = true; + this->last_vscroll_pos = this->vscroll.pos; this->SetDirty(); } diff --git a/src/ai/api/ai_log.cpp b/src/ai/api/ai_log.cpp index 6dc9cb365..8e3714773 100644 --- a/src/ai/api/ai_log.cpp +++ b/src/ai/api/ai_log.cpp @@ -32,7 +32,7 @@ log->lines = CallocT<char *>(80); log->type = CallocT<AILog::AILogType>(80); log->count = 80; - log->pos = log->count; + log->pos = log->count - 1; log->used = 0; } LogData *log = (LogData *)AIObject::GetLogPointer(); |