MCPcopy Create free account
hub / github.com/OpenTTD/OpenTTD / DrawTimetablePanel

Method DrawTimetablePanel

src/timetable_gui.cpp:426–461  ·  view source on GitHub ↗

* Helper function to draw the timetable panel. * @param r The rect to draw within. */

Source from the content-addressed store, hash-verified

424 * @param r The rect to draw within.
425 */
426 void DrawTimetablePanel(const Rect &r) const
427 {
428 const Vehicle *v = this->vehicle;
429 if (v->GetNumOrders() == 0) return;
430 Rect tr = r.Shrink(WidgetDimensions::scaled.framerect);
431 int i = this->vscroll->GetPosition();
432 VehicleOrderID order_id = (i + 1) / 2;
433 bool final_order = false;
434 int selected = this->sel_index;
435
436 bool rtl = _current_text_dir == TD_RTL;
437 int index_column_width = GetStringBoundingBox(GetString(STR_ORDER_INDEX, GetParamMaxValue(v->GetNumOrders(), 2))).width + 2 * GetSpriteSize(rtl ? SPR_ARROW_RIGHT : SPR_ARROW_LEFT).width + WidgetDimensions::scaled.hsep_normal;
438 int middle = rtl ? tr.right - index_column_width : tr.left + index_column_width;
439
440 auto orders = v->Orders();
441 while (true) {
442 /* Don't draw anything if it extends past the end of the window. */
443 if (!this->vscroll->IsVisible(i)) break;
444
445 if (i % 2 == 0) {
446 DrawOrderString(v, &orders[order_id], order_id, tr.top, i == selected, true, tr.left, middle, tr.right);
447 if (v->orders->GetNext(order_id) == 0) final_order = true;
448 order_id = v->orders->GetNext(order_id);
449 } else {
450 TextColour colour;
451 std::string string = GetTimetableTravelString(orders[order_id], i, colour);
452
453 DrawString(rtl ? tr.left : middle, rtl ? middle : tr.right, tr.top, string, colour);
454
455 if (final_order) break;
456 }
457
458 i++;
459 tr.top += GetCharacterHeight(FS_NORMAL);
460 }
461 }
462
463 /**
464 * Helper function to draw the arrival and departure panel.

Callers 1

DrawWidgetMethod · 0.95

Calls 13

GetStringBoundingBoxFunction · 0.85
GetParamMaxValueFunction · 0.85
GetSpriteSizeFunction · 0.85
DrawOrderStringFunction · 0.85
GetCharacterHeightFunction · 0.85
ShrinkMethod · 0.80
GetPositionMethod · 0.80
OrdersMethod · 0.80
GetNextMethod · 0.80
GetStringFunction · 0.70
DrawStringFunction · 0.70
GetNumOrdersMethod · 0.45

Tested by

no test coverage detected