The gradients (Cycling or not) are now per-picture, so: The main and spare page have separate gradients; Loading a picture resets the gradients and loads the new image's (if any); Undo and Redo correctly navigate to the right gradients when you Undo/Redo Loading different color-cycling images.
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1600 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
		
							parent
							
								
									838dd63a0c
								
							
						
					
					
						commit
						962d23dbc4
					
				@ -2440,19 +2440,19 @@ void Draw_button_gradient_style(short x_pos,short y_pos,int technique)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void Load_gradient_data(int index)
 | 
					void Load_gradient_data(int index)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  if (Gradient_array[index].Start>Gradient_array[index].End)
 | 
					  if (Main_backups->Pages->Gradients->Range[index].Start>Main_backups->Pages->Gradients->Range[index].End)
 | 
				
			||||||
    Error(0);
 | 
					    Error(0);
 | 
				
			||||||
  Gradient_lower_bound =Gradient_array[index].Start;
 | 
					  Gradient_lower_bound =Main_backups->Pages->Gradients->Range[index].Start;
 | 
				
			||||||
  Gradient_upper_bound =Gradient_array[index].End;
 | 
					  Gradient_upper_bound =Main_backups->Pages->Gradients->Range[index].End;
 | 
				
			||||||
  Gradient_is_inverted          =Gradient_array[index].Inverse;
 | 
					  Gradient_is_inverted          =Main_backups->Pages->Gradients->Range[index].Inverse;
 | 
				
			||||||
  Gradient_random_factor=Gradient_array[index].Mix+1;
 | 
					  Gradient_random_factor=Main_backups->Pages->Gradients->Range[index].Mix+1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Gradient_bounds_range=(Gradient_lower_bound<Gradient_upper_bound)?
 | 
					  Gradient_bounds_range=(Gradient_lower_bound<Gradient_upper_bound)?
 | 
				
			||||||
                            Gradient_upper_bound-Gradient_lower_bound:
 | 
					                            Gradient_upper_bound-Gradient_lower_bound:
 | 
				
			||||||
                            Gradient_lower_bound-Gradient_upper_bound;
 | 
					                            Gradient_lower_bound-Gradient_upper_bound;
 | 
				
			||||||
  Gradient_bounds_range++;
 | 
					  Gradient_bounds_range++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  switch(Gradient_array[index].Technique)
 | 
					  switch(Main_backups->Pages->Gradients->Range[index].Technique)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    case 0 : // Degradé de base
 | 
					    case 0 : // Degradé de base
 | 
				
			||||||
      Gradient_function=Gradient_basic;
 | 
					      Gradient_function=Gradient_basic;
 | 
				
			||||||
@ -2492,7 +2492,7 @@ void Button_Gradients(void)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  short clicked_button;
 | 
					  short clicked_button;
 | 
				
			||||||
  char  str[3];
 | 
					  char  str[3];
 | 
				
			||||||
  T_Gradient_array backup_gradients[16];
 | 
					  T_Gradient_array backup_gradients;
 | 
				
			||||||
  int   old_current_gradient;
 | 
					  int   old_current_gradient;
 | 
				
			||||||
  T_Scroller_button * mix_scroller;
 | 
					  T_Scroller_button * mix_scroller;
 | 
				
			||||||
  T_Scroller_button * speed_scroller;
 | 
					  T_Scroller_button * speed_scroller;
 | 
				
			||||||
@ -2514,7 +2514,7 @@ void Button_Gradients(void)
 | 
				
			|||||||
  Gradient_pixel=Pixel;
 | 
					  Gradient_pixel=Pixel;
 | 
				
			||||||
  old_current_gradient=Current_gradient;
 | 
					  old_current_gradient=Current_gradient;
 | 
				
			||||||
  changed_gradient_index=0;
 | 
					  changed_gradient_index=0;
 | 
				
			||||||
  memcpy(backup_gradients,Gradient_array,sizeof(T_Gradient_array)*16);
 | 
					  memcpy(&backup_gradients,Main_backups->Pages->Gradients,sizeof(T_Gradient_array));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Open_window(235,146,"Gradation menu");
 | 
					  Open_window(235,146,"Gradation menu");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2523,19 +2523,19 @@ void Button_Gradients(void)
 | 
				
			|||||||
  gradient_scroller=Window_set_scroller_button(218,20,75,16,1,Current_gradient);  // 2
 | 
					  gradient_scroller=Window_set_scroller_button(218,20,75,16,1,Current_gradient);  // 2
 | 
				
			||||||
  // Slider for mix
 | 
					  // Slider for mix
 | 
				
			||||||
  mix_scroller = Window_set_scroller_button(31,20,84,256,1,
 | 
					  mix_scroller = Window_set_scroller_button(31,20,84,256,1,
 | 
				
			||||||
    Gradient_array[Current_gradient].Mix);                      // 3
 | 
					    Main_backups->Pages->Gradients->Range[Current_gradient].Mix);                      // 3
 | 
				
			||||||
  // Direction
 | 
					  // Direction
 | 
				
			||||||
  Window_set_normal_button(8,20,15,14,
 | 
					  Window_set_normal_button(8,20,15,14,
 | 
				
			||||||
    (Gradient_array[Current_gradient].Inverse)?"\033":"\032",0,1,SDLK_TAB); // 4
 | 
					    (Main_backups->Pages->Gradients->Range[Current_gradient].Inverse)?"\033":"\032",0,1,SDLK_TAB); // 4
 | 
				
			||||||
  // Technique
 | 
					  // Technique
 | 
				
			||||||
  Window_set_normal_button(8,90,15,14,"",0,1,SDLK_TAB|MOD_SHIFT); // 5
 | 
					  Window_set_normal_button(8,90,15,14,"",0,1,SDLK_TAB|MOD_SHIFT); // 5
 | 
				
			||||||
  Draw_button_gradient_style(8,90,Gradient_array[Current_gradient].Technique);
 | 
					  Draw_button_gradient_style(8,90,Main_backups->Pages->Gradients->Range[Current_gradient].Technique);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Window_set_normal_button(178,128,51,14,"OK",0,1,SDLK_RETURN);     // 6
 | 
					  Window_set_normal_button(178,128,51,14,"OK",0,1,SDLK_RETURN);     // 6
 | 
				
			||||||
  Window_set_normal_button(123,128,51,14,"Cancel",0,1,KEY_ESC);  // 7
 | 
					  Window_set_normal_button(123,128,51,14,"Cancel",0,1,KEY_ESC);  // 7
 | 
				
			||||||
  // Scrolling speed
 | 
					  // Scrolling speed
 | 
				
			||||||
  speed_scroller = Window_set_horizontal_scroller_button(76,111,88,65,1,Gradient_array[Current_gradient].Speed);  // 8
 | 
					  speed_scroller = Window_set_horizontal_scroller_button(76,111,88,65,1,Main_backups->Pages->Gradients->Range[Current_gradient].Speed);  // 8
 | 
				
			||||||
  Num2str(Gradient_array[Current_gradient].Speed,str,2);
 | 
					  Num2str(Main_backups->Pages->Gradients->Range[Current_gradient].Speed,str,2);
 | 
				
			||||||
  Print_in_window(169,113,str,MC_Black,MC_Light);
 | 
					  Print_in_window(169,113,str,MC_Black,MC_Light);
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
  Print_in_window(5,58,"MIX",MC_Dark,MC_Light);
 | 
					  Print_in_window(5,58,"MIX",MC_Dark,MC_Light);
 | 
				
			||||||
@ -2545,7 +2545,7 @@ void Button_Gradients(void)
 | 
				
			|||||||
  Print_in_window(11,112,"Cycling",cycling_mode?MC_Black:MC_Dark,MC_Light);
 | 
					  Print_in_window(11,112,"Cycling",cycling_mode?MC_Black:MC_Dark,MC_Light);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  // On tagge les couleurs qui vont avec
 | 
					  // On tagge les couleurs qui vont avec
 | 
				
			||||||
  Tag_color_range(Gradient_array[Current_gradient].Start,Gradient_array[Current_gradient].End);
 | 
					  Tag_color_range(Main_backups->Pages->Gradients->Range[Current_gradient].Start,Main_backups->Pages->Gradients->Range[Current_gradient].End);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Num2str(Current_gradient+1,str,2);
 | 
					  Num2str(Current_gradient+1,str,2);
 | 
				
			||||||
  Print_in_window(215,100,str,MC_Black,MC_Light);
 | 
					  Print_in_window(215,100,str,MC_Black,MC_Light);
 | 
				
			||||||
@ -2555,7 +2555,7 @@ void Button_Gradients(void)
 | 
				
			|||||||
  // On affiche la preview
 | 
					  // On affiche la preview
 | 
				
			||||||
  Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
					  Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  first_color=last_color=(Gradient_array[Current_gradient].Inverse)?Gradient_array[Current_gradient].End:Gradient_array[Current_gradient].Start;
 | 
					  first_color=last_color=(Main_backups->Pages->Gradients->Range[Current_gradient].Inverse)?Main_backups->Pages->Gradients->Range[Current_gradient].End:Main_backups->Pages->Gradients->Range[Current_gradient].Start;
 | 
				
			||||||
  Update_window_area(0,0,Window_width, Window_height);
 | 
					  Update_window_area(0,0,Window_width, Window_height);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Display_cursor();
 | 
					  Display_cursor();
 | 
				
			||||||
@ -2577,19 +2577,19 @@ void Button_Gradients(void)
 | 
				
			|||||||
      Print_in_window(215,100,str,MC_Black,MC_Light);
 | 
					      Print_in_window(215,100,str,MC_Black,MC_Light);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // On tagge les couleurs qui vont avec
 | 
					      // On tagge les couleurs qui vont avec
 | 
				
			||||||
      Tag_color_range(Gradient_array[Current_gradient].Start,Gradient_array[Current_gradient].End);
 | 
					      Tag_color_range(Main_backups->Pages->Gradients->Range[Current_gradient].Start,Main_backups->Pages->Gradients->Range[Current_gradient].End);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // On affiche le sens qui va avec
 | 
					      // On affiche le sens qui va avec
 | 
				
			||||||
      Print_in_window(12,23,(Gradient_array[Current_gradient].Inverse)?"\033":"\032",MC_Black,MC_Light);
 | 
					      Print_in_window(12,23,(Main_backups->Pages->Gradients->Range[Current_gradient].Inverse)?"\033":"\032",MC_Black,MC_Light);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // On raffiche le mélange (jauge) qui va avec
 | 
					      // On raffiche le mélange (jauge) qui va avec
 | 
				
			||||||
      mix_scroller->Position=Gradient_array[Current_gradient].Mix;
 | 
					      mix_scroller->Position=Main_backups->Pages->Gradients->Range[Current_gradient].Mix;
 | 
				
			||||||
      Window_draw_slider(mix_scroller);
 | 
					      Window_draw_slider(mix_scroller);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Update speed
 | 
					      // Update speed
 | 
				
			||||||
      speed_scroller->Position=Gradient_array[Current_gradient].Speed;
 | 
					      speed_scroller->Position=Main_backups->Pages->Gradients->Range[Current_gradient].Speed;
 | 
				
			||||||
      Window_draw_slider(speed_scroller);
 | 
					      Window_draw_slider(speed_scroller);
 | 
				
			||||||
      Num2str(Gradient_array[Current_gradient].Speed,str,2);
 | 
					      Num2str(Main_backups->Pages->Gradients->Range[Current_gradient].Speed,str,2);
 | 
				
			||||||
      Print_in_window(169,113,str,MC_Black,MC_Light);
 | 
					      Print_in_window(169,113,str,MC_Black,MC_Light);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Gradient #
 | 
					      // Gradient #
 | 
				
			||||||
@ -2597,7 +2597,7 @@ void Button_Gradients(void)
 | 
				
			|||||||
      Window_draw_slider(gradient_scroller);
 | 
					      Window_draw_slider(gradient_scroller);
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      // Technique (flat, dithered, very dithered)
 | 
					      // Technique (flat, dithered, very dithered)
 | 
				
			||||||
      Draw_button_gradient_style(8,90,Gradient_array[Current_gradient].Technique);
 | 
					      Draw_button_gradient_style(8,90,Main_backups->Pages->Gradients->Range[Current_gradient].Technique);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // Rectangular gradient preview
 | 
					      // Rectangular gradient preview
 | 
				
			||||||
      Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
					      Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
				
			||||||
@ -2623,9 +2623,9 @@ void Button_Gradients(void)
 | 
				
			|||||||
            // On vient de clicker
 | 
					            // On vient de clicker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // On met à jour l'intervalle du dégradé
 | 
					            // On met à jour l'intervalle du dégradé
 | 
				
			||||||
            first_color=last_color=Gradient_array[Current_gradient].Start=Gradient_array[Current_gradient].End=temp_color;
 | 
					            first_color=last_color=Main_backups->Pages->Gradients->Range[Current_gradient].Start=Main_backups->Pages->Gradients->Range[Current_gradient].End=temp_color;
 | 
				
			||||||
            // On tagge le bloc
 | 
					            // On tagge le bloc
 | 
				
			||||||
            Tag_color_range(Gradient_array[Current_gradient].Start,Gradient_array[Current_gradient].End);
 | 
					            Tag_color_range(Main_backups->Pages->Gradients->Range[Current_gradient].Start,Main_backups->Pages->Gradients->Range[Current_gradient].End);
 | 
				
			||||||
            // Tracé de la preview:
 | 
					            // Tracé de la preview:
 | 
				
			||||||
            Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
					            Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
@ -2637,18 +2637,18 @@ void Button_Gradients(void)
 | 
				
			|||||||
              // On commence par ordonner la 1ère et dernière couleur du bloc
 | 
					              // On commence par ordonner la 1ère et dernière couleur du bloc
 | 
				
			||||||
              if (first_color<temp_color)
 | 
					              if (first_color<temp_color)
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                Gradient_array[Current_gradient].Start=first_color;
 | 
					                Main_backups->Pages->Gradients->Range[Current_gradient].Start=first_color;
 | 
				
			||||||
                Gradient_array[Current_gradient].End  =temp_color;
 | 
					                Main_backups->Pages->Gradients->Range[Current_gradient].End  =temp_color;
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
              else if (first_color>temp_color)
 | 
					              else if (first_color>temp_color)
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                Gradient_array[Current_gradient].Start=temp_color;
 | 
					                Main_backups->Pages->Gradients->Range[Current_gradient].Start=temp_color;
 | 
				
			||||||
                Gradient_array[Current_gradient].End  =first_color;
 | 
					                Main_backups->Pages->Gradients->Range[Current_gradient].End  =first_color;
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
              else
 | 
					              else
 | 
				
			||||||
                Gradient_array[Current_gradient].Start=Gradient_array[Current_gradient].End=first_color;
 | 
					                Main_backups->Pages->Gradients->Range[Current_gradient].Start=Main_backups->Pages->Gradients->Range[Current_gradient].End=first_color;
 | 
				
			||||||
              // On tagge le bloc
 | 
					              // On tagge le bloc
 | 
				
			||||||
              Tag_color_range(Gradient_array[Current_gradient].Start,Gradient_array[Current_gradient].End);
 | 
					              Tag_color_range(Main_backups->Pages->Gradients->Range[Current_gradient].Start,Main_backups->Pages->Gradients->Range[Current_gradient].End);
 | 
				
			||||||
              // Tracé de la preview:
 | 
					              // Tracé de la preview:
 | 
				
			||||||
              Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
					              Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
				
			||||||
              last_color=temp_color;
 | 
					              last_color=temp_color;
 | 
				
			||||||
@ -2665,7 +2665,7 @@ void Button_Gradients(void)
 | 
				
			|||||||
      case  3 : // Nouveau mélange de dégradé
 | 
					      case  3 : // Nouveau mélange de dégradé
 | 
				
			||||||
        Hide_cursor();
 | 
					        Hide_cursor();
 | 
				
			||||||
        // Nouvel mélange dans Window_attribute2
 | 
					        // Nouvel mélange dans Window_attribute2
 | 
				
			||||||
        Gradient_array[Current_gradient].Mix=Window_attribute2;
 | 
					        Main_backups->Pages->Gradients->Range[Current_gradient].Mix=Window_attribute2;
 | 
				
			||||||
        // On affiche la nouvelle preview
 | 
					        // On affiche la nouvelle preview
 | 
				
			||||||
        Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
					        Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
				
			||||||
        Display_cursor();
 | 
					        Display_cursor();
 | 
				
			||||||
@ -2673,8 +2673,8 @@ void Button_Gradients(void)
 | 
				
			|||||||
      case  4 : // Changement de sens
 | 
					      case  4 : // Changement de sens
 | 
				
			||||||
        Hide_cursor();
 | 
					        Hide_cursor();
 | 
				
			||||||
        // On inverse le sens (par un XOR de 1)
 | 
					        // On inverse le sens (par un XOR de 1)
 | 
				
			||||||
        Gradient_array[Current_gradient].Inverse^=1;
 | 
					        Main_backups->Pages->Gradients->Range[Current_gradient].Inverse^=1;
 | 
				
			||||||
        Print_in_window(12,25,(Gradient_array[Current_gradient].Inverse)?"\033":"\032",MC_Black,MC_Light);
 | 
					        Print_in_window(12,25,(Main_backups->Pages->Gradients->Range[Current_gradient].Inverse)?"\033":"\032",MC_Black,MC_Light);
 | 
				
			||||||
        // On affiche la nouvelle preview
 | 
					        // On affiche la nouvelle preview
 | 
				
			||||||
        Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
					        Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
				
			||||||
        Display_cursor();
 | 
					        Display_cursor();
 | 
				
			||||||
@ -2682,14 +2682,14 @@ void Button_Gradients(void)
 | 
				
			|||||||
      case  5 : // Changement de technique
 | 
					      case  5 : // Changement de technique
 | 
				
			||||||
        Hide_cursor();
 | 
					        Hide_cursor();
 | 
				
			||||||
        // On change la technique par (+1)%3
 | 
					        // On change la technique par (+1)%3
 | 
				
			||||||
        Gradient_array[Current_gradient].Technique=(Gradient_array[Current_gradient].Technique+1)%3;
 | 
					        Main_backups->Pages->Gradients->Range[Current_gradient].Technique=(Main_backups->Pages->Gradients->Range[Current_gradient].Technique+1)%3;
 | 
				
			||||||
        Draw_button_gradient_style(8,90,Gradient_array[Current_gradient].Technique);
 | 
					        Draw_button_gradient_style(8,90,Main_backups->Pages->Gradients->Range[Current_gradient].Technique);
 | 
				
			||||||
        // On affiche la nouvelle preview
 | 
					        // On affiche la nouvelle preview
 | 
				
			||||||
        Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
					        Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
				
			||||||
        Display_cursor();
 | 
					        Display_cursor();
 | 
				
			||||||
      case  8 : // Speed
 | 
					      case  8 : // Speed
 | 
				
			||||||
        Gradient_array[Current_gradient].Speed=Window_attribute2;
 | 
					        Main_backups->Pages->Gradients->Range[Current_gradient].Speed=Window_attribute2;
 | 
				
			||||||
        Num2str(Gradient_array[Current_gradient].Speed,str,2);
 | 
					        Num2str(Main_backups->Pages->Gradients->Range[Current_gradient].Speed,str,2);
 | 
				
			||||||
        Hide_cursor();
 | 
					        Hide_cursor();
 | 
				
			||||||
        Print_in_window(169,113,str,MC_Black,MC_Light);
 | 
					        Print_in_window(169,113,str,MC_Black,MC_Light);
 | 
				
			||||||
        Display_cursor();
 | 
					        Display_cursor();
 | 
				
			||||||
@ -2715,9 +2715,9 @@ void Button_Gradients(void)
 | 
				
			|||||||
          temp_color=color;
 | 
					          temp_color=color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          // On met à jour l'intervalle du dégradé
 | 
					          // On met à jour l'intervalle du dégradé
 | 
				
			||||||
          first_color=last_color=Gradient_array[Current_gradient].Start=Gradient_array[Current_gradient].End=temp_color;
 | 
					          first_color=last_color=Main_backups->Pages->Gradients->Range[Current_gradient].Start=Main_backups->Pages->Gradients->Range[Current_gradient].End=temp_color;
 | 
				
			||||||
          // On tagge le bloc
 | 
					          // On tagge le bloc
 | 
				
			||||||
          Tag_color_range(Gradient_array[Current_gradient].Start,Gradient_array[Current_gradient].End);
 | 
					          Tag_color_range(Main_backups->Pages->Gradients->Range[Current_gradient].Start,Main_backups->Pages->Gradients->Range[Current_gradient].End);
 | 
				
			||||||
          // Tracé de la preview:
 | 
					          // Tracé de la preview:
 | 
				
			||||||
          Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
					          Draw_gradient_preview(8,128,108,14,Current_gradient);
 | 
				
			||||||
          Display_cursor();
 | 
					          Display_cursor();
 | 
				
			||||||
@ -2773,7 +2773,7 @@ void Button_Gradients(void)
 | 
				
			|||||||
  if (clicked_button==7) // Cancel
 | 
					  if (clicked_button==7) // Cancel
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    Current_gradient=old_current_gradient;
 | 
					    Current_gradient=old_current_gradient;
 | 
				
			||||||
    memcpy(Gradient_array,backup_gradients,sizeof(T_Gradient_array)*16);
 | 
					    memcpy(Main_backups->Pages->Gradients,&backup_gradients,sizeof(T_Gradient_array));
 | 
				
			||||||
    Load_gradient_data(Current_gradient);
 | 
					    Load_gradient_data(Current_gradient);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -781,8 +781,6 @@ GFX2_GLOBAL Func_gradient Gradient_function;
 | 
				
			|||||||
/// either ::Pixel (if the gradient must be drawn on menus only)
 | 
					/// either ::Pixel (if the gradient must be drawn on menus only)
 | 
				
			||||||
/// or ::Display_pixel (if the gradient must be drawn on the image)
 | 
					/// or ::Display_pixel (if the gradient must be drawn on the image)
 | 
				
			||||||
GFX2_GLOBAL Func_pixel Gradient_pixel;
 | 
					GFX2_GLOBAL Func_pixel Gradient_pixel;
 | 
				
			||||||
/// Settings for all gradients
 | 
					 | 
				
			||||||
GFX2_GLOBAL T_Gradient_array Gradient_array[16];
 | 
					 | 
				
			||||||
/// Index in ::Gradient_array of the currently selected gradient.
 | 
					/// Index in ::Gradient_array of the currently selected gradient.
 | 
				
			||||||
GFX2_GLOBAL byte Current_gradient;
 | 
					GFX2_GLOBAL byte Current_gradient;
 | 
				
			||||||
/// Boolean, true when the color cycling is active.
 | 
					/// Boolean, true when the color cycling is active.
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										13
									
								
								src/init.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								src/init.c
									
									
									
									
									
								
							@ -1999,7 +1999,10 @@ int Load_CFG(int reload_all)
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
      case CHUNK_GRADIENTS: // Infos sur les dégradés
 | 
					      case CHUNK_GRADIENTS: // Infos sur les dégradés
 | 
				
			||||||
        if (reload_all)
 | 
					        // The gradients chunk is deprecated since the data
 | 
				
			||||||
 | 
					        // is now loaded/saved in GIF and LBM formats.
 | 
				
			||||||
 | 
					        // The chunk will be completely ignored.
 | 
				
			||||||
 | 
					        /*if (reload_all)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          if (! Read_byte(Handle, &Current_gradient))
 | 
					          if (! Read_byte(Handle, &Current_gradient))
 | 
				
			||||||
            goto Erreur_lecture_config;
 | 
					            goto Erreur_lecture_config;
 | 
				
			||||||
@ -2014,7 +2017,7 @@ int Load_CFG(int reload_all)
 | 
				
			|||||||
          }
 | 
					          }
 | 
				
			||||||
          Load_gradient_data(Current_gradient);
 | 
					          Load_gradient_data(Current_gradient);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        else
 | 
					        else*/
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          if (fseek(Handle,Chunk.Size,SEEK_CUR)==-1)
 | 
					          if (fseek(Handle,Chunk.Size,SEEK_CUR)==-1)
 | 
				
			||||||
            goto Erreur_lecture_config;
 | 
					            goto Erreur_lecture_config;
 | 
				
			||||||
@ -2324,6 +2327,9 @@ int Save_CFG(void)
 | 
				
			|||||||
    goto Erreur_sauvegarde_config;
 | 
					    goto Erreur_sauvegarde_config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Sauvegarde des informations des dégradés
 | 
					  // Sauvegarde des informations des dégradés
 | 
				
			||||||
 | 
					  // The gradients chunk is deprecated since the data
 | 
				
			||||||
 | 
					  // is now loaded/saved in GIF and LBM formats.
 | 
				
			||||||
 | 
					  /*
 | 
				
			||||||
  Chunk.Number=CHUNK_GRADIENTS;
 | 
					  Chunk.Number=CHUNK_GRADIENTS;
 | 
				
			||||||
  Chunk.Size=241;
 | 
					  Chunk.Size=241;
 | 
				
			||||||
  if (!Write_byte(Handle, Chunk.Number) ||
 | 
					  if (!Write_byte(Handle, Chunk.Number) ||
 | 
				
			||||||
@ -2340,6 +2346,7 @@ int Save_CFG(void)
 | 
				
			|||||||
        !Write_dword_le(Handle, Gradient_array[index].Technique) )
 | 
					        !Write_dword_le(Handle, Gradient_array[index].Technique) )
 | 
				
			||||||
        goto Erreur_sauvegarde_config;
 | 
					        goto Erreur_sauvegarde_config;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Sauvegarde de la matrice du Smooth
 | 
					  // Sauvegarde de la matrice du Smooth
 | 
				
			||||||
  Chunk.Number=CHUNK_SMOOTH;
 | 
					  Chunk.Number=CHUNK_SMOOTH;
 | 
				
			||||||
@ -2547,6 +2554,7 @@ void Set_config_defaults(void)
 | 
				
			|||||||
    Stencil[index]=1;
 | 
					    Stencil[index]=1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Dégradés
 | 
					  // Dégradés
 | 
				
			||||||
 | 
					  /* TODO
 | 
				
			||||||
  Current_gradient=0;
 | 
					  Current_gradient=0;
 | 
				
			||||||
  for(index=0;index<16;index++)
 | 
					  for(index=0;index<16;index++)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
@ -2557,6 +2565,7 @@ void Set_config_defaults(void)
 | 
				
			|||||||
    Gradient_array[index].Technique=0;
 | 
					    Gradient_array[index].Technique=0;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  Load_gradient_data(Current_gradient);
 | 
					  Load_gradient_data(Current_gradient);
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  // Smooth
 | 
					  // Smooth
 | 
				
			||||||
  Smooth_matrix[0][0]=1;
 | 
					  Smooth_matrix[0][0]=1;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										20
									
								
								src/input.c
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								src/input.c
									
									
									
									
									
								
							@ -920,13 +920,13 @@ int Color_cycling(__attribute__((unused)) void* useless)
 | 
				
			|||||||
  {
 | 
					  {
 | 
				
			||||||
    int len;
 | 
					    int len;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    len=Gradient_array[i].End-Gradient_array[i].Start+1;
 | 
					    len=Main_backups->Pages->Gradients->Range[i].End-Main_backups->Pages->Gradients->Range[i].Start+1;
 | 
				
			||||||
    if (len>1 && Gradient_array[i].Speed)
 | 
					    if (len>1 && Main_backups->Pages->Gradients->Range[i].Speed)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      int new_offset;
 | 
					      int new_offset;
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      new_offset=(now-start)/(int)(1000.0/(Gradient_array[i].Speed*0.2856)) % len;
 | 
					      new_offset=(now-start)/(int)(1000.0/(Main_backups->Pages->Gradients->Range[i].Speed*0.2856)) % len;
 | 
				
			||||||
      if (!Gradient_array[i].Inverse)
 | 
					      if (!Main_backups->Pages->Gradients->Range[i].Inverse)
 | 
				
			||||||
        new_offset=len - new_offset;
 | 
					        new_offset=len - new_offset;
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      if (new_offset!=offset[i])
 | 
					      if (new_offset!=offset[i])
 | 
				
			||||||
@ -947,14 +947,14 @@ int Color_cycling(__attribute__((unused)) void* useless)
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
      int len;
 | 
					      int len;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
      len=Gradient_array[i].End-Gradient_array[i].Start+1;
 | 
					      len=Main_backups->Pages->Gradients->Range[i].End-Main_backups->Pages->Gradients->Range[i].Start+1;
 | 
				
			||||||
      if (len>1 && Gradient_array[i].Speed)
 | 
					      if (len>1 && Main_backups->Pages->Gradients->Range[i].Speed)
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        for(color=Gradient_array[i].Start;color<=Gradient_array[i].End;color++)
 | 
					        for(color=Main_backups->Pages->Gradients->Range[i].Start;color<=Main_backups->Pages->Gradients->Range[i].End;color++)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          PaletteSDL[color].r=Main_palette[Gradient_array[i].Start+((color-Gradient_array[i].Start+offset[i])%len)].R;
 | 
					          PaletteSDL[color].r=Main_palette[Main_backups->Pages->Gradients->Range[i].Start+((color-Main_backups->Pages->Gradients->Range[i].Start+offset[i])%len)].R;
 | 
				
			||||||
          PaletteSDL[color].g=Main_palette[Gradient_array[i].Start+((color-Gradient_array[i].Start+offset[i])%len)].G;
 | 
					          PaletteSDL[color].g=Main_palette[Main_backups->Pages->Gradients->Range[i].Start+((color-Main_backups->Pages->Gradients->Range[i].Start+offset[i])%len)].G;
 | 
				
			||||||
          PaletteSDL[color].b=Main_palette[Gradient_array[i].Start+((color-Gradient_array[i].Start+offset[i])%len)].B;
 | 
					          PaletteSDL[color].b=Main_palette[Main_backups->Pages->Gradients->Range[i].Start+((color-Main_backups->Pages->Gradients->Range[i].Start+offset[i])%len)].B;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -719,13 +719,13 @@ void Load_image(T_IO_Context *context)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // Color cyling ranges:
 | 
					        // Color cyling ranges:
 | 
				
			||||||
        for (i=0; i<16; i++)
 | 
					        for (i=0; i<16; i++)
 | 
				
			||||||
          Gradient_array[i].Speed=0;
 | 
					          Main_backups->Pages->Gradients->Range[i].Speed=0;
 | 
				
			||||||
        for (i=0; i<context->Color_cycles; i++)
 | 
					        for (i=0; i<context->Color_cycles; i++)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          Gradient_array[i].Start=context->Cycle_range[i].Start;
 | 
					          Main_backups->Pages->Gradients->Range[i].Start=context->Cycle_range[i].Start;
 | 
				
			||||||
          Gradient_array[i].End=context->Cycle_range[i].End;
 | 
					          Main_backups->Pages->Gradients->Range[i].End=context->Cycle_range[i].End;
 | 
				
			||||||
          Gradient_array[i].Inverse=context->Cycle_range[i].Inverse;
 | 
					          Main_backups->Pages->Gradients->Range[i].Inverse=context->Cycle_range[i].Inverse;
 | 
				
			||||||
          Gradient_array[i].Speed=context->Cycle_range[i].Speed;
 | 
					          Main_backups->Pages->Gradients->Range[i].Speed=context->Cycle_range[i].Speed;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -1132,12 +1132,12 @@ void Init_context_layered_image(T_IO_Context * context, char *file_name, char *f
 | 
				
			|||||||
  // Color cyling ranges:
 | 
					  // Color cyling ranges:
 | 
				
			||||||
  for (i=0; i<16; i++)
 | 
					  for (i=0; i<16; i++)
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    if (Gradient_array[i].Start!=Gradient_array[i].End && Gradient_array[i].Speed)
 | 
					    if (Main_backups->Pages->Gradients->Range[i].Start!=Main_backups->Pages->Gradients->Range[i].End && Main_backups->Pages->Gradients->Range[i].Speed)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      context->Cycle_range[context->Color_cycles].Start=Gradient_array[i].Start;
 | 
					      context->Cycle_range[context->Color_cycles].Start=Main_backups->Pages->Gradients->Range[i].Start;
 | 
				
			||||||
      context->Cycle_range[context->Color_cycles].End=Gradient_array[i].End;
 | 
					      context->Cycle_range[context->Color_cycles].End=Main_backups->Pages->Gradients->Range[i].End;
 | 
				
			||||||
      context->Cycle_range[context->Color_cycles].Inverse=Gradient_array[i].Inverse;
 | 
					      context->Cycle_range[context->Color_cycles].Inverse=Main_backups->Pages->Gradients->Range[i].Inverse;
 | 
				
			||||||
      context->Cycle_range[context->Color_cycles].Speed=Gradient_array[i].Speed;
 | 
					      context->Cycle_range[context->Color_cycles].Speed=Main_backups->Pages->Gradients->Range[i].Speed;
 | 
				
			||||||
      context->Color_cycles++;
 | 
					      context->Color_cycles++;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										38
									
								
								src/pages.c
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								src/pages.c
									
									
									
									
									
								
							@ -75,6 +75,7 @@ T_Page * New_page(byte nb_layers)
 | 
				
			|||||||
    page->Filename[0]='\0';
 | 
					    page->Filename[0]='\0';
 | 
				
			||||||
    page->File_format=DEFAULT_FILEFORMAT;
 | 
					    page->File_format=DEFAULT_FILEFORMAT;
 | 
				
			||||||
    page->Nb_layers=nb_layers;
 | 
					    page->Nb_layers=nb_layers;
 | 
				
			||||||
 | 
					    page->Gradients=NULL;
 | 
				
			||||||
    page->Transparent_color=0; // Default transparent color
 | 
					    page->Transparent_color=0; // Default transparent color
 | 
				
			||||||
    page->Background_transparent=0;
 | 
					    page->Background_transparent=0;
 | 
				
			||||||
    page->Next = page->Prev = NULL;
 | 
					    page->Next = page->Prev = NULL;
 | 
				
			||||||
@ -141,6 +142,24 @@ byte * Dup_layer(byte * layer)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ==============================================================
 | 
					// ==============================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds a shared reference to the gradient data of another page. Pass NULL for new.
 | 
				
			||||||
 | 
					T_Gradient_array *Dup_gradient(T_Page * page)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  // new
 | 
				
			||||||
 | 
					  if (page==NULL || page->Gradients==NULL)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    T_Gradient_array *array;
 | 
				
			||||||
 | 
					    array=(T_Gradient_array *)calloc(1, sizeof(T_Gradient_array));
 | 
				
			||||||
 | 
					    if (!array)
 | 
				
			||||||
 | 
					      return NULL;
 | 
				
			||||||
 | 
					    array->Used=1;
 | 
				
			||||||
 | 
					    return array;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  // shared
 | 
				
			||||||
 | 
					  page->Gradients->Used++;
 | 
				
			||||||
 | 
					  return page->Gradients;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Download_infos_page_main(T_Page * page)
 | 
					void Download_infos_page_main(T_Page * page)
 | 
				
			||||||
// Affiche la page à l'écran
 | 
					// Affiche la page à l'écran
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -396,6 +415,16 @@ void Clear_page(T_Page * page)
 | 
				
			|||||||
    Free_layer(page, i);
 | 
					    Free_layer(page, i);
 | 
				
			||||||
    page->Image[i]=NULL;
 | 
					    page->Image[i]=NULL;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Free_gradient() : This data is reference-counted
 | 
				
			||||||
 | 
					  if (page->Gradients)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    page->Gradients->Used--;
 | 
				
			||||||
 | 
					    if (page->Gradients->Used==0)
 | 
				
			||||||
 | 
					      free(page->Gradients);
 | 
				
			||||||
 | 
					    page->Gradients=NULL;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  page->Width=0;
 | 
					  page->Width=0;
 | 
				
			||||||
  page->Height=0;
 | 
					  page->Height=0;
 | 
				
			||||||
  // On ne se préoccupe pas de ce que deviens le reste des infos de l'image.
 | 
					  // On ne se préoccupe pas de ce que deviens le reste des infos de l'image.
 | 
				
			||||||
@ -404,6 +433,7 @@ void Clear_page(T_Page * page)
 | 
				
			|||||||
void Copy_S_page(T_Page * dest,T_Page * source)
 | 
					void Copy_S_page(T_Page * dest,T_Page * source)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  *dest=*source;
 | 
					  *dest=*source;
 | 
				
			||||||
 | 
					  dest->Gradients=NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -438,6 +468,10 @@ int Allocate_list_of_pages(T_List_of_pages * list)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  list->List_size=1;
 | 
					  list->List_size=1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  page->Gradients=Dup_gradient(NULL);
 | 
				
			||||||
 | 
					  if (!page->Gradients)
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  return 1; // Succès
 | 
					  return 1; // Succès
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -803,6 +837,7 @@ int Backup_with_new_dimensions(int upload,byte layers,int width,int height)
 | 
				
			|||||||
  new_page->Height=height;
 | 
					  new_page->Height=height;
 | 
				
			||||||
  strcpy(new_page->Filename, Main_backups->Pages->Filename);
 | 
					  strcpy(new_page->Filename, Main_backups->Pages->Filename);
 | 
				
			||||||
  strcpy(new_page->File_directory, Main_backups->Pages->File_directory);
 | 
					  strcpy(new_page->File_directory, Main_backups->Pages->File_directory);
 | 
				
			||||||
 | 
					  new_page->Gradients=Dup_gradient(upload?Main_backups->Pages:NULL);
 | 
				
			||||||
  if (Create_new_page(new_page,Main_backups,0xFFFFFFFF))
 | 
					  if (Create_new_page(new_page,Main_backups,0xFFFFFFFF))
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    for (i=0; i<layers;i++)
 | 
					    for (i=0; i<layers;i++)
 | 
				
			||||||
@ -850,6 +885,7 @@ int Backup_and_resize_the_spare(int width,int height)
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
  // Fill it with a copy of the latest history
 | 
					  // Fill it with a copy of the latest history
 | 
				
			||||||
  Copy_S_page(new_page,Spare_backups->Pages);
 | 
					  Copy_S_page(new_page,Spare_backups->Pages);
 | 
				
			||||||
 | 
					  new_page->Gradients=Dup_gradient(Spare_backups->Pages);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  new_page->Width=width;
 | 
					  new_page->Width=width;
 | 
				
			||||||
  new_page->Height=height;
 | 
					  new_page->Height=height;
 | 
				
			||||||
@ -905,6 +941,7 @@ void Backup_layers(dword layer_mask)
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
  // Fill it with a copy of the latest history
 | 
					  // Fill it with a copy of the latest history
 | 
				
			||||||
  Copy_S_page(new_page,Main_backups->Pages);
 | 
					  Copy_S_page(new_page,Main_backups->Pages);
 | 
				
			||||||
 | 
					  new_page->Gradients=Dup_gradient(Main_backups->Pages);
 | 
				
			||||||
  Create_new_page(new_page,Main_backups,layer_mask);
 | 
					  Create_new_page(new_page,Main_backups,layer_mask);
 | 
				
			||||||
  Download_infos_page_main(new_page);
 | 
					  Download_infos_page_main(new_page);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -941,6 +978,7 @@ void Backup_the_spare(dword layer_mask)
 | 
				
			|||||||
  
 | 
					  
 | 
				
			||||||
  // Fill it with a copy of the latest history
 | 
					  // Fill it with a copy of the latest history
 | 
				
			||||||
  Copy_S_page(new_page,Spare_backups->Pages);
 | 
					  Copy_S_page(new_page,Spare_backups->Pages);
 | 
				
			||||||
 | 
					  new_page->Gradients=Dup_gradient(Spare_backups->Pages);
 | 
				
			||||||
  Create_new_page(new_page,Spare_backups,layer_mask);
 | 
					  Create_new_page(new_page,Spare_backups,layer_mask);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Copy the actual pixels from the backup to the latest page
 | 
					  // Copy the actual pixels from the backup to the latest page
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										10
									
								
								src/struct.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/struct.h
									
									
									
									
									
								
							@ -226,7 +226,14 @@ typedef struct
 | 
				
			|||||||
  dword Mix;      ///< Amount of randomness to add to the mix (0-255)
 | 
					  dword Mix;      ///< Amount of randomness to add to the mix (0-255)
 | 
				
			||||||
  dword Technique;///< Gradient technique: 0 (no pattern) 1 (dithering), or 2 (big dithering)
 | 
					  dword Technique;///< Gradient technique: 0 (no pattern) 1 (dithering), or 2 (big dithering)
 | 
				
			||||||
  byte  Speed;    ///< Speed of cycling. 0 for disabled, 1-64 otherwise.
 | 
					  byte  Speed;    ///< Speed of cycling. 0 for disabled, 1-64 otherwise.
 | 
				
			||||||
} T_Gradient_array;
 | 
					} T_Gradient_range;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Data for a full set of gradients.
 | 
				
			||||||
 | 
					typedef struct
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int Used; ///< Reference count
 | 
				
			||||||
 | 
					  T_Gradient_range Range[16];
 | 
				
			||||||
 | 
					}  T_Gradient_array;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Data for one setting of shade. Warning, this one is saved/loaded as binary.
 | 
					/// Data for one setting of shade. Warning, this one is saved/loaded as binary.
 | 
				
			||||||
typedef struct
 | 
					typedef struct
 | 
				
			||||||
@ -351,6 +358,7 @@ typedef struct T_Page
 | 
				
			|||||||
  byte      File_format;                        ///< File format, in enum ::FILE_FORMATS
 | 
					  byte      File_format;                        ///< File format, in enum ::FILE_FORMATS
 | 
				
			||||||
  struct T_Page *Next; ///< Pointer to the next backup
 | 
					  struct T_Page *Next; ///< Pointer to the next backup
 | 
				
			||||||
  struct T_Page *Prev; ///< Pointer to the previous backup
 | 
					  struct T_Page *Prev; ///< Pointer to the previous backup
 | 
				
			||||||
 | 
					  T_Gradient_array *Gradients; ///< Pointer to the gradients used by the image.
 | 
				
			||||||
  byte      Background_transparent; ///< Boolean, true if Layer 0 should have transparent pixels
 | 
					  byte      Background_transparent; ///< Boolean, true if Layer 0 should have transparent pixels
 | 
				
			||||||
  byte      Transparent_color; ///< Index of transparent color. 0 to 255.
 | 
					  byte      Transparent_color; ///< Index of transparent color. 0 to 255.
 | 
				
			||||||
  byte      Nb_layers; ///< Number of layers
 | 
					  byte      Nb_layers; ///< Number of layers
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user