diff -urN cui74/cui.c cui75/cui.c --- cui74/cui.c Mon Feb 10 01:00:00 2014 +++ cui75/cui.c Sun Mar 23 22:00:00 2014 @@ -292,12 +292,12 @@ { int visi = cui_is_visible(obj) && cui_esc_cnt > 0; int rsz = (obj->w != w || obj->h != h); - struct cui_rect rect; - cui_rect r = ▭ + struct cui_rect r1, r2; + cui_rects rs, ri; if(visi){ - cui_clear(obj); - cui_rect_init(r, cui_gx(obj), cui_gy(obj), obj->w, obj->h); + if(obj->parent) cui_rect_init(&r1, cui_gx(obj), cui_gy(obj), obj->w, obj->h); + else cui_clear(obj); obj->flags |= CUI_FLG_HIDE; } obj->x = x; @@ -307,12 +307,19 @@ if(rsz) cui_handler_call(obj, CUI_EVT_RESIZE, TRUE); if(visi){ obj->flags &= ~CUI_FLG_HIDE; - cui_clear(obj); - - cui_clip = r; - cui_draw(obj->parent); - cui_clip = NULL; - cui_draw(obj); + if(obj->parent){ + cui_rect_init(&r2, cui_gx(obj), cui_gy(obj), obj->w, obj->h); + rs = cui_rect_or(&r1, &r2); + for(ri=rs; ri; ri=ri->next){ + cui_clip = (cui_rect)ri; + cui_clear(obj->parent); + cui_draw(obj->parent); + } + cui_clip = NULL; + cui_rects_free(rs); + }else{ + cui_draw(obj); + } } if(obj == cui_focus_get() && !cui_is_visible_rect(obj)) cui_focus_set(NULL); }