static int glw_slider_callback(glw_t *w, void *opaque, glw_signal_t signal, void *extra) { glw_slider_t *s = (glw_slider_t *)w; glw_t *c; switch(signal) { case GLW_SIGNAL_DESTROY: slider_unbind(s); break; case GLW_SIGNAL_CHILD_CONSTRAINTS_CHANGED: c = extra; if(w->glw_class == &glw_slider_y) { glw_set_constraints(w, c->glw_req_size_x, 0, 0, GLW_CONSTRAINT_X); } else { glw_set_constraints(w, 0, c->glw_req_size_y, 0, GLW_CONSTRAINT_Y); } return 1; default: break; } return 0; }
static int glw_slider_bind_id(glw_t *w, const char *id) { glw_slider_t *s = (glw_slider_t *)w; slider_unbind(s); slider_bind_by_id(s, id); return 1; }
static void bind_to_property(glw_t *w, prop_t *p, const char **pname, prop_t *view, prop_t *args, prop_t *clone) { glw_slider_t *s = (glw_slider_t *)w; slider_unbind(s); s->sub = prop_subscribe(PROP_SUB_DIRECT_UPDATE, PROP_TAG_NAME_VECTOR, pname, PROP_TAG_CALLBACK, prop_callback, s, PROP_TAG_COURIER, w->glw_root->gr_courier, PROP_TAG_NAMED_ROOT, p, "self", PROP_TAG_NAMED_ROOT, view, "view", PROP_TAG_NAMED_ROOT, args, "args", PROP_TAG_NAMED_ROOT, clone, "clone", PROP_TAG_ROOT, w->glw_root->gr_uii.uii_prop, NULL); }
static void glw_slider_set(glw_t *w, va_list ap) { glw_slider_t *s = (glw_slider_t *)w; glw_attribute_t attrib; const char *n; do { attrib = va_arg(ap, int); switch(attrib) { case GLW_ATTRIB_BIND_TO_ID: slider_unbind(s); n = va_arg(ap, const char *); slider_bind_by_id(s, n); break; case GLW_ATTRIB_INT_MIN: s->min = va_arg(ap, double); s->step_i = s->step / (s->max - s->min); break; case GLW_ATTRIB_INT_MAX: s->max = va_arg(ap, double); s->step_i = s->step / (s->max - s->min); break; case GLW_ATTRIB_INT_STEP: s->step = va_arg(ap, double); s->step_i = s->step / (s->max - s->min); break; default: GLW_ATTRIB_CHEW(attrib, ap); break; } } while(attrib); }
static int glw_slider_callback(glw_t *w, void *opaque, glw_signal_t signal, void *extra) { glw_slider_t *s = (glw_slider_t *)w; glw_t *c; switch(signal) { case GLW_SIGNAL_LAYOUT: glw_slider_layout(w, extra); break; case GLW_SIGNAL_EVENT: if(w->glw_class == &glw_slider_x) return glw_slider_event_x(w, extra); else return glw_slider_event_y(w, extra); case GLW_SIGNAL_POINTER_EVENT: return pointer_event(w, extra); case GLW_SIGNAL_DESTROY: slider_unbind(s); break; case GLW_SIGNAL_CHILD_CONSTRAINTS_CHANGED: c = extra; if(w->glw_class == &glw_slider_y) { glw_set_constraints(w, c->glw_req_size_x, 0, 0, GLW_CONSTRAINT_X); } else { glw_set_constraints(w, 0, c->glw_req_size_y, 0, GLW_CONSTRAINT_Y); } return 1; default: break; } return 0; }