- en
- pl
OpenTTD GitHub
Wkład w OpenTTD - wytyczne
OpenTTD Doxygen
Styl kodowania
Kompilowanie OpenTTD
Debugowanie
Dodanie ustawienia
Dodanie funkcji squirrel
Zrozumienie obsługi SaveGame
Wyznaczenie wersji gry zapisanej
Wykonanie wydania OpenTTD
Podręcznik stylu
Format plików lang
Użycie ciągów OpenTTD
Lista ciągów specjalnych
Użycie systemu okna
Kody kolorów istniejących w OpenTTD
Dodawanie pola tekstowego
Zrozumienie widget focus system
Przewodnik stylu GUI
OpenTTD TCP protokół
OpenTTD UDP protokół
Debugowanie desynchronizacji
Rozwój Portu Administratora Serwera
Okno konsoli
Komendy konsoli
Zmienne konsoli
Używanie skryptu konsoli
Dodanie funkcji/komend do konsoli
Dodanie zmiennych do konsoli
Historia rozwoju Konsoli
Grafika i podobne (NewGRFy)
Środowisko AI (NoAI)
Framework GS (NoGO)
Tablica map (siatka pozioma)
Pojazdy
Wyszukiwanie trasy
Przyspieszenie pociągu
Ten dokument ma na celu krótkie wprowadzenie do systemu fokusowania widgetów.
Contents |
Focus poziomy
System fokusowy w OpenTTD ma dwa poziomy. Najpierw jest wskaźnik, który śledzi, które okno ma fokus. Następnie każde wystąpienie okna śledzi, który widget jest ustawiony w tym oknie. Oznacza to, że okno, które nie jest aktywne, nadal pamięta, który widżet był globalnie ustawiony, zanim inne okno nie ukradło go. Ten widget może później stać się widgetem zorientowanym globalnie, jeśli jego okno zostanie zogniskowane bez zmiany tego widgetu. (na przykład klikając pasek tytułu)
Termin globally focused widget odnosi się do skupionego widżetu skoncentrowanego okna. Window::IsWidgetGloballyFocused
zwróci tylko, jeśli dany widget, a także instancja okna jest skoncentrowana. Z drugiej strony Window::IsWidgetFocused
wymaga tylko, aby dany widżet był zogniskowany w instancji okna, ale samo okno nie musi być zogniskowane.
Termin local focus odnosi się do fokusa w oknie, niezależnie od tego, czy okno jest aktywne, czy nie.
Jak wchodzić w interakcje z systemem ustawiania ostrości
Ostatnie i najdokładniejsze szczegóły znajdują się w kodzie źródłowym.
Funkcje globalne
-
SetFocusedWindow(Window *w)
: Ustawia skoncentrowane (focused) okno
Okno members
-
IsWidgetFocused(byte widget_index)
: Sprawdza, czy dany widżet jest ustawiony w oknie -
IsWidgetGloballyFocused(byte widget_index)
: Sprawdza, czy dany widżet jest globalnie skoncentrowany -
SetFocusedWidget(byte widget_index)
: Ustaw fokus lokalnego widgetu na dany widget -
UnfocusFocusedWidget()
: Ustaw fokus lokalnego widgetu na null
Unfocus
Jeśli chcesz cofnąć fokus na aktualnie lokalnie skoncentrowanym widżecie, ale nie chcesz nadawać innego fokusa widżetowi, musisz użyć następującego kodu: (napisany jako sposób pisania z poziomu okna)
if (this->nested_focus != NULL) { this->nested_focus->SetDirty(this); this->nested_focus = NULL; }
Jeśli jednak okno używa starego nie zagnieżdżonego systemu widgetów, powyższy kod staje się:
if (this->focused_widget != NULL) { this->InvalidateWidget(this->focused_widget - this->widget); this->focused_widget = NULL; }