Esempio n. 1
0
struct rtgui_dc *rtgui_dc_buffer_create_from_dc(struct rtgui_dc* dc)
{
    struct rtgui_dc_buffer *buffer;

    if (dc == RT_NULL)
        return RT_NULL;

    if (dc->type == RTGUI_DC_BUFFER)
    {
        struct rtgui_dc_buffer *d = (struct rtgui_dc_buffer*) dc;

        /* buffer clone */
        buffer = (struct rtgui_dc_buffer*)rtgui_dc_buffer_create_pixformat(d->pixel_format,
                                                                           d->width,
                                                                           d->height);
        if (buffer != RT_NULL)
        {
            rt_memcpy(buffer->pixel, d->pixel, d->pitch * d->height);

            return RTGUI_DC(buffer);
        }
    }

    return RT_NULL;
}
Esempio n. 2
0
struct rtgui_dc *rtgui_dc_buffer_create(int w, int h)
{
	rt_uint8_t pixel_format;

	pixel_format = rtgui_graphic_driver_get_default()->pixel_format;

	/* create a dc_buffer with hardware driver pixel format */
	return rtgui_dc_buffer_create_pixformat(pixel_format, w, h);
}
Esempio n. 3
0
struct rtgui_dc*
rtgui_graphic_driver_get_rect_buffer(const struct rtgui_graphic_driver *driver,
                                     struct rtgui_rect *r)
{
    int w, h;
    struct rtgui_dc_buffer *buffer;
    rt_uint8_t *pixel, *dst;
    struct rtgui_rect src, rect;

    /* use virtual framebuffer in default */
    if (driver == RT_NULL) driver = _current_driver;

    if (r == RT_NULL)
    {
        rtgui_graphic_driver_get_rect(driver, &rect);
    }
    else
    {
        rtgui_graphic_driver_get_rect(driver, &src);
        rect = *r;
        rtgui_rect_intersect(&src, &rect);
    }

    w = rtgui_rect_width (rect);
    h = rtgui_rect_height(rect);
    if (!(w && h) || driver->framebuffer == RT_NULL)
        return RT_NULL;

    /* create buffer DC */
    buffer = (struct rtgui_dc_buffer*)rtgui_dc_buffer_create_pixformat(driver->pixel_format, w, h);
    if (buffer == RT_NULL)
        return (struct rtgui_dc*)buffer;

    /* get source pixel */
    pixel = (rt_uint8_t*)driver->framebuffer
            + rect.y1 * driver->pitch
            + rect.x1 * rtgui_color_get_bpp(driver->pixel_format);

    dst = buffer->pixel;

    while (h--)
    {
        memcpy(dst, pixel, buffer->pitch);

        dst += buffer->pitch;
        pixel += driver->pitch;
    }

    return (struct rtgui_dc*)buffer;
}
Esempio n. 4
0
static struct app_list_view *app_list_create(rtgui_rect_t *rect,
                                             struct app_item *items,
                                             rt_uint16_t item_count,
                                             rt_uint8_t row_items,
                                             rt_uint8_t col_items,
                                             rtgui_image_t *bg_image)
{
    struct app_list_view *view = RT_NULL;
    view = (struct app_list_view *)rtgui_malloc(sizeof(struct app_list_view));
    view->rect = *rect;
    view->view_rect.x1 = rect->x1;
    view->view_rect.x2 = rect->x2;
    view->view_rect.y1 = rect->y1 + 4 * LIST_MARGIN;
    view->view_rect.y2 = rect->y2 - 6 * LIST_MARGIN;
    view->col_items = col_items;
    view->row_items = row_items;
    view->current_page = 0;
    view->old_page = 0;
    view->page_items = col_items * row_items;
    view->page_count = (item_count + view->page_items - 1) / view->page_items;
    view->current_item = -1;
    view->items = items;
    view->items_count = item_count;
    if (bg_image != RT_NULL)
    {
        rtgui_rect_t bg_rect;

        RTGUI_RECT(bg_rect, 0, 0, bg_image->w, bg_image->h);
        /* create background dc buffer */
        view->bg_buffer = rtgui_dc_buffer_create(bg_image->w, bg_image->h);
        /* draw background image to buffer */
        rtgui_image_blit(bg_image, view->bg_buffer, &bg_rect);
    }
    /* create the main menu dc buffer */
    view->view_buffer =
        rtgui_dc_buffer_create_pixformat(RTGRAPHIC_PIXEL_FORMAT_ARGB888,
                                         rtgui_rect_width(view->view_rect) *
                                         view->page_count,
                                         rtgui_rect_height(view->view_rect));
    RTGUI_DC_BC(view->view_buffer) = RTGUI_ARGB(0, 0, 0, 0);

    view->pm_rect.x1 = 0;
    view->pm_rect.y1 = rect->y2 - 6 * LIST_MARGIN;
    view->pm_rect.x2 = PAGE_MARK_ITEM_WIDTH * view->page_count + PAGE_MARK_MARGIN *
                       (view->page_count - 1);
    view->pm_rect.y2 = view->pm_rect.y1 + PAGE_MARK_ITEM_HEIGHT;

    view->pm_buffer =
        rtgui_dc_buffer_create_pixformat(RTGRAPHIC_PIXEL_FORMAT_ARGB888,
                                         rtgui_rect_width(view->pm_rect) ,
                                         rtgui_rect_height(view->pm_rect));
    rtgui_rect_moveto_align(rect, &view->pm_rect, RTGUI_ALIGN_CENTER_HORIZONTAL);

    RTGUI_DC_BC(view->pm_buffer) = RTGUI_ARGB(0, 0, 0, 0);

    view->bgdisp_point.x = 0;
    view->bgdisp_point.y = 0;
    view->listdisp_point.x = 0;
    view->listdisp_point.y = 0;
    view->on_select = RT_NULL;
    return view;
}