aboutsummaryrefslogblamecommitdiff
path: root/src/lib/include/kogata/draw.h
blob: d8a2e1326c7748bec1eb0d31759e1bf107680d7d (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14

            
                           










                                  


                      








                                                                                                
                                                                     
 

                           














                                                                                  

                                                        






                                                                        

                                  


                                          

                              







                                                                                
#pragma once

#include <kogata/syscall.h>
#include <proto/fb.h>

//  ---- Generic drawing functions

//  ---- Data structures

typedef struct {
	fb_info_t geom;

	fd_t fd;
	uint8_t* data;

	int nrefs;
	bool own_data;
} fb_t;

typedef struct font font_t;

typedef uint32_t color_t;	// a color is always linked to a FB on which it is to be applied

//  ---- Buffer creation

fb_t *g_fb_from_file(fd_t file, fb_info_t *geom);
fb_t *g_fb_from_mem(uint8_t* region, fb_info_t *geom, bool own_data);

void g_incref_fb(fb_t *fb);
void g_decref_fb(fb_t *fb);

//  ---- Color manipulation

color_t g_color_rgb(fb_t *f, uint8_t r, uint8_t g, uint8_t b);

//  ---- Drawing primitives

void g_plot(fb_t *fb, int x, int y, color_t c);

void g_hline(fb_t *fb, int x, int y, int w, color_t c);		// horizontal line
void g_vline(fb_t *fb, int x, int y, int h, color_t c);		// vertical line
void g_line(fb_t *fb, int x1, int y1, int x2, int y2, color_t c);

void g_rect(fb_t *fb, int x, int y, int w, int h, color_t c);
void g_fillrect(fb_t *fb, int x, int y, int w, int h, color_t c);
void g_rectregion(fb_t *fb, fb_region_t reg, color_t c);
void g_fillregion(fb_t *fb, fb_region_t reg, color_t c);

void g_circle(fb_t *fb, int cx, int cy, int r, color_t c);
void g_fillcircle(fb_t *fb, int cx, int cy, int r, color_t c);

void g_blit(fb_t *dst, int x, int y, fb_t *src);
void g_blit_region(fb_t *dst, int x, int y, fb_t *src, fb_region_t reg);

void g_scroll_up(fb_t *fb, int l);

//  ---- Text manipulation

font_t *g_load_font(const char* fontname);
void g_incref_font(font_t *f);
void g_decref_font(font_t *f);

int g_text_width(font_t *f, const char* text);
int g_text_height(font_t *f, const char* text);

void g_write(fb_t *fb, int x, int y, const char* text, font_t *font, color_t c);


/* vim: set ts=4 sw=4 tw=0 noet :*/