aboutsummaryrefslogtreecommitdiffstats
path: root/minilibx_beta/mlx_string_put.c
blob: 435493cf5b03cbbb346b6e7b29c24fec7d977e05 (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
60
61
62
63
64
65
66
67
68
69
70
71
72

#include "mlx.h"

#include "font.c"

#define ATLAS_NB_CHAR 95

#define FONT_WIDTH	((font_atlas.width/(ATLAS_NB_CHAR))-2)


int mlx_put_image_to_window_scale(void *mlx_ptr, void *win_ptr, void *img_ptr, int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, unsigned int color);

void mlx_int_fill(unsigned char *data, int sl)
{
  int i, j;
  j = 0;
  while (j < font_atlas.height)
    {
      i = 0;
      while (i < font_atlas.width)
	{
	  data[j*sl+i*4] = font_atlas.pixel_data[j*font_atlas.width*font_atlas.bytes_per_pixel+i*4+2];
	  data[j*sl+i*4+1] = font_atlas.pixel_data[j*font_atlas.width*font_atlas.bytes_per_pixel+i*4+1];
	  data[j*sl+i*4+2] = font_atlas.pixel_data[j*font_atlas.width*font_atlas.bytes_per_pixel+i*4];
	  data[j*sl+i*4+3] = 0xFF - font_atlas.pixel_data[j*font_atlas.width*font_atlas.bytes_per_pixel+i*4+3];
	  i ++;
	}
      j ++;
    }
    
}

int mlx_string_put(void *mlx_ptr, void *win_ptr, int x, int y, int color, char *string)
{
  static void *font = (void *)0;
  static unsigned char *data = (void *)0;
  static int size_line = 0;
  int bpp;
  int endian;
  int pos;
  int val;
  int dest_w;
  int dest_h;

  if (font == (void *)0)
    {
      font = mlx_new_image(mlx_ptr, font_atlas.width, font_atlas.height);
      data = (unsigned char *)mlx_get_data_addr(font, &bpp, &size_line, &endian);
      mlx_int_fill(data, size_line);
    }

  color = (color&0xFFFFFF)|0xFF000000;

  //  dest_w = (FONT_WIDTH*5)/7;   /// ratio with X11 standard mlx_string_put
  //  dest_h = (font_atlas.height*5)/7;
  dest_w = FONT_WIDTH;
  dest_h = font_atlas.height;
  y = y - (dest_h*3)/4;

  pos = 0;
  while (*string)
    {
      if (*string >= 32 && *string <= 127)
	val = *string - 32;
      else
	val = 31;
      mlx_put_image_to_window_scale(mlx_ptr, win_ptr, font, val*(FONT_WIDTH+2), 0, FONT_WIDTH, font_atlas.height, x+pos*dest_w, y, dest_w, dest_h, color);
      pos ++;
      string ++;
    }
  return (0);
}