static void spritebutton_render(component *c) { spritebutton *sb = widget_get_obj(c); sizer *s = component_get_obj(c->parent); if(sb->active > 0) { video_render_sprite(sb->img, c->x, c->y, BLEND_ALPHA, 0); } if(sb->text) { sb->tconf.opacity = clamp(s->opacity * 255, 0, 255); text_render(&sb->tconf, c->x, c->y, c->w, c->h, sb->text); } }
static void xysizer_render(component *c) { sizer *s = component_get_obj(c); // Just render all children iterator it; component **tmp; vector_iter_begin(&s->objs, &it); while((tmp = iter_next(&it)) != NULL) { component_render(*tmp); } }
static int xysizer_event(component *c, SDL_Event *event) { sizer *s = component_get_obj(c); // Just pass events to all children int handled = 0; iterator it; component **tmp; vector_iter_begin(&s->objs, &it); while((tmp = iter_next(&it)) != NULL) { handled |= component_event(*tmp, event); } return 1; // Wasn't handled here (event though it might have been) }
static void xysizer_layout(component *c, int x, int y, int w, int h) { sizer *s = component_get_obj(c); // Set layout for all components in the sizer iterator it; component **tmp; vector_iter_begin(&s->objs, &it); while((tmp = iter_next(&it)) != NULL) { // Set component position and size from the component hint int m_x = ((*tmp)->x_hint < x) ? x : (*tmp)->x_hint; int m_y = ((*tmp)->y_hint < y) ? y : (*tmp)->y_hint; int m_w = ((*tmp)->w_hint < 0) ? 0 : (*tmp)->w_hint; int m_h = ((*tmp)->h_hint < 0) ? 0 : (*tmp)->h_hint; if(m_w == 0 || m_h == 0) { DEBUG("Warning: Gui component hidden, because size is 0. Make sure size hints are set!"); } component_layout(*tmp, m_x, m_y, m_w, m_h); } }