ScrollView::ScrollView() : impl(new ScrollViewImpl()) { impl->view = this; impl->scroll_x->set_hidden(); impl->scroll_y->set_hidden(); impl->scroll_x->set_horizontal(); impl->scroll_y->set_vertical(); impl->content_container->style()->set("flex: 1 1 main-size"); impl->content_container->set_content_clipped(true); impl->content_container->add_subview(impl->content); add_subview(impl->content_container); add_subview(impl->scroll_x); add_subview(impl->scroll_y); slots.connect(impl->scroll_x->sig_scroll(), [this]() { Pointf pos = content_offset(); pos.x = (float)impl->scroll_x->position(); set_content_offset(pos); }); slots.connect(impl->scroll_y->sig_scroll(), [this]() { Pointf pos = content_offset(); pos.y = (float)impl->scroll_y->position(); set_content_offset(pos); }); }
void gc_collect(struct RootSet *root) { LOG(";; gc_collect called\n"); memset(gc_to_space, 0xcd, gc_space_size); gc_scan = gc_free = gc_to_space; gc_walk_roots(root); while (gc_scan < gc_free) { Ptr *obj = OBJ(gc_scan); switch (OBJTAG(obj)) { case float_tag: error_exit("scan incorrect, unboxed type.\n"); break; case pair_tag: case symbol_tag: case vector_tag: case proc_tag: { unsigned int i, len = OBJLENGTH(obj); unsigned int offset = content_offset(obj); for (i=0; i<len; i++) gc_copy_forward(&obj[i+offset]); LOG("\n"); gc_scan += align(offset + len) * ws; break; } case number_tag: /* box */ case immed_tag: /* bytevector */ case string_tag: gc_scan += object_size(obj); break; } } LOG("switch roles of gc spaces\n"); char *temp = gc_to_space; gc_to_space = gc_cur_space; gc_cur_space = temp; heap_end = gc_cur_space + gc_space_size; memset(gc_to_space, 0xfd, gc_space_size); }