Brushes are now saved in gfx2.cfg. Fix a severe bug in gfx2.cfg format: in Settings screen, the button 'Reload' was readign the file incorrectly, which caused (for example) the keyboard shortcut to 'Scroll Up' to disappear.
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1481 416bcca6-2ee7-4201-b75f-2eb2f807beb1
| 
		 Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB  | 
| 
		 Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 14 KiB  | 
| 
		 Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 17 KiB  | 
| 
		 Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 13 KiB  | 
| 
		 Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 16 KiB  | 
@ -2726,9 +2726,9 @@ void Button_Unselect_fill(void)
 | 
			
		||||
/// Checks if the current brush is identical to a preset one.
 | 
			
		||||
byte Same_paintbrush(byte index)
 | 
			
		||||
{
 | 
			
		||||
  if (Paintbrush_shape!=Gfx->Paintbrush_type[index] ||
 | 
			
		||||
      Paintbrush_width!=Gfx->Preset_paintbrush_width[index] ||
 | 
			
		||||
      Paintbrush_height!=Gfx->Preset_paintbrush_height[index])
 | 
			
		||||
  if (Paintbrush_shape!=Paintbrush[index].Shape ||
 | 
			
		||||
      Paintbrush_width!=Paintbrush[index].Width ||
 | 
			
		||||
      Paintbrush_height!=Paintbrush[index].Height)
 | 
			
		||||
  return 0;
 | 
			
		||||
  
 | 
			
		||||
  if (Paintbrush_shape==PAINTBRUSH_SHAPE_MISC)
 | 
			
		||||
@ -2737,7 +2737,7 @@ byte Same_paintbrush(byte index)
 | 
			
		||||
    int x,y;
 | 
			
		||||
    for(y=0;y<Paintbrush_height;y++)
 | 
			
		||||
      for(x=0;x<Paintbrush_width;x++)
 | 
			
		||||
        if(Paintbrush_sprite[(y*MAX_PAINTBRUSH_SIZE)+x]!=Gfx->Paintbrush_sprite[index][y][x])
 | 
			
		||||
        if(Paintbrush_sprite[(y*MAX_PAINTBRUSH_SIZE)+x]!=Paintbrush[index].Sprite[y][x])
 | 
			
		||||
          return 0;
 | 
			
		||||
  }
 | 
			
		||||
  return 1;
 | 
			
		||||
@ -5028,15 +5028,15 @@ void Store_brush(int index)
 | 
			
		||||
void Select_paintbrush(int index)
 | 
			
		||||
{
 | 
			
		||||
  int x_pos,y_pos;
 | 
			
		||||
  Paintbrush_shape=Gfx->Paintbrush_type[index];
 | 
			
		||||
  Paintbrush_width=Gfx->Preset_paintbrush_width[index];
 | 
			
		||||
  Paintbrush_height=Gfx->Preset_paintbrush_height[index];
 | 
			
		||||
  Paintbrush_offset_X=Gfx->Preset_paintbrush_offset_X[index];
 | 
			
		||||
  Paintbrush_offset_Y=Gfx->Preset_paintbrush_offset_Y[index];
 | 
			
		||||
  Paintbrush_shape=Paintbrush[index].Shape;
 | 
			
		||||
  Paintbrush_width=Paintbrush[index].Width;
 | 
			
		||||
  Paintbrush_height=Paintbrush[index].Height;
 | 
			
		||||
  Paintbrush_offset_X=Paintbrush[index].Offset_X;
 | 
			
		||||
  Paintbrush_offset_Y=Paintbrush[index].Offset_Y;
 | 
			
		||||
  for (y_pos=0; y_pos<Paintbrush_height; y_pos++)
 | 
			
		||||
    for (x_pos=0; x_pos<Paintbrush_width; x_pos++)
 | 
			
		||||
      Paintbrush_sprite[(y_pos*MAX_PAINTBRUSH_SIZE)+x_pos]=Gfx->Paintbrush_sprite[index][y_pos][x_pos];
 | 
			
		||||
  Change_paintbrush_shape(Gfx->Paintbrush_type[index]);
 | 
			
		||||
      Paintbrush_sprite[(y_pos*MAX_PAINTBRUSH_SIZE)+x_pos]=Paintbrush[index].Sprite[y_pos][x_pos];
 | 
			
		||||
  Change_paintbrush_shape(Paintbrush[index].Shape);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Store the current brush in paintbrush slot, if possible.
 | 
			
		||||
@ -5047,15 +5047,15 @@ byte Store_paintbrush(int index)
 | 
			
		||||
  {
 | 
			
		||||
    int x_pos,y_pos;
 | 
			
		||||
    
 | 
			
		||||
    Gfx->Paintbrush_type[index]=Paintbrush_shape;
 | 
			
		||||
    Gfx->Preset_paintbrush_width[index]=Paintbrush_width;
 | 
			
		||||
    Gfx->Preset_paintbrush_height[index]=Paintbrush_height;
 | 
			
		||||
    Gfx->Preset_paintbrush_offset_X[index]=Paintbrush_offset_X;
 | 
			
		||||
    Gfx->Preset_paintbrush_offset_Y[index]=Paintbrush_offset_Y;
 | 
			
		||||
    Paintbrush[index].Shape=Paintbrush_shape;
 | 
			
		||||
    Paintbrush[index].Width=Paintbrush_width;
 | 
			
		||||
    Paintbrush[index].Height=Paintbrush_height;
 | 
			
		||||
    Paintbrush[index].Offset_X=Paintbrush_offset_X;
 | 
			
		||||
    Paintbrush[index].Offset_Y=Paintbrush_offset_Y;
 | 
			
		||||
    
 | 
			
		||||
    for (y_pos=0; y_pos<Paintbrush_height; y_pos++)
 | 
			
		||||
      for (x_pos=0; x_pos<Paintbrush_width; x_pos++)
 | 
			
		||||
        Gfx->Paintbrush_sprite[index][y_pos][x_pos]=Paintbrush_sprite[(y_pos*MAX_PAINTBRUSH_SIZE)+x_pos];
 | 
			
		||||
        Paintbrush[index].Sprite[y_pos][x_pos]=Paintbrush_sprite[(y_pos*MAX_PAINTBRUSH_SIZE)+x_pos];
 | 
			
		||||
    
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
@ -5068,15 +5068,15 @@ byte Store_paintbrush(int index)
 | 
			
		||||
    // Color brush transformed into a real mono paintbrush
 | 
			
		||||
    int x_pos,y_pos;
 | 
			
		||||
    
 | 
			
		||||
    Gfx->Paintbrush_type[index]=PAINTBRUSH_SHAPE_MISC;
 | 
			
		||||
    Gfx->Preset_paintbrush_width[index]=Brush_width;
 | 
			
		||||
    Gfx->Preset_paintbrush_height[index]=Brush_height;
 | 
			
		||||
    Gfx->Preset_paintbrush_offset_X[index]=Brush_offset_X;
 | 
			
		||||
    Gfx->Preset_paintbrush_offset_Y[index]=Brush_offset_Y;
 | 
			
		||||
    Paintbrush[index].Shape=PAINTBRUSH_SHAPE_MISC;
 | 
			
		||||
    Paintbrush[index].Width=Brush_width;
 | 
			
		||||
    Paintbrush[index].Height=Brush_height;
 | 
			
		||||
    Paintbrush[index].Offset_X=Brush_offset_X;
 | 
			
		||||
    Paintbrush[index].Offset_Y=Brush_offset_Y;
 | 
			
		||||
    
 | 
			
		||||
    for (y_pos=0; y_pos<Brush_height; y_pos++)
 | 
			
		||||
      for (x_pos=0; x_pos<Brush_width; x_pos++)
 | 
			
		||||
        Gfx->Paintbrush_sprite[index][y_pos][x_pos]=Brush[(y_pos*Brush_width)+x_pos]!=Back_color;
 | 
			
		||||
        Paintbrush[index].Sprite[y_pos][x_pos]=Brush[(y_pos*Brush_width)+x_pos]!=Back_color;
 | 
			
		||||
        
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -243,7 +243,8 @@ enum CHUNKS_CFG
 | 
			
		||||
  CHUNK_SMOOTH          = 6, ///< Smooth effect settings
 | 
			
		||||
  CHUNK_EXCLUDE_COLORS  = 7, ///< List of excluded colors
 | 
			
		||||
  CHUNK_QUICK_SHADE     = 8, ///< QShade effect settings
 | 
			
		||||
  CHUNK_GRID            = 9,
 | 
			
		||||
  CHUNK_GRID            = 9, ///< Grid settings
 | 
			
		||||
  CHUNK_BRUSH           =10, ///< Paintbrushes
 | 
			
		||||
  CHUNK_MAX
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -823,6 +823,9 @@ GFX2_GLOBAL byte * Menu_font;
 | 
			
		||||
/// Pointer to the current active skin.
 | 
			
		||||
GFX2_GLOBAL T_Gui_skin * Gfx;
 | 
			
		||||
 | 
			
		||||
/// Pointer to the current active skin.
 | 
			
		||||
GFX2_GLOBAL T_Paintbrush Paintbrush[NB_PAINTBRUSH_SPRITES];
 | 
			
		||||
 | 
			
		||||
// -- Help data
 | 
			
		||||
 | 
			
		||||
/// Index of the ::Help_section shown by the Help screen.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										420
									
								
								src/init.c
									
									
									
									
									
								
							
							
						
						@ -250,7 +250,6 @@ void Center_GUI_cursor(T_Gui_skin *gfx, byte *cursor_buffer, int cursor_number)
 | 
			
		||||
 | 
			
		||||
byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
 | 
			
		||||
{
 | 
			
		||||
  int  index;
 | 
			
		||||
  int i,j;
 | 
			
		||||
  int cursor_x=0,cursor_y=0;
 | 
			
		||||
  byte color;
 | 
			
		||||
@ -459,6 +458,7 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
 | 
			
		||||
  cursor_y+=MENU_SPRITE_HEIGHT;
 | 
			
		||||
  
 | 
			
		||||
  // Paintbrushes
 | 
			
		||||
  /*
 | 
			
		||||
  for (i=0; i<NB_PAINTBRUSH_SPRITES; i++)
 | 
			
		||||
  {
 | 
			
		||||
    // Each line holds 12
 | 
			
		||||
@ -474,11 +474,12 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
 | 
			
		||||
      if (GUI_seek_right(gui, &cursor_x, cursor_y, neutral_color, "brush icon"))
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
    if (Read_GUI_block(gfx, gui, cursor_x, cursor_y, gfx->Paintbrush_sprite[i], PAINTBRUSH_WIDTH, PAINTBRUSH_HEIGHT, "brush icon",2))
 | 
			
		||||
    if (Read_GUI_block(gfx, gui, cursor_x, cursor_y, Paintbrush[i].Sprite, PAINTBRUSH_WIDTH, PAINTBRUSH_HEIGHT, "brush icon",2))
 | 
			
		||||
      return 1;
 | 
			
		||||
    cursor_x+=PAINTBRUSH_WIDTH;
 | 
			
		||||
  }
 | 
			
		||||
  cursor_y+=PAINTBRUSH_HEIGHT;
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
  // Drive sprites
 | 
			
		||||
  for (i=0; i<NB_ICON_SPRITES; i++)
 | 
			
		||||
@ -605,203 +606,6 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
 | 
			
		||||
  }
 | 
			
		||||
  cursor_y+=8;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [ 0]= 1;
 | 
			
		||||
  gfx->Preset_paintbrush_height[ 0]= 1;
 | 
			
		||||
  gfx->Paintbrush_type         [ 0]=PAINTBRUSH_SHAPE_SQUARE;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [ 1]= 2;
 | 
			
		||||
  gfx->Preset_paintbrush_height[ 1]= 2;
 | 
			
		||||
  gfx->Paintbrush_type         [ 1]=PAINTBRUSH_SHAPE_SQUARE;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [ 2]= 3;
 | 
			
		||||
  gfx->Preset_paintbrush_height[ 2]= 3;
 | 
			
		||||
  gfx->Paintbrush_type         [ 2]=PAINTBRUSH_SHAPE_SQUARE;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [ 3]= 4;
 | 
			
		||||
  gfx->Preset_paintbrush_height[ 3]= 4;
 | 
			
		||||
  gfx->Paintbrush_type         [ 3]=PAINTBRUSH_SHAPE_SQUARE;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [ 4]= 5;
 | 
			
		||||
  gfx->Preset_paintbrush_height[ 4]= 5;
 | 
			
		||||
  gfx->Paintbrush_type         [ 4]=PAINTBRUSH_SHAPE_SQUARE;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [ 5]= 7;
 | 
			
		||||
  gfx->Preset_paintbrush_height[ 5]= 7;
 | 
			
		||||
  gfx->Paintbrush_type         [ 5]=PAINTBRUSH_SHAPE_SQUARE;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [ 6]= 8;
 | 
			
		||||
  gfx->Preset_paintbrush_height[ 6]= 8;
 | 
			
		||||
  gfx->Paintbrush_type         [ 6]=PAINTBRUSH_SHAPE_SQUARE;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [ 7]=12;
 | 
			
		||||
  gfx->Preset_paintbrush_height[ 7]=12;
 | 
			
		||||
  gfx->Paintbrush_type         [ 7]=PAINTBRUSH_SHAPE_SQUARE;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [ 8]=16;
 | 
			
		||||
  gfx->Preset_paintbrush_height[ 8]=16;
 | 
			
		||||
  gfx->Paintbrush_type         [ 8]=PAINTBRUSH_SHAPE_SQUARE;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [ 9]=16;
 | 
			
		||||
  gfx->Preset_paintbrush_height[ 9]=16;
 | 
			
		||||
  gfx->Paintbrush_type         [ 9]=PAINTBRUSH_SHAPE_SIEVE_SQUARE;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [10]=15;
 | 
			
		||||
  gfx->Preset_paintbrush_height[10]=15;
 | 
			
		||||
  gfx->Paintbrush_type         [10]=PAINTBRUSH_SHAPE_DIAMOND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [11]= 5;
 | 
			
		||||
  gfx->Preset_paintbrush_height[11]= 5;
 | 
			
		||||
  gfx->Paintbrush_type         [11]=PAINTBRUSH_SHAPE_DIAMOND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [12]= 3;
 | 
			
		||||
  gfx->Preset_paintbrush_height[12]= 3;
 | 
			
		||||
  gfx->Paintbrush_type         [12]=PAINTBRUSH_SHAPE_ROUND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [13]= 4;
 | 
			
		||||
  gfx->Preset_paintbrush_height[13]= 4;
 | 
			
		||||
  gfx->Paintbrush_type         [13]=PAINTBRUSH_SHAPE_ROUND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [14]= 5;
 | 
			
		||||
  gfx->Preset_paintbrush_height[14]= 5;
 | 
			
		||||
  gfx->Paintbrush_type         [14]=PAINTBRUSH_SHAPE_ROUND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [15]= 6;
 | 
			
		||||
  gfx->Preset_paintbrush_height[15]= 6;
 | 
			
		||||
  gfx->Paintbrush_type         [15]=PAINTBRUSH_SHAPE_ROUND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [16]= 8;
 | 
			
		||||
  gfx->Preset_paintbrush_height[16]= 8;
 | 
			
		||||
  gfx->Paintbrush_type         [16]=PAINTBRUSH_SHAPE_ROUND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [17]=10;
 | 
			
		||||
  gfx->Preset_paintbrush_height[17]=10;
 | 
			
		||||
  gfx->Paintbrush_type         [17]=PAINTBRUSH_SHAPE_ROUND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [18]=12;
 | 
			
		||||
  gfx->Preset_paintbrush_height[18]=12;
 | 
			
		||||
  gfx->Paintbrush_type         [18]=PAINTBRUSH_SHAPE_ROUND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [19]=14;
 | 
			
		||||
  gfx->Preset_paintbrush_height[19]=14;
 | 
			
		||||
  gfx->Paintbrush_type         [19]=PAINTBRUSH_SHAPE_ROUND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [20]=16;
 | 
			
		||||
  gfx->Preset_paintbrush_height[20]=16;
 | 
			
		||||
  gfx->Paintbrush_type         [20]=PAINTBRUSH_SHAPE_ROUND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [21]=15;
 | 
			
		||||
  gfx->Preset_paintbrush_height[21]=15;
 | 
			
		||||
  gfx->Paintbrush_type         [21]=PAINTBRUSH_SHAPE_SIEVE_ROUND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [22]=11;
 | 
			
		||||
  gfx->Preset_paintbrush_height[22]=11;
 | 
			
		||||
  gfx->Paintbrush_type         [22]=PAINTBRUSH_SHAPE_SIEVE_ROUND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [23]= 5;
 | 
			
		||||
  gfx->Preset_paintbrush_height[23]= 5;
 | 
			
		||||
  gfx->Paintbrush_type         [23]=PAINTBRUSH_SHAPE_SIEVE_ROUND;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [24]= 2;
 | 
			
		||||
  gfx->Preset_paintbrush_height[24]= 1;
 | 
			
		||||
  gfx->Paintbrush_type         [24]=PAINTBRUSH_SHAPE_HORIZONTAL_BAR;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [25]= 3;
 | 
			
		||||
  gfx->Preset_paintbrush_height[25]= 1;
 | 
			
		||||
  gfx->Paintbrush_type         [25]=PAINTBRUSH_SHAPE_HORIZONTAL_BAR;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [26]= 4;
 | 
			
		||||
  gfx->Preset_paintbrush_height[26]= 1;
 | 
			
		||||
  gfx->Paintbrush_type         [26]=PAINTBRUSH_SHAPE_HORIZONTAL_BAR;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [27]= 8;
 | 
			
		||||
  gfx->Preset_paintbrush_height[27]= 1;
 | 
			
		||||
  gfx->Paintbrush_type         [27]=PAINTBRUSH_SHAPE_HORIZONTAL_BAR;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [28]= 1;
 | 
			
		||||
  gfx->Preset_paintbrush_height[28]= 2;
 | 
			
		||||
  gfx->Paintbrush_type         [28]=PAINTBRUSH_SHAPE_VERTICAL_BAR;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [29]= 1;
 | 
			
		||||
  gfx->Preset_paintbrush_height[29]= 3;
 | 
			
		||||
  gfx->Paintbrush_type         [29]=PAINTBRUSH_SHAPE_VERTICAL_BAR;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [30]= 1;
 | 
			
		||||
  gfx->Preset_paintbrush_height[30]= 4;
 | 
			
		||||
  gfx->Paintbrush_type         [30]=PAINTBRUSH_SHAPE_VERTICAL_BAR;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [31]= 1;
 | 
			
		||||
  gfx->Preset_paintbrush_height[31]= 8;
 | 
			
		||||
  gfx->Paintbrush_type         [31]=PAINTBRUSH_SHAPE_VERTICAL_BAR;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [32]= 3;
 | 
			
		||||
  gfx->Preset_paintbrush_height[32]= 3;
 | 
			
		||||
  gfx->Paintbrush_type         [32]=PAINTBRUSH_SHAPE_CROSS;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [33]= 5;
 | 
			
		||||
  gfx->Preset_paintbrush_height[33]= 5;
 | 
			
		||||
  gfx->Paintbrush_type         [33]=PAINTBRUSH_SHAPE_CROSS;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [34]= 5;
 | 
			
		||||
  gfx->Preset_paintbrush_height[34]= 5;
 | 
			
		||||
  gfx->Paintbrush_type         [34]=PAINTBRUSH_SHAPE_PLUS;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [35]=15;
 | 
			
		||||
  gfx->Preset_paintbrush_height[35]=15;
 | 
			
		||||
  gfx->Paintbrush_type         [35]=PAINTBRUSH_SHAPE_PLUS;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [36]= 2;
 | 
			
		||||
  gfx->Preset_paintbrush_height[36]= 2;
 | 
			
		||||
  gfx->Paintbrush_type         [36]=PAINTBRUSH_SHAPE_SLASH;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [37]= 4;
 | 
			
		||||
  gfx->Preset_paintbrush_height[37]= 4;
 | 
			
		||||
  gfx->Paintbrush_type         [37]=PAINTBRUSH_SHAPE_SLASH;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [38]= 8;
 | 
			
		||||
  gfx->Preset_paintbrush_height[38]= 8;
 | 
			
		||||
  gfx->Paintbrush_type         [38]=PAINTBRUSH_SHAPE_SLASH;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [39]= 2;
 | 
			
		||||
  gfx->Preset_paintbrush_height[39]= 2;
 | 
			
		||||
  gfx->Paintbrush_type         [39]=PAINTBRUSH_SHAPE_ANTISLASH;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [40]= 4;
 | 
			
		||||
  gfx->Preset_paintbrush_height[40]= 4;
 | 
			
		||||
  gfx->Paintbrush_type         [40]=PAINTBRUSH_SHAPE_ANTISLASH;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [41]= 8;
 | 
			
		||||
  gfx->Preset_paintbrush_height[41]= 8;
 | 
			
		||||
  gfx->Paintbrush_type         [41]=PAINTBRUSH_SHAPE_ANTISLASH;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [42]= 4;
 | 
			
		||||
  gfx->Preset_paintbrush_height[42]= 4;
 | 
			
		||||
  gfx->Paintbrush_type         [42]=PAINTBRUSH_SHAPE_RANDOM;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [43]= 8;
 | 
			
		||||
  gfx->Preset_paintbrush_height[43]= 8;
 | 
			
		||||
  gfx->Paintbrush_type         [43]=PAINTBRUSH_SHAPE_RANDOM;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [44]=13;
 | 
			
		||||
  gfx->Preset_paintbrush_height[44]=13;
 | 
			
		||||
  gfx->Paintbrush_type         [44]=PAINTBRUSH_SHAPE_RANDOM;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [45]= 3;
 | 
			
		||||
  gfx->Preset_paintbrush_height[45]= 3;
 | 
			
		||||
  gfx->Paintbrush_type         [45]=PAINTBRUSH_SHAPE_MISC;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [46]= 3;
 | 
			
		||||
  gfx->Preset_paintbrush_height[46]= 3;
 | 
			
		||||
  gfx->Paintbrush_type         [46]=PAINTBRUSH_SHAPE_MISC;
 | 
			
		||||
 | 
			
		||||
  gfx->Preset_paintbrush_width [47]= 7;
 | 
			
		||||
  gfx->Preset_paintbrush_height[47]= 7;
 | 
			
		||||
  gfx->Paintbrush_type         [47]=PAINTBRUSH_SHAPE_MISC;
 | 
			
		||||
 | 
			
		||||
  for (index=0;index<NB_PAINTBRUSH_SPRITES;index++)
 | 
			
		||||
  {
 | 
			
		||||
    gfx->Preset_paintbrush_offset_X[index]=(gfx->Preset_paintbrush_width [index]>>1);
 | 
			
		||||
    gfx->Preset_paintbrush_offset_Y[index]=(gfx->Preset_paintbrush_height[index]>>1);
 | 
			
		||||
  }
 | 
			
		||||
  return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -2240,6 +2044,53 @@ int Load_CFG(int reload_all)
 | 
			
		||||
            goto Erreur_lecture_config;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
        
 | 
			
		||||
      case CHUNK_BRUSH:
 | 
			
		||||
        if (reload_all)
 | 
			
		||||
        {
 | 
			
		||||
          int index;
 | 
			
		||||
          for (index=0; index<NB_PAINTBRUSH_SPRITES; index++)
 | 
			
		||||
          {
 | 
			
		||||
            int i;
 | 
			
		||||
            byte current_byte=0;
 | 
			
		||||
            word width,height;
 | 
			
		||||
 | 
			
		||||
            if (!Read_byte(Handle, &Paintbrush[index].Shape))
 | 
			
		||||
              goto Erreur_lecture_config;
 | 
			
		||||
 | 
			
		||||
            if (!Read_word_le(Handle, &width))
 | 
			
		||||
              goto Erreur_lecture_config;
 | 
			
		||||
            if (!Read_word_le(Handle, &height))
 | 
			
		||||
              goto Erreur_lecture_config;
 | 
			
		||||
      
 | 
			
		||||
            Paintbrush[index].Width=width;
 | 
			
		||||
            Paintbrush[index].Height=height;
 | 
			
		||||
 | 
			
		||||
            if (!Read_word_le(Handle, &Paintbrush[index].Offset_X))
 | 
			
		||||
              goto Erreur_lecture_config;
 | 
			
		||||
            if (!Read_word_le(Handle, &Paintbrush[index].Offset_Y))
 | 
			
		||||
              goto Erreur_lecture_config;
 | 
			
		||||
            
 | 
			
		||||
            // Decode binary
 | 
			
		||||
            for (i=0;i<width*height;i++)
 | 
			
		||||
            {
 | 
			
		||||
              if ((i&7) == 0)
 | 
			
		||||
              {
 | 
			
		||||
                // Read one byte
 | 
			
		||||
                if (!Read_byte(Handle, ¤t_byte))
 | 
			
		||||
                  goto Erreur_lecture_config;
 | 
			
		||||
              }
 | 
			
		||||
              Paintbrush[index].Sprite[i/width][i%width] =
 | 
			
		||||
                ((current_byte & (0x80 >> (i&7))) != 0);              
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
          if (fseek(Handle,Chunk.Size,SEEK_CUR)==-1)
 | 
			
		||||
            goto Erreur_lecture_config;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      default: // Chunk inconnu
 | 
			
		||||
        goto Erreur_lecture_config;
 | 
			
		||||
    }
 | 
			
		||||
@ -2292,7 +2143,7 @@ int Save_CFG(void)
 | 
			
		||||
 | 
			
		||||
  // Enregistrement des touches
 | 
			
		||||
  Chunk.Number=CHUNK_KEYS;
 | 
			
		||||
  Chunk.Size=NB_SHORTCUTS*sizeof(cfg_shortcut_info);
 | 
			
		||||
  Chunk.Size=NB_SHORTCUTS*6;
 | 
			
		||||
 | 
			
		||||
  if (!Write_byte(Handle, Chunk.Number) ||
 | 
			
		||||
      !Write_word_le(Handle, Chunk.Size) )
 | 
			
		||||
@ -2334,7 +2185,7 @@ int Save_CFG(void)
 | 
			
		||||
 | 
			
		||||
  // Sauvegarde de l'état de chaque mode vidéo
 | 
			
		||||
  Chunk.Number=CHUNK_VIDEO_MODES;
 | 
			
		||||
  Chunk.Size=modes_to_save * sizeof(cfg_video_mode);
 | 
			
		||||
  Chunk.Size=modes_to_save * 5;
 | 
			
		||||
 | 
			
		||||
  if (!Write_byte(Handle, Chunk.Number) ||
 | 
			
		||||
      !Write_word_le(Handle, Chunk.Size) )
 | 
			
		||||
@ -2359,7 +2210,7 @@ int Save_CFG(void)
 | 
			
		||||
 | 
			
		||||
  // Ecriture des données du Shade (précédées du shade en cours)
 | 
			
		||||
  Chunk.Number=CHUNK_SHADE;
 | 
			
		||||
  Chunk.Size=sizeof(Shade_list)+sizeof(Shade_current);
 | 
			
		||||
  Chunk.Size=8209;
 | 
			
		||||
  if (!Write_byte(Handle, Chunk.Number) ||
 | 
			
		||||
      !Write_word_le(Handle, Chunk.Size) )
 | 
			
		||||
    goto Erreur_sauvegarde_config;
 | 
			
		||||
@ -2379,7 +2230,7 @@ int Save_CFG(void)
 | 
			
		||||
 | 
			
		||||
  // Sauvegarde des informations du Masque
 | 
			
		||||
  Chunk.Number=CHUNK_MASK;
 | 
			
		||||
  Chunk.Size=sizeof(Mask_table);
 | 
			
		||||
  Chunk.Size=256;
 | 
			
		||||
  if (!Write_byte(Handle, Chunk.Number) ||
 | 
			
		||||
      !Write_word_le(Handle, Chunk.Size) )
 | 
			
		||||
    goto Erreur_sauvegarde_config;
 | 
			
		||||
@ -2388,7 +2239,7 @@ int Save_CFG(void)
 | 
			
		||||
 | 
			
		||||
  // Sauvegarde des informations du Stencil
 | 
			
		||||
  Chunk.Number=CHUNK_STENCIL;
 | 
			
		||||
  Chunk.Size=sizeof(Stencil);
 | 
			
		||||
  Chunk.Size=256;
 | 
			
		||||
  if (!Write_byte(Handle, Chunk.Number) ||
 | 
			
		||||
      !Write_word_le(Handle, Chunk.Size) )
 | 
			
		||||
    goto Erreur_sauvegarde_config;
 | 
			
		||||
@ -2397,7 +2248,7 @@ int Save_CFG(void)
 | 
			
		||||
 | 
			
		||||
  // Sauvegarde des informations des dégradés
 | 
			
		||||
  Chunk.Number=CHUNK_GRADIENTS;
 | 
			
		||||
  Chunk.Size=sizeof(Gradient_array)+1;
 | 
			
		||||
  Chunk.Size=241;
 | 
			
		||||
  if (!Write_byte(Handle, Chunk.Number) ||
 | 
			
		||||
      !Write_word_le(Handle, Chunk.Size) )
 | 
			
		||||
    goto Erreur_sauvegarde_config;
 | 
			
		||||
@ -2415,7 +2266,7 @@ int Save_CFG(void)
 | 
			
		||||
 | 
			
		||||
  // Sauvegarde de la matrice du Smooth
 | 
			
		||||
  Chunk.Number=CHUNK_SMOOTH;
 | 
			
		||||
  Chunk.Size=sizeof(Smooth_matrix);
 | 
			
		||||
  Chunk.Size=9;
 | 
			
		||||
  if (!Write_byte(Handle, Chunk.Number) ||
 | 
			
		||||
      !Write_word_le(Handle, Chunk.Size) )
 | 
			
		||||
    goto Erreur_sauvegarde_config;
 | 
			
		||||
@ -2426,7 +2277,7 @@ int Save_CFG(void)
 | 
			
		||||
 | 
			
		||||
  // Sauvegarde des couleurs à exclure
 | 
			
		||||
  Chunk.Number=CHUNK_EXCLUDE_COLORS;
 | 
			
		||||
  Chunk.Size=sizeof(Exclude_color);
 | 
			
		||||
  Chunk.Size=256;
 | 
			
		||||
  if (!Write_byte(Handle, Chunk.Number) ||
 | 
			
		||||
      !Write_word_le(Handle, Chunk.Size) )
 | 
			
		||||
    goto Erreur_sauvegarde_config;
 | 
			
		||||
@ -2435,7 +2286,7 @@ int Save_CFG(void)
 | 
			
		||||
 | 
			
		||||
  // Sauvegarde des informations du Quick-shade
 | 
			
		||||
  Chunk.Number=CHUNK_QUICK_SHADE;
 | 
			
		||||
  Chunk.Size=sizeof(Quick_shade_step)+sizeof(Quick_shade_loop);
 | 
			
		||||
  Chunk.Size=2;
 | 
			
		||||
  if (!Write_byte(Handle, Chunk.Number) ||
 | 
			
		||||
      !Write_word_le(Handle, Chunk.Size) )
 | 
			
		||||
    goto Erreur_sauvegarde_config;
 | 
			
		||||
@ -2459,6 +2310,69 @@ int Save_CFG(void)
 | 
			
		||||
  if (!Write_word_le(Handle, Snap_offset_Y))
 | 
			
		||||
    goto Erreur_sauvegarde_config;
 | 
			
		||||
 | 
			
		||||
  // Save brush data
 | 
			
		||||
  {
 | 
			
		||||
    long total_size=0;
 | 
			
		||||
    int index;
 | 
			
		||||
    // Compute size: normal paintbrushes
 | 
			
		||||
    for (index=0; index<NB_PAINTBRUSH_SPRITES; index++)
 | 
			
		||||
    {
 | 
			
		||||
      total_size+=9+(Paintbrush[index].Width*Paintbrush[index].Height+7)/8;
 | 
			
		||||
    }
 | 
			
		||||
    /*
 | 
			
		||||
    // Compute size: brush container
 | 
			
		||||
    for (index=0; index<BRUSH_CONTAINER_COLUMNS*BRUSH_CONTAINER_ROWS; index++)
 | 
			
		||||
    {
 | 
			
		||||
      
 | 
			
		||||
    }
 | 
			
		||||
    */
 | 
			
		||||
    Chunk.Number=CHUNK_BRUSH;
 | 
			
		||||
    Chunk.Size=total_size;
 | 
			
		||||
    if (!Write_byte(Handle, Chunk.Number) ||
 | 
			
		||||
        !Write_word_le(Handle, Chunk.Size) )
 | 
			
		||||
      goto Erreur_sauvegarde_config;
 | 
			
		||||
    for (index=0; index<NB_PAINTBRUSH_SPRITES; index++)
 | 
			
		||||
    {
 | 
			
		||||
      int i;
 | 
			
		||||
      byte current_byte=0;
 | 
			
		||||
      word width,height;
 | 
			
		||||
 | 
			
		||||
      width=Paintbrush[index].Width;
 | 
			
		||||
      height=Paintbrush[index].Height;
 | 
			
		||||
      
 | 
			
		||||
      
 | 
			
		||||
      if (!Write_byte(Handle, Paintbrush[index].Shape))
 | 
			
		||||
        goto Erreur_sauvegarde_config;
 | 
			
		||||
      if (!Write_word_le(Handle, width))
 | 
			
		||||
        goto Erreur_sauvegarde_config;
 | 
			
		||||
      if (!Write_word_le(Handle, height))
 | 
			
		||||
        goto Erreur_sauvegarde_config;
 | 
			
		||||
      if (!Write_word_le(Handle, Paintbrush[index].Offset_X))
 | 
			
		||||
        goto Erreur_sauvegarde_config;
 | 
			
		||||
      if (!Write_word_le(Handle, Paintbrush[index].Offset_Y))
 | 
			
		||||
        goto Erreur_sauvegarde_config;
 | 
			
		||||
      // Encode in binary
 | 
			
		||||
      for (i=0;i<width*height;i++)
 | 
			
		||||
      {
 | 
			
		||||
        if (Paintbrush[index].Sprite[i/width][i%width])
 | 
			
		||||
          current_byte |= 0x80 >> (i&7);
 | 
			
		||||
        if ((i&7) == 7)
 | 
			
		||||
        {
 | 
			
		||||
          // Write one byte
 | 
			
		||||
          if (!Write_byte(Handle, current_byte))
 | 
			
		||||
            goto Erreur_sauvegarde_config;
 | 
			
		||||
          current_byte=0;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      // Remainder
 | 
			
		||||
      if ((i&7) != 0)
 | 
			
		||||
      {
 | 
			
		||||
        // Write one byte
 | 
			
		||||
        if (!Write_byte(Handle, current_byte))
 | 
			
		||||
          goto Erreur_sauvegarde_config;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  if (fclose(Handle))
 | 
			
		||||
    return ERROR_SAVING_CFG;
 | 
			
		||||
@ -2686,3 +2600,93 @@ void Compute_menu_offsets(void)
 | 
			
		||||
  Menu_Y = Screen_height - Menu_height * Menu_factor_Y;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Init_paintbrush(int index, int width, int height, byte shape, const char * bitmap)
 | 
			
		||||
{
 | 
			
		||||
  if (bitmap!=NULL)
 | 
			
		||||
  {
 | 
			
		||||
    int i;
 | 
			
		||||
    
 | 
			
		||||
    Paintbrush[index].Shape=shape;
 | 
			
		||||
    Paintbrush[index].Width=width;
 | 
			
		||||
    Paintbrush[index].Height=height;
 | 
			
		||||
    Paintbrush[index].Offset_X=width>>1;
 | 
			
		||||
    Paintbrush[index].Offset_Y=height>>1;
 | 
			
		||||
  
 | 
			
		||||
    // Decode pixels
 | 
			
		||||
    for (i=0;i<width*height;i++)
 | 
			
		||||
    {
 | 
			
		||||
      Paintbrush[index].Sprite[i/width][i%width] =
 | 
			
		||||
        ((bitmap[i/8] & (0x80 >> (i&7))) != 0);              
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    Paintbrush_shape=shape;
 | 
			
		||||
    Set_paintbrush_size(width, height);
 | 
			
		||||
    Store_paintbrush(index);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Init_paintbrushes(void)
 | 
			
		||||
{
 | 
			
		||||
  int index;
 | 
			
		||||
 
 | 
			
		||||
  Init_paintbrush( 0, 1, 1,PAINTBRUSH_SHAPE_SQUARE, NULL);
 | 
			
		||||
  Init_paintbrush( 1, 2, 2,PAINTBRUSH_SHAPE_SQUARE, NULL);
 | 
			
		||||
  Init_paintbrush( 2, 3, 3,PAINTBRUSH_SHAPE_SQUARE, NULL);
 | 
			
		||||
  Init_paintbrush( 3, 4, 4,PAINTBRUSH_SHAPE_SQUARE, NULL);
 | 
			
		||||
  Init_paintbrush( 4, 5, 5,PAINTBRUSH_SHAPE_SQUARE, NULL);
 | 
			
		||||
  Init_paintbrush( 5, 7, 7,PAINTBRUSH_SHAPE_SQUARE, NULL);
 | 
			
		||||
  Init_paintbrush( 6, 8, 8,PAINTBRUSH_SHAPE_SQUARE, NULL);
 | 
			
		||||
  Init_paintbrush( 7,12,12,PAINTBRUSH_SHAPE_SQUARE, NULL);
 | 
			
		||||
  Init_paintbrush( 8,16,16,PAINTBRUSH_SHAPE_SQUARE, NULL);
 | 
			
		||||
  Init_paintbrush( 9,16,16,PAINTBRUSH_SHAPE_SIEVE_SQUARE, NULL);
 | 
			
		||||
  Init_paintbrush(10,15,15,PAINTBRUSH_SHAPE_DIAMOND, NULL);
 | 
			
		||||
  Init_paintbrush(11, 5, 5,PAINTBRUSH_SHAPE_DIAMOND, NULL);
 | 
			
		||||
  Init_paintbrush(12, 3, 3,PAINTBRUSH_SHAPE_ROUND, NULL);
 | 
			
		||||
  Init_paintbrush(13, 4, 4,PAINTBRUSH_SHAPE_ROUND, NULL);
 | 
			
		||||
  Init_paintbrush(14, 5, 5,PAINTBRUSH_SHAPE_ROUND, NULL);
 | 
			
		||||
  Init_paintbrush(15, 6, 6,PAINTBRUSH_SHAPE_ROUND, NULL);
 | 
			
		||||
  Init_paintbrush(16, 8, 8,PAINTBRUSH_SHAPE_ROUND, NULL);
 | 
			
		||||
  Init_paintbrush(17,10,10,PAINTBRUSH_SHAPE_ROUND, NULL);
 | 
			
		||||
  Init_paintbrush(18,12,12,PAINTBRUSH_SHAPE_ROUND, NULL);
 | 
			
		||||
  Init_paintbrush(19,14,14,PAINTBRUSH_SHAPE_ROUND, NULL);
 | 
			
		||||
  Init_paintbrush(20,16,16,PAINTBRUSH_SHAPE_ROUND, NULL);
 | 
			
		||||
  Init_paintbrush(21,15,15,PAINTBRUSH_SHAPE_SIEVE_ROUND, NULL);
 | 
			
		||||
  Init_paintbrush(22,11,11,PAINTBRUSH_SHAPE_SIEVE_ROUND, NULL);
 | 
			
		||||
  Init_paintbrush(23, 5, 5,PAINTBRUSH_SHAPE_SIEVE_ROUND, NULL);
 | 
			
		||||
  Init_paintbrush(24, 2, 1,PAINTBRUSH_SHAPE_HORIZONTAL_BAR, NULL);
 | 
			
		||||
  Init_paintbrush(25, 3, 1,PAINTBRUSH_SHAPE_HORIZONTAL_BAR, NULL);
 | 
			
		||||
  Init_paintbrush(26, 4, 1,PAINTBRUSH_SHAPE_HORIZONTAL_BAR, NULL);
 | 
			
		||||
  Init_paintbrush(27, 8, 1,PAINTBRUSH_SHAPE_HORIZONTAL_BAR, NULL);
 | 
			
		||||
  Init_paintbrush(28, 1, 2,PAINTBRUSH_SHAPE_VERTICAL_BAR, NULL);
 | 
			
		||||
  Init_paintbrush(29, 1, 3,PAINTBRUSH_SHAPE_VERTICAL_BAR, NULL);
 | 
			
		||||
  Init_paintbrush(30, 1, 4,PAINTBRUSH_SHAPE_VERTICAL_BAR, NULL);
 | 
			
		||||
  Init_paintbrush(31, 1, 8,PAINTBRUSH_SHAPE_VERTICAL_BAR, NULL);
 | 
			
		||||
  Init_paintbrush(32, 3, 3,PAINTBRUSH_SHAPE_CROSS, NULL);
 | 
			
		||||
  Init_paintbrush(33, 5, 5,PAINTBRUSH_SHAPE_CROSS, NULL);
 | 
			
		||||
  Init_paintbrush(34, 5, 5,PAINTBRUSH_SHAPE_PLUS, NULL);
 | 
			
		||||
  Init_paintbrush(35,15,15,PAINTBRUSH_SHAPE_PLUS, NULL);
 | 
			
		||||
  Init_paintbrush(36, 2, 2,PAINTBRUSH_SHAPE_SLASH, NULL);
 | 
			
		||||
  Init_paintbrush(37, 4, 4,PAINTBRUSH_SHAPE_SLASH, NULL);
 | 
			
		||||
  Init_paintbrush(38, 8, 8,PAINTBRUSH_SHAPE_SLASH, NULL);
 | 
			
		||||
  Init_paintbrush(39, 2, 2,PAINTBRUSH_SHAPE_ANTISLASH, NULL);
 | 
			
		||||
  Init_paintbrush(40, 4, 4,PAINTBRUSH_SHAPE_ANTISLASH, NULL);
 | 
			
		||||
  Init_paintbrush(41, 8, 8,PAINTBRUSH_SHAPE_ANTISLASH, NULL);
 | 
			
		||||
  
 | 
			
		||||
  Init_paintbrush(42, 4, 4,PAINTBRUSH_SHAPE_RANDOM, "\x20\x81");
 | 
			
		||||
  Init_paintbrush(43, 8, 8,PAINTBRUSH_SHAPE_RANDOM, "\x44\x00\x11\x00\x88\x01\x40\x08");
 | 
			
		||||
  Init_paintbrush(44,13,13,PAINTBRUSH_SHAPE_RANDOM, "\x08\x00\x08\x90\x00\x10\x42\x10\x02\x06\x02\x02\x04\x02\x08\x42\x10\x44\x00\x00\x44\x00");
 | 
			
		||||
  
 | 
			
		||||
  Init_paintbrush(45, 3, 3,PAINTBRUSH_SHAPE_MISC, "\x7f\x00");
 | 
			
		||||
  Init_paintbrush(46, 3, 3,PAINTBRUSH_SHAPE_MISC, "\xdd\x80");
 | 
			
		||||
  Init_paintbrush(47, 7, 7,PAINTBRUSH_SHAPE_MISC, "\x06\x30\x82\x04\x10\x20\x00");
 | 
			
		||||
 | 
			
		||||
  for (index=0;index<NB_PAINTBRUSH_SPRITES;index++)
 | 
			
		||||
  {
 | 
			
		||||
    Paintbrush[index].Offset_X=(Paintbrush[index].Width>>1);
 | 
			
		||||
    Paintbrush[index].Offset_Y=(Paintbrush[index].Height>>1);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -34,6 +34,7 @@ int  Save_CFG(void);
 | 
			
		||||
void Set_all_video_modes(void);
 | 
			
		||||
void Set_config_defaults(void);
 | 
			
		||||
void Init_sighandler(void);
 | 
			
		||||
void Init_paintbrushes(void);
 | 
			
		||||
 | 
			
		||||
extern char Gui_loading_error_message[512];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										18
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						@ -574,7 +574,6 @@ int Init_program(int argc,char * argv[])
 | 
			
		||||
  // Données sur le pinceau:
 | 
			
		||||
  Paintbrush_X=0;
 | 
			
		||||
  Paintbrush_Y=0;
 | 
			
		||||
  Paintbrush_shape=PAINTBRUSH_SHAPE_ROUND;
 | 
			
		||||
  Paintbrush_hidden=0;
 | 
			
		||||
 | 
			
		||||
  // On initialise tout ce qui concerne les opérations et les effets
 | 
			
		||||
@ -634,6 +633,18 @@ int Init_program(int argc,char * argv[])
 | 
			
		||||
 | 
			
		||||
  Windows_open=0;
 | 
			
		||||
  
 | 
			
		||||
  // Paintbrush
 | 
			
		||||
  if (!(Paintbrush_sprite=(byte *)malloc(MAX_PAINTBRUSH_SIZE*MAX_PAINTBRUSH_SIZE))) Error(ERROR_MEMORY);
 | 
			
		||||
  
 | 
			
		||||
  // Load preset paintbrushes (uses Paintbrush_ variables)
 | 
			
		||||
  Init_paintbrushes();
 | 
			
		||||
  
 | 
			
		||||
  // Set a valid paintbrush afterwards
 | 
			
		||||
  *Paintbrush_sprite=1;
 | 
			
		||||
  Paintbrush_width=1;
 | 
			
		||||
  Paintbrush_height=1;
 | 
			
		||||
  Paintbrush_shape=PAINTBRUSH_SHAPE_ROUND;
 | 
			
		||||
  
 | 
			
		||||
  // Charger la configuration des touches
 | 
			
		||||
  Set_config_defaults();
 | 
			
		||||
 | 
			
		||||
@ -701,11 +712,6 @@ int Init_program(int argc,char * argv[])
 | 
			
		||||
  if (!(Brush         =(byte *)malloc(   1*   1))) Error(ERROR_MEMORY);
 | 
			
		||||
  if (!(Smear_brush   =(byte *)malloc(MAX_PAINTBRUSH_SIZE*MAX_PAINTBRUSH_SIZE))) Error(ERROR_MEMORY);
 | 
			
		||||
 | 
			
		||||
  // Pinceau
 | 
			
		||||
  if (!(Paintbrush_sprite=(byte *)malloc(MAX_PAINTBRUSH_SIZE*MAX_PAINTBRUSH_SIZE))) Error(ERROR_MEMORY);
 | 
			
		||||
  *Paintbrush_sprite=1;
 | 
			
		||||
  Paintbrush_width=1;
 | 
			
		||||
  Paintbrush_height=1;
 | 
			
		||||
 | 
			
		||||
  starting_videomode=Current_resolution;
 | 
			
		||||
  Horizontal_line_buffer=NULL;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										33
									
								
								src/struct.h
									
									
									
									
									
								
							
							
						
						@ -400,21 +400,6 @@ typedef struct
 | 
			
		||||
  /// Graphic resources for the mouse cursor.
 | 
			
		||||
  byte Cursor_sprite[NB_CURSOR_SPRITES][CURSOR_SPRITE_HEIGHT][CURSOR_SPRITE_WIDTH];
 | 
			
		||||
 | 
			
		||||
  // Preset paintbrushes
 | 
			
		||||
  
 | 
			
		||||
  /// Graphic resources for the preset paintbrushes.
 | 
			
		||||
  byte  Paintbrush_sprite [NB_PAINTBRUSH_SPRITES][PAINTBRUSH_HEIGHT][PAINTBRUSH_WIDTH];
 | 
			
		||||
  /// Width of the preset paintbrushes.
 | 
			
		||||
  word  Preset_paintbrush_width[NB_PAINTBRUSH_SPRITES];
 | 
			
		||||
  /// Height of the preset paintbrushes.
 | 
			
		||||
  word  Preset_paintbrush_height[NB_PAINTBRUSH_SPRITES];
 | 
			
		||||
  /// Type of the preset paintbrush: index in enum PAINTBRUSH_SHAPES
 | 
			
		||||
  byte  Paintbrush_type[NB_PAINTBRUSH_SPRITES];
 | 
			
		||||
  /// Brush handle for the preset brushes. Generally ::Preset_paintbrush_width[]/2
 | 
			
		||||
  word  Preset_paintbrush_offset_X[NB_PAINTBRUSH_SPRITES];
 | 
			
		||||
  /// Brush handle for the preset brushes. Generally ::Preset_paintbrush_height[]/2
 | 
			
		||||
  word  Preset_paintbrush_offset_Y[NB_PAINTBRUSH_SPRITES];
 | 
			
		||||
 | 
			
		||||
  // Sieve patterns
 | 
			
		||||
  
 | 
			
		||||
  /// Preset sieve patterns, stored as binary (one word per line)
 | 
			
		||||
@ -465,6 +450,24 @@ typedef struct
 | 
			
		||||
 | 
			
		||||
} T_Gui_skin;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
  // Preset paintbrushes
 | 
			
		||||
  
 | 
			
		||||
  /// Graphic resources for the preset paintbrushes.
 | 
			
		||||
  byte  Sprite[PAINTBRUSH_HEIGHT][PAINTBRUSH_WIDTH];
 | 
			
		||||
  /// Width of the preset paintbrushes.
 | 
			
		||||
  word  Width;
 | 
			
		||||
  /// Height of the preset paintbrushes.
 | 
			
		||||
  word  Height;
 | 
			
		||||
  /// Type of the preset paintbrush: index in enum PAINTBRUSH_SHAPES
 | 
			
		||||
  byte  Shape;
 | 
			
		||||
  /// Brush handle for the preset brushes. Generally ::Width[]/2
 | 
			
		||||
  word  Offset_X;
 | 
			
		||||
  /// Brush handle for the preset brushes. Generally ::Height[]/2
 | 
			
		||||
  word  Offset_Y;
 | 
			
		||||
 | 
			
		||||
} T_Paintbrush;
 | 
			
		||||
 | 
			
		||||
// A menubar.
 | 
			
		||||
typedef struct {
 | 
			
		||||
  word Width;
 | 
			
		||||
 | 
			
		||||
@ -1286,19 +1286,19 @@ void Display_paintbrush_in_window(word x,word y,int number)
 | 
			
		||||
  if (y_size<1)
 | 
			
		||||
    y_size=1;
 | 
			
		||||
 | 
			
		||||
  origin_x = (x + 8)*Menu_factor_X - (Gfx->Preset_paintbrush_offset_X[number])*x_size+Window_pos_X;
 | 
			
		||||
  origin_y = (y + 8)*Menu_factor_Y - (Gfx->Preset_paintbrush_offset_Y[number])*y_size+Window_pos_Y;
 | 
			
		||||
  origin_x = (x + 8)*Menu_factor_X - (Paintbrush[number].Offset_X)*x_size+Window_pos_X;
 | 
			
		||||
  origin_y = (y + 8)*Menu_factor_Y - (Paintbrush[number].Offset_Y)*y_size+Window_pos_Y;
 | 
			
		||||
 | 
			
		||||
  for (window_y_pos=0,y_pos=0; y_pos<Gfx->Preset_paintbrush_height[number]; window_y_pos++,y_pos++)
 | 
			
		||||
    for (window_x_pos=0,x_pos=0; x_pos<Gfx->Preset_paintbrush_width[number]; window_x_pos++,x_pos++)
 | 
			
		||||
      if (Gfx->Paintbrush_sprite[number][y_pos][x_pos])
 | 
			
		||||
  for (window_y_pos=0,y_pos=0; y_pos<Paintbrush[number].Height; window_y_pos++,y_pos++)
 | 
			
		||||
    for (window_x_pos=0,x_pos=0; x_pos<Paintbrush[number].Width; window_x_pos++,x_pos++)
 | 
			
		||||
      if (Paintbrush[number].Sprite[y_pos][x_pos])
 | 
			
		||||
        Block(origin_x+window_x_pos*x_size,origin_y+window_y_pos*y_size,x_size,y_size,MC_Black);
 | 
			
		||||
  // On n'utilise pas Pixel_in_window() car on ne dessine pas
 | 
			
		||||
  // forcément avec la même taille de pixel.
 | 
			
		||||
 | 
			
		||||
  Update_rect( ToWinX(origin_x), ToWinY(origin_y),
 | 
			
		||||
        ToWinL(Gfx->Preset_paintbrush_width[number]),
 | 
			
		||||
        ToWinH(Gfx->Preset_paintbrush_height[number])
 | 
			
		||||
        ToWinL(Paintbrush[number].Width),
 | 
			
		||||
        ToWinH(Paintbrush[number].Height)
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||