k-tana-zero/libs/libk/include/graphic.h
Julien CLEMENT 7178dbb6a7 feat: add given files
Signed-off-by: Julien CLEMENT <julien.clement@epita.fr>
2021-07-12 15:57:08 +02:00

195 lines
4.6 KiB
C

/*
* Copyright (c) LSE
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY LSE AS IS AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL LSE BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef GRAPHIC_H_
#define GRAPHIC_H_
#include <kstd.h>
#include <stddef.h>
#include <string.h>
#include <stdio.h>
/* this file should really be cleaned :) */
/*
* some characteristics about the display.
*/
#define GRAPHIC_WIDTH 320
#define GRAPHIC_HEIGHT 200
#define FB_SIZE (GRAPHIC_WIDTH * GRAPHIC_HEIGHT)
#define PALETTE_SIZE 256
/*
* image structure. used load_image, clear_image and draw_image to
* manipulate images.
*/
struct image {
unsigned int width;
unsigned int height;
unsigned char **data;
};
/*
* animation structure.
*
*/
struct anim {
int nr_img;
int current_img;
unsigned long delay;
unsigned long jiffies;
struct image **imgs;
};
/*
* a color is an index in the palette.
*/
typedef unsigned int color_t;
/*
* some colors.
*/
enum colors {
BLACK = 0,
WHITE = 255,
RED = 249,
GREEN = 250,
YELLOW = 251,
BLUE = 252,
PURPLE = 253,
AQUA = 254,
ORANGE = 23
};
/*
* this function switches to graphic mode.
*/
void switch_graphic(void);
/*
* this function get back to text mode.
*/
void switch_text(void);
/*
* this fumction changes the color palette of the VGA.
*/
void set_palette(unsigned int *new_palette, size_t size);
/*
* call this function at the beginning of drawing a frame.
*/
void draw_begin(void);
/*
* call this function when finished drawing. this is the function that
* copy your buffered draw from off-screen buffer to framebuffer.
*/
void draw_end(void);
/*
* clears the screen with given color.
*/
void draw_clear(color_t color);
/*
* this function plot a pixel of given color at given position.
*/
void draw_pixel(unsigned int x, unsigned int y, color_t color);
/*
* draw a line.
*/
void draw_line(unsigned int x1, unsigned int y1,
unsigned int x2, unsigned int y2, color_t color);
/*
* draw an empty rectangle.
*/
void draw_rect(unsigned int x1, unsigned int y1,
unsigned int x2, unsigned int y2, color_t color);
/*
* draw a solid rectangle.
*/
void draw_fillrect(unsigned int x1, unsigned int y1,
unsigned int x2, unsigned int y2,
color_t color, color_t interior);
/*
* load a Windows BITMAP (BMP) from file.
* the only supported files are 8 bits per pixels paletted.
* the only supported palette is the default one (obtained with Paint).
*/
struct image *load_image(const char *path);
/*
* destroy a loaded image.
*/
void clear_image(struct image *image);
/*
* display a loaded image with transparency.
*/
void draw_image_alpha(struct image *image,
unsigned int x, unsigned int y, unsigned int alpha);
/*
* display a loaded image.
*/
void draw_image(struct image *image, unsigned int x, unsigned int y);
/*
* draw some text.
*/
void draw_text(const char *s,
unsigned int x, unsigned int y, color_t fg, color_t bg);
/*
* load an animation.
* paths is string containing the images name separated by a space.
* load_anim supports the same image formats as load_image.
* delay is the displaying time of each image (in ticks).
*
* invocation example: load_anim("pic1 pic2 pic3 pic4 pic5", PIC_ANIM_DELAY);
*/
struct anim *load_anim(char *paths, int delay);
/*
* draw an animation at coordinates (x, y)
*
* jiffies is the reference ticks counter which should
* be incremented at every timer tick.
*/
void draw_anim(struct anim * anim, int x, int y, unsigned long jiffies);
/*
* video blue screen.
*/
extern void (*blue_screen)(const char *message);
#endif /* !GRAPHIC_H_ */