Skip to content

Commit

Permalink
glw: Drop GLW_ATTRIB_FREEZE, use function pointers instead
Browse files Browse the repository at this point in the history
  • Loading branch information
andoma committed Mar 12, 2011
1 parent afe540c commit b4d14f8
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 60 deletions.
12 changes: 10 additions & 2 deletions src/ui/glw/glw.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ typedef enum {
GLW_ATTRIB_CHILD_WIDTH,
GLW_ATTRIB_CHILD_TILES_X,
GLW_ATTRIB_CHILD_TILES_Y,
GLW_ATTRIB_FREEZE,
GLW_ATTRIB_PAGE,
GLW_ATTRIB_ALPHA_EDGES,
GLW_ATTRIB_PRIORITY,
Expand Down Expand Up @@ -506,6 +505,16 @@ typedef struct glw_class {
*/
void (*gc_set_source_prop)(struct glw *w, prop_t *p);

/**
*
*/
void (*gc_freeze)(struct glw *w);

/**
*
*/
void (*gc_thaw)(struct glw *w);

/**
* Registration link
*/
Expand Down Expand Up @@ -974,7 +983,6 @@ do { \
case GLW_ATTRIB_PIXMAP: \
(void)va_arg(ap, void *); \
break; \
case GLW_ATTRIB_FREEZE: \
case GLW_ATTRIB_MODE: \
case GLW_ATTRIB_TRANSITION_EFFECT: \
case GLW_ATTRIB_CHILD_TILES_X: \
Expand Down
8 changes: 1 addition & 7 deletions src/ui/glw/glw_image.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,6 @@ typedef struct glw_image {

uint8_t gi_update;

uint8_t gi_frozen;

uint8_t gi_alpha_edge;

uint8_t gi_was_valid;
Expand Down Expand Up @@ -637,7 +635,7 @@ glw_image_layout(glw_t *w, glw_rctx_t *rc)
gi->gi_was_valid = 1;
}

if(gi->gi_update && !gi->gi_frozen) {
if(gi->gi_update) {
gi->gi_update = 0;

glw_renderer_free(&gi->gi_gr);
Expand Down Expand Up @@ -947,10 +945,6 @@ glw_image_set(glw_t *w, va_list ap)
do {
attrib = va_arg(ap, int);
switch(attrib) {
case GLW_ATTRIB_FREEZE:
gi->gi_frozen = va_arg(ap, int);
break;

case GLW_ATTRIB_ANGLE:
gi->gi_angle = va_arg(ap, double);
break;
Expand Down
42 changes: 32 additions & 10 deletions src/ui/glw/glw_text_bitmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -1511,6 +1511,34 @@ bind_to_property(glw_t *w, prop_t *p, const char **pname,
glw_unhide(w);
}


/**
*
*/
static void
freeze(glw_t *w)
{
glw_text_bitmap_t *gtb = (glw_text_bitmap_t *)w;
gtb->gtb_frozen = 1;
}


/**
*
*/
static void
thaw(glw_t *w)
{
glw_text_bitmap_t *gtb = (glw_text_bitmap_t *)w;
gtb->gtb_frozen = 0;

if(gtb->gtb_pending_update) {
gtb_caption_has_changed(gtb);
gtb->gtb_pending_update = 0;
}
}


/**
*
*/
Expand All @@ -1531,16 +1559,6 @@ glw_text_bitmap_set(glw_t *w, va_list ap)
update = 1;
break;

case GLW_ATTRIB_FREEZE:
if(va_arg(ap, int)) {
gtb->gtb_frozen = 1;
} else {
if(gtb->gtb_pending_update)
update = 1;
gtb->gtb_frozen = 0;
}
break;

case GLW_ATTRIB_INT_STEP:
gtb->gtb_int_step = va_arg(ap, double);
break;
Expand Down Expand Up @@ -1856,6 +1874,8 @@ static glw_class_t glw_label = {
.gc_set_caption = set_caption,
.gc_bind_to_property = bind_to_property,
.gc_mod_flags2 = mod_flags2,
.gc_freeze = freeze,
.gc_thaw = thaw,
};

GLW_REGISTER_CLASS(glw_label);
Expand All @@ -1879,6 +1899,8 @@ static glw_class_t glw_text = {
.gc_mod_text_flags = mod_text_flags,
.gc_set_caption = set_caption,
.gc_bind_to_property = bind_to_property,
.gc_freeze = freeze,
.gc_thaw = thaw,
};

GLW_REGISTER_CLASS(glw_text);
75 changes: 40 additions & 35 deletions src/ui/glw/glw_video_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -166,13 +166,19 @@ glw_video_compute_avdiff(glw_root_t *gr, video_decoder_t *vd, media_pipe_t *mp,
*
*/
static void
glw_video_set_source(glw_video_t *gv, const char *url)
glw_video_play(glw_video_t *gv)
{
event_t *e;

mystrset(&gv->gv_current_url, url);
if(gv->gv_freezed)
return;

if(!strcmp(gv->gv_current_url ?: "", gv->gv_pending_url ?: ""))
return;

e = event_create_playurl(url,
mystrset(&gv->gv_current_url, gv->gv_pending_url ?: "");

e = event_create_playurl(gv->gv_current_url,
!!(gv->gv_flags & GLW_VIDEO_PRIMARY),
gv->gv_priority,
!!(gv->gv_flags & GLW_VIDEO_NO_AUDIO));
Expand Down Expand Up @@ -240,7 +246,6 @@ glw_video_widget_callback(glw_t *w, void *opaque, glw_signal_t signal,
{
glw_video_t *gv = (glw_video_t *)w;
video_decoder_t *vd = gv->gv_vd;
glw_rctx_t *rc;

switch(signal) {
case GLW_SIGNAL_LAYOUT:
Expand All @@ -249,18 +254,6 @@ glw_video_widget_callback(glw_t *w, void *opaque, glw_signal_t signal,

if(gv->gv_sub.gvo_child != NULL)
glw_layout0(gv->gv_sub.gvo_child, extra);

if(gv->gv_pending_url != NULL) {
if(gv->gv_pending_set_source_cnt == 0) {
rc = extra;

glw_video_set_source(gv, gv->gv_pending_url);
mystrset(&gv->gv_pending_url, NULL);

} else {
gv->gv_pending_set_source_cnt--;
}
}
return 0;

case GLW_SIGNAL_EVENT:
Expand Down Expand Up @@ -342,16 +335,37 @@ set_source(glw_t *w, const char *url)
{
glw_video_t *gv = (glw_video_t *)w;

if(url[0] != 0) {
if(gv->gv_freezed) {
gv->gv_pending_set_source_cnt = 5;
mystrset(&gv->gv_pending_url, url);
} else {
glw_video_set_source(gv, url);
}
}
if(url == NULL)
return;

mystrset(&gv->gv_pending_url, url);
glw_video_play(gv);
}


/**
*
*/
static void
freeze(glw_t *w)
{
glw_video_t *gv = (glw_video_t *)w;
gv->gv_freezed = 1;
}


/**
*
*/
static void
thaw(glw_t *w)
{
glw_video_t *gv = (glw_video_t *)w;
gv->gv_freezed = 0;
glw_video_play(gv);
}


/**
*
*/
Expand All @@ -367,17 +381,6 @@ glw_video_set(glw_t *w, va_list ap)
attrib = va_arg(ap, int);
switch(attrib) {

case GLW_ATTRIB_FREEZE:
gv->gv_freezed = va_arg(ap, int);

if(gv->gv_pending_url) {
glw_video_set_source(gv, gv->gv_pending_url);
mystrset(&gv->gv_pending_url, NULL);
gv->gv_pending_set_source_cnt = 0;
}

break;

case GLW_ATTRIB_PROPROOTS:
p = va_arg(ap, void *);
assert(p != NULL);
Expand Down Expand Up @@ -462,6 +465,8 @@ static glw_class_t glw_video = {
.gc_signal_handler = glw_video_widget_callback,
.gc_mod_video_flags = mod_video_flags,
.gc_set_source_str = set_source,
.gc_freeze = freeze,
.gc_thaw = thaw,
};

GLW_REGISTER_CLASS(glw_video);
Expand Down
1 change: 0 additions & 1 deletion src/ui/glw/glw_video_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,6 @@ typedef struct glw_video {

char *gv_current_url;
char *gv_pending_url;
int gv_pending_set_source_cnt;

int gv_flags;
int gv_priority;
Expand Down
15 changes: 10 additions & 5 deletions src/ui/glw/glw_view_eval.c
Original file line number Diff line number Diff line change
Expand Up @@ -998,10 +998,11 @@ clone_eval(clone_t *c)
sub_cloner_t *sc = c->c_sc;
glw_view_eval_context_t n;
token_t *body = glw_view_clone_chain(sc->sc_cloner_body);

const glw_class_t *gc = c->c_w->glw_class;
c->c_evaluated = 1;

glw_set(c->c_w, GLW_ATTRIB_FREEZE, 1, NULL);
if(gc->gc_freeze != NULL)
gc->gc_freeze(c->c_w);

memset(&n, 0, sizeof(n));
n.prop = c->c_prop;
Expand All @@ -1018,7 +1019,8 @@ clone_eval(clone_t *c)
glw_view_eval_block(body, &n);
glw_view_free_chain(body);

glw_set(c->c_w, GLW_ATTRIB_FREEZE, 0, NULL);
if(gc->gc_thaw != NULL)
gc->gc_thaw(c->c_w);
}


Expand Down Expand Up @@ -2048,16 +2050,19 @@ glwf_widget(glw_view_eval_context_t *ec, struct token *self,
n.rc = ec->rc;
n.w = glw_create(ec->gr, c, ec->w, NULL, NULL);

if(c->gc_freeze != NULL)
c->gc_freeze(n.w);

glw_set(n.w,
GLW_ATTRIB_FREEZE, 1,
GLW_ATTRIB_PROPROOTS, ec->prop, ec->prop_parent,
NULL);

n.sublist = &n.w->glw_prop_subscriptions;

r = glw_view_eval_block(b, &n);

glw_set(n.w, GLW_ATTRIB_FREEZE, 0, NULL);
if(c->gc_thaw != NULL)
c->gc_thaw(n.w);

return r ? -1 : 0;
}
Expand Down

0 comments on commit b4d14f8

Please sign in to comment.