summaryrefslogtreecommitdiff
path: root/example/rectangle.c
blob: 73f9c4b7f727c483d05471c3365f68fb7c16c6c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#define FBGL_IMPLEMENTATION
#include "../fbgl.h"

int main(int argc, char *argv[])
{
    fbgl_t buffer;
    if (fbgl_init("/dev/fb0", &buffer) == -1) {
        fprintf(stdout, "Error: could not open framebuffer device\n");
        return -1;
    }

    fbgl_set_bg(&buffer, 0xFFFFFF);  // Set the background to white

    fbgl_point_t start = {100, 100};
    fbgl_point_t end = {200, 200};
    fbgl_draw_rectangle_outline(start, end, 0xFF0000, &buffer);  // Draw red rectangle outline

    fbgl_point_t start2 = {600, 400};
    fbgl_point_t end2 = {800, 800};
    uint32_t colors[] = {0xFFC00, 0x00FF00, 0x0000FF, 0xFF00FF};  // Yellow, Green, Blue, Magenta
    size_t color_index = 0;
    
    // Initial position of the marquee rectangle
    int dx = 15;  // Horizontal speed
    int dy = 8;  // Vertical speed

    while (1) {
        // Clear the framebuffer (set background)
        fbgl_set_bg(&buffer, 0xFFFFFF);


        // Draw the moving filled rectangle
        fbgl_draw_rectangle_filled(start2, end2, colors[color_index], &buffer);
	
        // Move the filled rectangle by updating its position
        start2.x += dx;
        end2.x += dx;
        start2.y += dy;
        end2.y += dy;

        // Reverse direction if the rectangle hits the screen boundary
        if (start2.x <= 0 || end2.x >= buffer.width) {
            dx = -dx;
	    color_index++;
        }
        if (start2.y <= 0 || end2.y >= buffer.height) {
            dy = -dy;
	    color_index++;
        }
	if (color_index >= 4) {
	    color_index = 0;
	}

        usleep(50000);  // Delay to make the animation visible (adjust as needed)
    }

    fbgl_destroy(&buffer);
    return 0;
}