void Indigo::UIPanel::on_size(glm::uvec2& sz) { m_sizer.fit(sz); if (m_render_background) render_pipe()->post(OOBase::make_delegate<OOBase::ThreadLocalAllocator>(m_render_background,&Render::UIDrawable::size),sz); }
void Indigo::UILayer::on_size(glm::uvec2& sz) { m_sizer.fit(sz); if (m_render_parent) render_pipe()->post(OOBase::make_delegate<OOBase::ThreadLocalAllocator>(static_cast<Render::UIDrawable*>(m_render_parent),&Render::UIDrawable::size),sz); }
const glm::uvec2& Indigo::UIWidget::size(const glm::uvec2& sz) { if (m_size != sz) { glm::uvec2 prev_size = m_size; glm::uvec2 new_size = glm::max(sz,this->min_size()); if (prev_size != new_size) { on_size(new_size); if (new_size != prev_size) { m_size = new_size; if (m_render_group) { render_pipe()->post(OOBase::make_delegate<OOBase::ThreadLocalAllocator>(static_cast<Render::UIDrawable*>(m_render_group),&Render::UIDrawable::size),m_size); make_dirty(); } } } } return m_size; }
glm::vec4 Indigo::ImageLayer::colour(const glm::vec4& colour) { glm::vec4 prev_colour = m_colour; if (colour != prev_colour) { OOBase::SharedPtr< ::ImageLayer> layer = OOBase::static_pointer_cast< ::ImageLayer>(render_layer()); if (layer) render_pipe()->post(OOBase::make_delegate<OOBase::ThreadLocalAllocator>(layer.get(),&::ImageLayer::colour),colour); } return prev_colour; }
void Indigo::UIWidget::on_state_change(OOBase::uint32_t state, OOBase::uint32_t change_mask) { if (change_mask & eWS_visible) { bool visible = (state & eWS_visible) == eWS_visible; if (m_render_group) { render_pipe()->post(OOBase::make_delegate<OOBase::ThreadLocalAllocator>(static_cast<Render::UIDrawable*>(m_render_group),&Render::UIDrawable::show),visible); make_dirty(); } } }
void Indigo::UILayer::on_state_change(OOBase::uint32_t state, OOBase::uint32_t change_mask) { if (change_mask & UIWidget::eWS_visible) { bool visible = (state & eWS_visible) == eWS_visible; if (visible) m_sizer.fit(size()); if (m_render_parent) render_pipe()->post(OOBase::make_delegate<OOBase::ThreadLocalAllocator>(static_cast<Render::UIDrawable*>(m_render_parent),&Render::UIDrawable::show),visible); } UIGroup::on_state_change(state,change_mask); }
void Indigo::UIWidget::position(const glm::ivec2& pos) { if (m_position != pos) { m_position = pos; if (m_render_group) { render_pipe()->post(OOBase::make_delegate<OOBase::ThreadLocalAllocator>(static_cast<Render::UIDrawable*>(m_render_group),&Render::UIDrawable::position),pos); make_dirty(); } } }
bool Indigo::UIGroup::add_widget(const OOBase::SharedPtr<UIWidget>& widget, const char* name, size_t len) { if (!m_children.push_back(widget)) LOG_ERROR_RETURN(("Failed to insert widget: %s",OOBase::system_error_text()),false); if (name && len && !add_named_widget(widget,name,len)) { m_children.pop_back(); return false; } if (!m_render_group) return true; bool ret = false; if (!render_pipe()->call(OOBase::make_delegate<OOBase::ThreadLocalAllocator>(m_render_parent,&Render::UIGroup::add_subgroup),widget.get(),&ret) || !ret) m_children.pop_back(); return ret; }
void render_all_pipes(GameData* data, DrawConfig* config){ for(int i=0; i < get_num_pipes(data); i++){ Pipe pipe = get_pipe(data,i); render_pipe(data,config,&pipe); } }
void Indigo::UILayer::make_dirty() { if (m_render_parent) render_pipe()->post(OOBase::make_delegate<OOBase::ThreadLocalAllocator>(static_cast<Render::UILayer*>(m_render_parent),&Render::UILayer::make_dirty)); }
void Indigo::UILayer::on_layout(const glm::uvec2& sz) { OOBase::Guard<Pipe> lock(*render_pipe()); size(sz); }
void Indigo::assert_render_thread() { assert(render_pipe()->is_local()); }
void Indigo::UINinePatch::on_size(glm::uvec2& sz) { if (m_render_9patch) render_pipe()->post(OOBase::make_delegate<OOBase::ThreadLocalAllocator>(m_render_9patch,&Render::UIDrawable::size),sz); }