Exemplo n.º 1
0
	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);
		});
	}
Exemplo n.º 2
0
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);
}