This is the complete listing for the blit, pixpmap, and buffers sample.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <screen/screen.h>
const int barwidth = 32;
int main(int argc, char **argv)
{
int i, j, pos = 0;
screen_context_t screen_ctx;
screen_create_context(&screen_ctx, SCREEN_APPLICATION_CONTEXT);
screen_window_t screen_win;
screen_create_window(&screen_win, screen_ctx);
int usage = SCREEN_USAGE_NATIVE;
screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_USAGE, &usage);
int rect[4] = { 0, 0 };
screen_create_window_buffers(screen_win, 2);
screen_get_window_property_iv(screen_win, SCREEN_PROPERTY_BUFFER_SIZE, rect+2);
screen_pixmap_t screen_pix;
screen_create_pixmap(&screen_pix, screen_ctx);
int format = SCREEN_FORMAT_RGBA8888;
screen_set_pixmap_property_iv(screen_pix, SCREEN_PROPERTY_FORMAT, &format);
usage = SCREEN_USAGE_WRITE | SCREEN_USAGE_NATIVE;
screen_set_pixmap_property_iv(screen_pix, SCREEN_PROPERTY_USAGE, &usage);
int size[2] = { 100, 100 };
screen_set_pixmap_property_iv(screen_pix, SCREEN_PROPERTY_BUFFER_SIZE, size);
screen_buffer_t screen_pbuf;
screen_create_pixmap_buffer(screen_pix);
screen_get_pixmap_property_pv(screen_pix, SCREEN_PROPERTY_RENDER_BUFFERS, (void **)&screen_pbuf);
unsigned char *ptr = NULL;
screen_get_buffer_property_pv(screen_pbuf, SCREEN_PROPERTY_POINTER, (void **)&ptr);
int stride = 0;
screen_get_buffer_property_iv(screen_pbuf, SCREEN_PROPERTY_STRIDE, &stride);
for (i = 0; i < size[1]; i++, ptr += stride) {
for (j = 0; j < size[0]; j++) {
ptr[j*4] = 0xa0;
ptr[j*4+1] = 0xa0;
ptr[j*4+2] = 0xa0;
ptr[j*4+3] = ((j >= i && j <= size[1]-i) || (j <= i && j >= size[1]-i)) ? 0xff : 0;
}
}
while (1) {
screen_buffer_t screen_buf[2];
screen_get_window_property_pv(screen_win, SCREEN_PROPERTY_RENDER_BUFFERS, (void **)screen_buf);
int bg[] = { SCREEN_BLIT_COLOR, 0xffffff00, SCREEN_BLIT_END };
screen_fill(screen_ctx, screen_buf[0], bg);
int bar[] = {
SCREEN_BLIT_COLOR, 0xff0000ff,
SCREEN_BLIT_DESTINATION_X, pos,
SCREEN_BLIT_DESTINATION_WIDTH, barwidth,
SCREEN_BLIT_END };
screen_fill(screen_ctx, screen_buf[0], bar);
int hg[] = {
SCREEN_BLIT_SOURCE_WIDTH, 100,
SCREEN_BLIT_SOURCE_HEIGHT, 100,
SCREEN_BLIT_DESTINATION_X, 10,
SCREEN_BLIT_DESTINATION_Y, 10,
SCREEN_BLIT_DESTINATION_WIDTH, 100,
SCREEN_BLIT_DESTINATION_HEIGHT, 100,
SCREEN_BLIT_TRANSPARENCY, SCREEN_TRANSPARENCY_SOURCE_OVER,
SCREEN_BLIT_END
};
screen_blit(screen_ctx, screen_buf[0], screen_pbuf, hg);
screen_post_window(screen_win, screen_buf[0], 1, rect, 0);
if (++pos > rect[2] - barwidth) {
pos = 0;
}
}
return EXIT_SUCCESS;
}