SDL Window Engine  20200905
Открытые статические члены | Полный список членов класса
Класс SWE::DisplayScene

#include <swe_display_scene.h>

Открытые статические члены

static WindowrootWindow (void)
 
static WindowfocusedWindow (void)
 
static const std::list< Window * > & items (void)
 
static std::list< Window * > findChilds (const Window &)
 
static std::list< Window * > findParents (const Window &)
 
static void addObject (BaseObject &)
 
static void removeObject (const BaseObject &)
 
static void addItem (Window &)
 функция добавления объекта Window на сцену Подробнее...
 
static void removeItem (const Window &)
 функция удаления объекта Window из сцены Подробнее...
 
static void pushEvent (const ObjectEvent *dst, int code, void *data)
 функция отправки сообщения на сцену
 
static void moveTopLayer (const Window &)
 
static void sceneRedraw (bool force=false)
 функция рендера сцены DisplayScene. Подробнее...
 
static void handleWhileVisible (const Window &)
 
static void setCursor (const Texture &, const Point &)
 функция установки спрайта графического курсора
 
static void resetCursor (void)
 функция отмены установки спрайта графического курсора
 
static void setDirty (bool)
 фунция манипулирования флагом необходимости отрисовки сцены
 
static void handleEvents (u32 interval=0)
 функция главного цикла сцены DisplayScene. Подробнее...
 
static void dumpScene (void)
 функция дампа в консоль всех Window обектов текущей сцены
 

Подробное описание

Основной цикл обработки сообщений сцены

Цикл обработки запускается от любого объекта класса Window,

int Window::exec(void);

при этом допустимы вложенные вызовы, [Window::exec()] -> [Window::exec()] -> [Window::exec()]

Цикл обработки определен в DisplayScene::handleEvents, и состоит из трех из 3 основных частей:

Базовое взаимодействиe между объектами сцены DisplayScene:

  1. использование методов класса ObjectEvent
    • отправка event
      void pushEventAction(int code, ObjectEvent* dst, void* data);
    • получение через виртуальную функцию
      bool userEvent(int code, void* data) override;
      особенность данного метода - используется внутренние механизмы SDL_PushEvent/SDL_PollEvent, здесь есть возможность отправки данных через указатель и получение event происходит на следующую итерацию основного цикла обработки событий DisplayScene.
  2. использование методов класса SignalMember
    • подписка на событие
      void signalSubscribe(const SignalMember & sender, int signal, SignalMember & receiver);
    • отправка signal со стороны отправителя
      void signalEmit(int signal);
    • получение через виртуальную функцию
      void signalReceive(int signal, const SignalMember* sender) override;
      особенность данного метода - получение signal происходит на этойже итерации в конце основного цикла обработки событий DisplayScene, а также нет возможности отправки данных.

Методы

◆ addItem()

void SWE::DisplayScene::addItem ( Window win)
static

функция добавления объекта Window на сцену

Предупреждения
при создании объекта Window вызывается автоматически из конструктора Window

◆ handleEvents()

void SWE::DisplayScene::handleEvents ( u32  interval = 0)
static

функция главного цикла сцены DisplayScene.

состоит из 3 основных частей, обработка системных событий Display::handleEvents, генерация события ObjectEvent::tickEvent, рендера сцены DisplayScene::sceneRedraw

◆ removeItem()

void SWE::DisplayScene::removeItem ( const Window win)
static

функция удаления объекта Window из сцены

Предупреждения
при удалении объекта Window вызывается автоматически из деструктора Window

◆ sceneRedraw()

void SWE::DisplayScene::sceneRedraw ( bool  force = false)
static

функция рендера сцены DisplayScene.

рендер всех видимых объектов на сцене, необходимость отрисовки задается через метод DisplayScene::setDirty, генерирует событие Window::renderPresentEvent на каждый объект Window


Объявления и описания членов классов находятся в файлах: