diff options
| author | Olivier Gayot <duskcoder@gmail.com> | 2017-12-28 21:52:04 +0100 | 
|---|---|---|
| committer | Olivier Gayot <duskcoder@gmail.com> | 2017-12-28 21:52:04 +0100 | 
| commit | 3282ab0cd838ab7e070021cd2a537d78e60d263a (patch) | |
| tree | a05ead754b3dd1ac8bf2dc9549c77d5ab135d238 /src | |
Imported sources files into the Git
Signed-off-by: Olivier Gayot <duskcoder@gmail.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/bar.c | 252 | ||||
| -rw-r--r-- | src/digit.c | 362 | ||||
| -rw-r--r-- | src/line.c | 56 | ||||
| -rw-r--r-- | src/pixel.c | 69 | ||||
| -rw-r--r-- | src/rect.c | 31 | ||||
| -rw-r--r-- | src/string.c | 37 | 
6 files changed, 807 insertions, 0 deletions
diff --git a/src/bar.c b/src/bar.c new file mode 100644 index 0000000..f498bb8 --- /dev/null +++ b/src/bar.c @@ -0,0 +1,252 @@ +/* +** bar.c for  in /home/gayot_o/prog/lib/sdl-digit +**  +** Made by olivier gayot +** Login   <gayot_o@epitech.net> +**  +** Started on  Mon Apr 23 08:05:18 2012 olivier gayot +** Last update Mon Apr 23 08:05:18 2012 olivier gayot +*/ + +#include		"sdl_digit.h" + +void		draw_horizontal_bar(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  for (int j = 0; j < size / 5; ++j) { +    int		decal = ABS((size / 5) / 2 - j); +    SDL_Rect	begin = get_rect(rect->x + decal, rect->y + j, 0,0); +    SDL_Rect	end = get_rect(rect->x + size - decal, rect->y + j, 0,0); +    draw_line(surf, begin, end, color); +  } +} + +void		draw_semi_horizontal_bar(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  for (int j = 0; j < size / 5; ++j) { +    int		decal = ABS((size / 5) / 2 - j); +    SDL_Rect	begin = get_rect(rect->x + decal, rect->y + j, 0,0); +    SDL_Rect	end = get_rect(rect->x + size / 2 - decal, rect->y + j, 0,0); +    draw_line(surf, begin, end, color); +  } +} + +void		draw_vertical_bar(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  int		l = size / 5; +  for (int i = 0; i < l; ++i) { +    int		decal = ABS(l / 2 - i); +    SDL_Rect	begin = get_rect(rect->x + i, rect->y + decal, 0, 0); +    SDL_Rect	end = get_rect(rect->x + i, rect->y + size - decal, 0, 0); +    draw_line(surf, begin, end, color); +  } +} + +void		draw_semi_vertical_bar(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  int		l = size / 5; +  for (int i = 0; i < l; ++i) { +    int		decal = ABS(l / 2 - i); +    SDL_Rect	begin = get_rect(rect->x + i, rect->y + decal, 0, 0); +    SDL_Rect	end = get_rect(rect->x + i, rect->y + size / 2 - decal, 0, 0); +    draw_line(surf, begin, end, color); +  } +} + +void		draw_diag_left_bar(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  float		l = ((float)size / 5.f); +  int		b = l / 2; +  int		h = size - 2 * b; +  int		a = (int)(l / (sqrtf(2.f))); +  SDL_Rect	begin; +  SDL_Rect	end; + +  for (int y = 0; y < h; ++y) { +    begin.x = 0; +    begin.y = rect->y + y; +    end.x = a + y; +    end.y = rect->y + y; +    if (y > a) +      begin.x += y - a; +    if (y >= h - a) +      end.x -= y - (h - a); +    begin.x += rect->x; +    end.x += rect->x; +    draw_line(surf, begin, end, color); +  } +} + +void		draw_diag_right_bar(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  float		l = ((float)size / 5.f); +  int		b = l / 2; +  int		h = size - 2 * b; +  int		a = (int)(l / (sqrtf(2.f))); +  SDL_Rect	begin; +  SDL_Rect	end; + +  for (int y = 0; y < h; ++y) { +    begin.x = 0; +    begin.y = rect->y + y; +    end.x = a + y; +    end.y = rect->y + y; +    if (y > a) +      begin.x += y - a; +    if (y >= h - a) +      end.x -= y - (h - a); +    begin.x = h - begin.x; +    end.x = h - end.x; +    begin.x += rect->x; +    end.x += rect->x; +    draw_line(surf, begin, end, color); +  } +} + +void		draw_backslash_bar(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  float		l = ((float)size / 5.f); +  int		b = l / 2; +  int		h = size - 2 * b; +  int		a = (int)(l / (sqrtf(2.f))); +  SDL_Rect	begin; +  SDL_Rect	end; + +  for (int y = 0; y < h; ++y) { +    begin.y = rect->y + y; +    end.y = rect->y + y; + +    begin.x = 0; +    end.x = a + y / 2; +     +    if (y > a) +      begin.x += (y / 2) - a / 2; +    if (y >= h - a) +      end.x -= (y - (h - a)) / 2; +    begin.x += rect->x; +    end.x += rect->x; +    draw_line(surf, begin, end, color); +  } +} + +void		draw_slash_bar(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  float		l = ((float)size / 5.f); +  int		b = l / 2; +  int		h = size - 2 * b; +  int		a = (int)(l / (sqrtf(2.f))); +  SDL_Rect	begin; +  SDL_Rect	end; + +  for (int y = 0; y < h; ++y) { +    begin.y = rect->y + y; +    end.y = rect->y + y; + +    begin.x = 0; +    end.x = a + y / 2; +     +    if (y > a) +      begin.x += (y / 2) - a / 2; +    if (y >= h - a) +      end.x -= (y - (h - a)) / 2; +    begin.x = h / 2 - begin.x; +    begin.x += rect->x; +    end.x = h / 2 - end.x; +    end.x += rect->x; +    draw_line(surf, begin, end, color); +  } +} + +/* id is : + *  0 + * 1 2 + *  3 + * 4 5 + *  6 + */ + +void		draw_bar_id(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color, int id) { +  SDL_Rect	*rect_; + +  switch (id) { +    case 0: +      rect_ = new_rect(rect->x + (size / 5) / 2, rect->y, 0, 0); +      draw_horizontal_bar(surf, rect_, size, color); +      break; +    case 1: +      rect_ = new_rect(rect->x, rect->y + (size / 5) / 2, 0, 0); +      draw_vertical_bar(surf, rect_, size, color); +      break; +    case 2: +      rect_ = new_rect(rect->x + size, rect->y + (size / 5) / 2, 0, 0); +      draw_vertical_bar(surf, rect_, size, color); +      break; +    case 3: +      rect_ = new_rect(rect->x + (size / 5) / 2, rect->y + size, 0, 0); +      draw_horizontal_bar(surf, rect_, size, color); +      break; +    case 4: +      rect_ = new_rect(rect->x, rect->y + size + (size / 5) / 2, 0, 0); +      draw_vertical_bar(surf, rect_, size, color); +      break; +    case 5: +      rect_ = new_rect(rect->x + size, rect->y + size + (size / 5) / 2, 0, 0); +      draw_vertical_bar(surf, rect_, size, color); +      break; +    case 6: +      rect_ = new_rect(rect->x + (size / 5) / 2, rect->y + size * 2, 0, 0); +      draw_horizontal_bar(surf, rect_, size, color); +      break; +    case 7: +      rect_ = new_rect(rect->x + (size / 5), rect->y + (size / 5), 0, 0); +      draw_diag_right_bar(surf, rect_, size, color); +      break; +    case 8: +      rect_ = new_rect(rect->x + (size / 5) + size, rect->y + (size / 5), 0, 0); +      draw_diag_left_bar(surf, rect_, size, color); +      break; +    case 9: +      rect_ = new_rect(rect->x + (size / 5), rect->y + (size / 5) + size, 0, 0); +      draw_diag_right_bar(surf, rect_, size, color); +      break; +    case 10: +      rect_ = new_rect(rect->x + (size / 5), rect->y + (size / 5) + size, 0, 0); +      draw_diag_left_bar(surf, rect_, size, color); +      break; +    case 11: +      rect_ = new_rect(rect->x + (size / 2), rect->y + (size / 5) / 2, 0, 0); +      draw_vertical_bar(surf, rect_, size, color); +      break; +    case 12: +      rect_ = new_rect(rect->x + (size / 2), rect->y + (size / 5) / 2 + size, 0, 0); +      draw_vertical_bar(surf, rect_, size, color); +      break; +    case 13: +      rect_ = new_rect(rect->x + (size / 5) / 2, rect->y + size, 0, 0); +      draw_semi_horizontal_bar(surf, rect_, size, color); +      break; +    case 14: +      rect_ = new_rect(rect->x + (size / 5) / 2 + size / 2, rect->y + size, 0, 0); +      draw_semi_horizontal_bar(surf, rect_, size, color); +      break; +    case 15: +      rect_ = new_rect(rect->x + (size / 5), rect->y + (size / 5), 0, 0); +      draw_backslash_bar(surf, rect_, size, color); +      break; +    case 16: +      rect_ = new_rect(rect->x + (size / 5) + size / 2, rect->y + (size / 5), 0, 0); +      draw_slash_bar(surf, rect_, size, color); +      break; +    case 17: +      rect_ = new_rect(rect->x + (size / 5), rect->y + (size / 5) + size, 0, 0); +      draw_slash_bar(surf, rect_, size, color); +      break; +    case 18: +      rect_ = new_rect(rect->x + (size / 5) + size / 2, rect->y + (size / 5) + size, 0, 0); +      draw_backslash_bar(surf, rect_, size, color); +      break; +    case 19: +      rect_ = new_rect(rect->x + (size / 5), rect->y + (size / 5) + size, 0, 0); +      draw_backslash_bar(surf, rect_, size, color); +      break; +    case 20: +      rect_ = new_rect(rect->x + (size / 5) + size / 2, rect->y + (size / 5) + size, 0, 0); +      draw_slash_bar(surf, rect_, size, color); +      break; +    default: +      return; +      break; +  } +  free(rect_); +} diff --git a/src/digit.c b/src/digit.c new file mode 100644 index 0000000..e2f675c --- /dev/null +++ b/src/digit.c @@ -0,0 +1,362 @@ +/* +** digit.c for  in /home/gayot_o/prog/lib/sdl-digit +**  +** Made by olivier gayot +** Login   <gayot_o@epitech.net> +**  +** Started on  Mon Apr 23 08:16:00 2012 olivier gayot +** Last update Mon Apr 23 08:16:00 2012 olivier gayot +*/ + +#include	<strings.h> +#include	"sdl_digit.h" + +#include	"draw.h" + +int		draw_digit(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color, char d) { +  void		(*f_ptr[256])(SDL_Surface *, SDL_Rect *, int, Uint32); + +  memset((void *)f_ptr, 0, sizeof(f_ptr)); +  f_ptr[(int)'0'] = &draw_0; +  f_ptr[(int)'1'] = &draw_1; +  f_ptr[(int)'2'] = &draw_2; +  f_ptr[(int)'3'] = &draw_3; +  f_ptr[(int)'4'] = &draw_4; +  f_ptr[(int)'5'] = &draw_5; +  f_ptr[(int)'6'] = &draw_6; +  f_ptr[(int)'7'] = &draw_7; +  f_ptr[(int)'8'] = &draw_8; +  f_ptr[(int)'9'] = &draw_9; +  f_ptr[(int)'-'] = &draw_hyphen; +  f_ptr[(int)' '] = &draw_space; +  f_ptr[(int)'a'] = &draw_A; +  f_ptr[(int)'A'] = &draw_A; +  f_ptr[(int)'b'] = &draw_B; +  f_ptr[(int)'B'] = &draw_B; +  f_ptr[(int)'c'] = &draw_C; +  f_ptr[(int)'C'] = &draw_C; +  f_ptr[(int)'d'] = &draw_D; +  f_ptr[(int)'D'] = &draw_D; +  f_ptr[(int)'e'] = &draw_E; +  f_ptr[(int)'E'] = &draw_E; +  f_ptr[(int)'f'] = &draw_F; +  f_ptr[(int)'F'] = &draw_F; +  f_ptr[(int)'g'] = &draw_G; +  f_ptr[(int)'G'] = &draw_G; +  f_ptr[(int)'h'] = &draw_H; +  f_ptr[(int)'H'] = &draw_H; +  f_ptr[(int)'i'] = &draw_I; +  f_ptr[(int)'I'] = &draw_I; +  f_ptr[(int)'j'] = &draw_J; +  f_ptr[(int)'J'] = &draw_J; +  f_ptr[(int)'K'] = &draw_K; +  f_ptr[(int)'k'] = &draw_K; +  f_ptr[(int)'l'] = &draw_L; +  f_ptr[(int)'L'] = &draw_L; +  f_ptr[(int)'m'] = &draw_M; +  f_ptr[(int)'M'] = &draw_M; +  f_ptr[(int)'n'] = &draw_N; +  f_ptr[(int)'N'] = &draw_N; +  f_ptr[(int)'o'] = &draw_O; +  f_ptr[(int)'O'] = &draw_O; +  f_ptr[(int)'p'] = &draw_P; +  f_ptr[(int)'P'] = &draw_P; +  f_ptr[(int)'q'] = &draw_Q; +  f_ptr[(int)'Q'] = &draw_Q; +  f_ptr[(int)'r'] = &draw_R; +  f_ptr[(int)'R'] = &draw_R; +  f_ptr[(int)'s'] = &draw_S; +  f_ptr[(int)'S'] = &draw_S; +  f_ptr[(int)'t'] = &draw_T; +  f_ptr[(int)'T'] = &draw_T; +  f_ptr[(int)'u'] = &draw_U; +  f_ptr[(int)'U'] = &draw_U; +  f_ptr[(int)'V'] = &draw_V; +  f_ptr[(int)'v'] = &draw_V; +  f_ptr[(int)'w'] = &draw_W; +  f_ptr[(int)'W'] = &draw_W; +  f_ptr[(int)'x'] = &draw_X; +  f_ptr[(int)'X'] = &draw_X; +  f_ptr[(int)'y'] = &draw_Y; +  f_ptr[(int)'Y'] = &draw_Y; +  f_ptr[(int)'z'] = &draw_Z; +  f_ptr[(int)'Z'] = &draw_Z; +  if (!f_ptr[(int)d]) +    return 0; +  f_ptr[(int)d](surf, rect, size, color); +  return 1; +} + +static void	draw_0(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 6); +} +static void	draw_1(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 5); +} +static void	draw_2(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 6); +} +static void	draw_3(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 6); +} +static void	draw_4(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 5); +} +static void	draw_5(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 6); +} +static void	draw_6(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 6); +} +static void	draw_7(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 5); +} +static void	draw_8(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 6); +} +static void	draw_9(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 6); +} + +static void	draw_hyphen(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 3); +} +static void	draw_space(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  (void)surf; +  (void)rect; +  (void)size; +  (void)color; +} + +static void	draw_A(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 5); +} + +static void	draw_B(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 6); +  draw_bar_id(surf, rect, size, color, 11); +  draw_bar_id(surf, rect, size, color, 12); +  draw_bar_id(surf, rect, size, color, 14); +} + +static void	draw_C(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 6); +} + +static void	draw_D(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 6); +  draw_bar_id(surf, rect, size, color, 11); +  draw_bar_id(surf, rect, size, color, 12); +} + +static void	draw_E(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 6); +} + +static void	draw_F(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 4); +} + +static void	draw_G(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 6); +  draw_bar_id(surf, rect, size, color, 14); +} + +static void	draw_H(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 5); +} + +static void	draw_I(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 11); +  draw_bar_id(surf, rect, size, color, 12); +} + +static void	draw_J(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 6); +} + +static void	draw_K(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 7); +  draw_bar_id(surf, rect, size, color, 10); +} + +static void	draw_L(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 6); +} + +static void	draw_M(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 15); +  draw_bar_id(surf, rect, size, color, 16); +} + +static void	draw_N(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 15); +  draw_bar_id(surf, rect, size, color, 18); +} + +static void	draw_O(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_0(surf, rect, size, color); +} + +static void	draw_P(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 4); +} + +static void	draw_Q(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 6); +  draw_bar_id(surf, rect, size, color, 18); +} + +static void	draw_R(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 18); +} + +static void	draw_S(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_5(surf, rect, size, color); +} + +static void	draw_T(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 11); +  draw_bar_id(surf, rect, size, color, 12); +} + +static void	draw_U(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 6); +} +static void	draw_V(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 19); +  draw_bar_id(surf, rect, size, color, 20); +} + +static void	draw_W(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 4); +  draw_bar_id(surf, rect, size, color, 5); +  draw_bar_id(surf, rect, size, color, 6); +  draw_bar_id(surf, rect, size, color, 12); +} + +static void	draw_X(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 15); +  draw_bar_id(surf, rect, size, color, 16); +  draw_bar_id(surf, rect, size, color, 17); +  draw_bar_id(surf, rect, size, color, 18); +} + +static void	draw_Y(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 1); +  draw_bar_id(surf, rect, size, color, 2); +  draw_bar_id(surf, rect, size, color, 3); +  draw_bar_id(surf, rect, size, color, 12); +} + +static void	draw_Z(SDL_Surface *surf, SDL_Rect *rect, int size, Uint32 color) { +  draw_bar_id(surf, rect, size, color, 0); +  draw_bar_id(surf, rect, size, color, 16); +  draw_bar_id(surf, rect, size, color, 17); +  draw_bar_id(surf, rect, size, color, 6); +} diff --git a/src/line.c b/src/line.c new file mode 100644 index 0000000..6f0f749 --- /dev/null +++ b/src/line.c @@ -0,0 +1,56 @@ +/* +** line.c for  in /home/gayot_o/prog/lib/sdl-digit +**  +** Made by olivier gayot +** Login   <gayot_o@epitech.net> +**  +** Started on  Mon Apr 23 08:07:45 2012 olivier gayot +** Last update Mon Apr 23 08:07:45 2012 olivier gayot +*/ + +#include	"sdl_digit.h" + +static void	perform_draw_line(SDL_Surface *, SDL_Rect, SDL_Rect, t_vect, Uint32); + +void		draw_line(SDL_Surface *surf, SDL_Rect r1, SDL_Rect r2, Uint32 color) { +  t_vect	vect; +  SDL_Rect	begin, end; + +  if (ABS(r2.x - r1.x) > ABS(r2.y - r1.y)) { +    if (r1.x < r2.x) { +      begin = r1; +      end = r2; +    } +    else { +      begin = r2; +      end = r1; +    } +    vect.x = 1; +    vect.y = (float)(end.y - begin.y) / (float)(end.x - begin.x); +  } +  else { +    if (r1.y < r2.y) { +      begin = r1; +      end = r2; +    } +    else { +      begin = r2; +      end = r1; +    } +    vect.y = 1; +    vect.x = (float)(end.x - begin.x) / (float)(end.y - begin.y); +  } +  perform_draw_line(surf, begin, end, vect, color); +} + +static void	perform_draw_line(SDL_Surface *surf, SDL_Rect begin, +    SDL_Rect end, t_vect vect, Uint32 color) { +  float		x = (float)begin.x; +  float		y = (float)begin.y; + +  while (x != (float)end.x || y != (float)end.y) { +    set_pixel_color(surf, (int)x, (int)y, color); +    x += vect.x; +    y += vect.y; +  } +} diff --git a/src/pixel.c b/src/pixel.c new file mode 100644 index 0000000..abe756e --- /dev/null +++ b/src/pixel.c @@ -0,0 +1,69 @@ +/* +** pixel.c for  in /home/gayot_o/prog/lib/sdl-digit +**  +** Made by olivier gayot +** Login   <gayot_o@epitech.net> +**  +** Started on  Mon Apr 23 08:13:46 2012 olivier gayot +** Last update Mon Apr 23 08:13:46 2012 olivier gayot +*/ + +#include	"sdl_digit.h" + +void		set_pixel_color(SDL_Surface *surf, +    int x, int y, Uint32 color) { +  char		*address = surf->pixels; +  union_	cast_; + +  if (x >= surf->w || y >= surf->h || x < 0 || y < 0) +    return; +  address += surf->pitch * y; +  address += x * surf->format->BytesPerPixel; +  switch (surf->format->BitsPerPixel) { +    case 32: +      cast_.int_ = (Uint32 *)address; +      *cast_.int_ = color; +      break; +    case 24: +      cast_.int_ = (Uint32 *)address; +      *cast_.int_ = color; +      break; +    case 16: +      cast_.short_ = (Uint16 *)address; +      *cast_.short_ = color; +      break; +    case 8: +      cast_.char_ = (Uint8 *)address; +      *cast_.char_ = color; +      break; +    default: +      return; +      break; +  } +} + +Uint32		get_pixel_color(SDL_Surface *surf, int x, int y) { +  char		*address = surf->pixels; + +  if (x >= surf->w || y >= surf->h || x < 0 || y < 0) +    return 0; +  address += surf->pitch * y; +  address += x * surf->format->BytesPerPixel; +  switch (surf->format->BitsPerPixel) { +    case 32: +      return ((Uint32)*((Uint32 *)address)); +      break; +    case 24: +      return ((Uint32)*((Uint32 *)address)); +      break; +    case 16: +      return ((Uint32)*((Uint16 *)address)); +      break; +    case 8: +      return ((Uint32)*((Uint8 *)address)); +      break; +    default: +      return ((Uint32)0); +      break; +  } +} diff --git a/src/rect.c b/src/rect.c new file mode 100644 index 0000000..19ed87f --- /dev/null +++ b/src/rect.c @@ -0,0 +1,31 @@ +/* +** rect.c for  in /home/gayot_o/prog/lib/sdl-digit +**  +** Made by olivier gayot +** Login   <gayot_o@epitech.net> +**  +** Started on  Mon Apr 23 08:12:40 2012 olivier gayot +** Last update Mon Apr 23 08:12:40 2012 olivier gayot +*/ + +#include	"sdl_digit.h" + +SDL_Rect	get_rect(int x, int y, unsigned int w, unsigned int h) { +  SDL_Rect	rect; + +  rect.x = x; +  rect.y = y; +  rect.w = w; +  rect.h = h; +  return rect; +} + +SDL_Rect	*new_rect(int x, int y, unsigned int w, unsigned int h) { +  SDL_Rect	*rect = (SDL_Rect *)malloc(sizeof(SDL_Rect)); + +  rect->x = x; +  rect->y = y; +  rect->w = w; +  rect->h = h; +  return rect; +}  diff --git a/src/string.c b/src/string.c new file mode 100644 index 0000000..ce93e88 --- /dev/null +++ b/src/string.c @@ -0,0 +1,37 @@ +/* +** string.c for  in /home/gayot_o/prog/lib/sdl-digit +**  +** Made by olivier gayot +** Login   <gayot_o@epitech.net> +**  +** Started on  Mon Apr 23 11:08:25 2012 olivier gayot +** Last update Mon Apr 23 11:08:25 2012 olivier gayot +*/ + +#include	<string.h> +#include	"sdl_digit.h" + +void		draw_string(SDL_Surface *surf, SDL_Rect *rect, const char *str, Uint32 color, int size) { +  SDL_Rect	rect_; + +  rect_.x = (rect) ? rect->x : 0; +  rect_.y = (rect) ? rect->y : 0; +  while (*str) { +    if (draw_digit(surf, &rect_, size, color, *str)) +      rect_.x += size * 150. / 100.; +    ++str; +  } +} + +SDL_Surface	*new_string(const char *str, Uint32 color, int size) +{ +  SDL_Surface	*surf; +  int		w; +  int		h; + +  w = (size * 150. / 100.) * strlen(str);; +  h = (size * 2) + (size / 5); +  surf = SDL_CreateRGBSurface(SDL_HWSURFACE, w, h, 32, 0, 0, 0, 0); +  draw_string(surf, NULL, str, color, size); +  return (surf); +}  | 
