Eliminated a lot of tab characters in source code
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1342 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
480c9abaab
commit
7076e8e06d
16
buttons.h
16
buttons.h
@ -33,21 +33,21 @@ void Stencil_update_color(byte color);
|
|||||||
void Stencil_tag_color(byte color, byte tag_color);
|
void Stencil_tag_color(byte color, byte tag_color);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Displays an error message when there is no more memory for the requested
|
Displays an error message when there is no more memory for the requested
|
||||||
operation.
|
operation.
|
||||||
*/
|
*/
|
||||||
void Message_out_of_memory(void);
|
void Message_out_of_memory(void);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Displays the splash screen at program startup.
|
Displays the splash screen at program startup.
|
||||||
*/
|
*/
|
||||||
void Button_Message_initial(void);
|
void Button_Message_initial(void);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Changes brush shape.
|
Changes brush shape.
|
||||||
This function saves the current brush shape and swith to the default one
|
This function saves the current brush shape and swith to the default one
|
||||||
(single pixel brush) for the filler and the color picker.
|
(single pixel brush) for the filler and the color picker.
|
||||||
These functions don't need (and will not work with) a custom brush.
|
These functions don't need (and will not work with) a custom brush.
|
||||||
*/
|
*/
|
||||||
void Change_paintbrush_shape(byte shape);
|
void Change_paintbrush_shape(byte shape);
|
||||||
|
|
||||||
@ -587,7 +587,7 @@ void Button_Autosave(void);
|
|||||||
void Button_Settings(void);
|
void Button_Settings(void);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Display the skin selector window.
|
Display the skin selector window.
|
||||||
*/
|
*/
|
||||||
void Button_Skins(void);
|
void Button_Skins(void);
|
||||||
|
|
||||||
|
|||||||
@ -258,9 +258,9 @@ void Button_Grid_menu(void)
|
|||||||
Window_set_normal_button(12, 62, 14, 14, " ", 0, 1, 0); // 7
|
Window_set_normal_button(12, 62, 14, 14, " ", 0, 1, 0); // 7
|
||||||
Window_set_normal_button(70, 62, 14, 14, " ", 0, 1, 0); // 8
|
Window_set_normal_button(70, 62, 14, 14, " ", 0, 1, 0); // 8
|
||||||
if (snapgrid)
|
if (snapgrid)
|
||||||
Print_in_window(16, 65, "X", MC_Black, MC_Light);
|
Print_in_window(16, 65, "X", MC_Black, MC_Light);
|
||||||
if (Show_grid)
|
if (Show_grid)
|
||||||
Print_in_window(74, 65, "X", MC_Black, MC_Light);
|
Print_in_window(74, 65, "X", MC_Black, MC_Light);
|
||||||
Print_in_window(32, 65,"Snap",MC_Dark,MC_Light);
|
Print_in_window(32, 65,"Snap",MC_Dark,MC_Light);
|
||||||
Print_in_window(90, 65,"Show",MC_Dark,MC_Light);
|
Print_in_window(90, 65,"Show",MC_Dark,MC_Light);
|
||||||
|
|
||||||
@ -349,18 +349,18 @@ void Button_Grid_menu(void)
|
|||||||
|
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
snapgrid = !snapgrid;
|
snapgrid = !snapgrid;
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
Print_in_window(16, 65, snapgrid?"X":" ", MC_Black, MC_Light);
|
Print_in_window(16, 65, snapgrid?"X":" ", MC_Black, MC_Light);
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
showgrid = !showgrid;
|
showgrid = !showgrid;
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
Print_in_window(74, 65, showgrid?"X":" ", MC_Black, MC_Light);
|
Print_in_window(74, 65, showgrid?"X":" ", MC_Black, MC_Light);
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
if (Is_shortcut(Key,0x100+BUTTON_HELP))
|
if (Is_shortcut(Key,0x100+BUTTON_HELP))
|
||||||
@ -375,7 +375,7 @@ void Button_Grid_menu(void)
|
|||||||
Snap_offset_X=dx_selected;
|
Snap_offset_X=dx_selected;
|
||||||
Snap_offset_Y=dy_selected;
|
Snap_offset_Y=dy_selected;
|
||||||
Snap_mode=snapgrid;
|
Snap_mode=snapgrid;
|
||||||
Show_grid=showgrid;
|
Show_grid=showgrid;
|
||||||
}
|
}
|
||||||
|
|
||||||
Close_window();
|
Close_window();
|
||||||
|
|||||||
16
const.h
16
const.h
@ -149,14 +149,14 @@ enum ERROR_CODES
|
|||||||
enum PIXEL_RATIO
|
enum PIXEL_RATIO
|
||||||
{
|
{
|
||||||
PIXEL_SIMPLE=0, ///< Use real pixels
|
PIXEL_SIMPLE=0, ///< Use real pixels
|
||||||
PIXEL_WIDE, ///< Use wide pixels (2x1) like on Amstrad CPC mode 0
|
PIXEL_WIDE, ///< Use wide pixels (2x1) like on Amstrad CPC mode 0
|
||||||
PIXEL_TALL, ///< Use tall pixels (1x2) like on Amstrad CPC mode 2
|
PIXEL_TALL, ///< Use tall pixels (1x2) like on Amstrad CPC mode 2
|
||||||
PIXEL_DOUBLE, ///< Use big pixels (2x2) if your LCD screen can't do lowres by itself
|
PIXEL_DOUBLE, ///< Use big pixels (2x2) if your LCD screen can't do lowres by itself
|
||||||
PIXEL_TRIPLE, ///< Use really big pixels (3x3)
|
PIXEL_TRIPLE, ///< Use really big pixels (3x3)
|
||||||
PIXEL_WIDE2, ///< Use big wide pixels (4x2)
|
PIXEL_WIDE2, ///< Use big wide pixels (4x2)
|
||||||
PIXEL_TALL2, ///< Use big tall pixels (2x4)
|
PIXEL_TALL2, ///< Use big tall pixels (2x4)
|
||||||
PIXEL_QUAD, ///< Use really giant pixels (4x4). You need to have a screen resolution at least 1280x800 to use this one
|
PIXEL_QUAD, ///< Use really giant pixels (4x4). You need to have a screen resolution at least 1280x800 to use this one
|
||||||
PIXEL_MAX ///< Number of elements in enum
|
PIXEL_MAX ///< Number of elements in enum
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Different kinds of menu button behavior.
|
/// Different kinds of menu button behavior.
|
||||||
|
|||||||
30
engine.h
30
engine.h
@ -40,7 +40,7 @@ void Open_popup (word x_pos, word y_pos, word width, word height);
|
|||||||
void Close_popup (void);
|
void Close_popup (void);
|
||||||
|
|
||||||
void Window_draw_normal_bouton(word x_pos,word y_pos,word width,word height,
|
void Window_draw_normal_bouton(word x_pos,word y_pos,word width,word height,
|
||||||
char * title,byte undersc_letter,byte clickable);
|
char * title,byte undersc_letter,byte clickable);
|
||||||
void Window_select_normal_button(word x_pos,word y_pos,word width,word height);
|
void Window_select_normal_button(word x_pos,word y_pos,word width,word height);
|
||||||
void Window_unselect_normal_button(word x_pos,word y_pos,word width,word height);
|
void Window_unselect_normal_button(word x_pos,word y_pos,word width,word height);
|
||||||
void Window_draw_palette_bouton(word x_pos,word y_pos);
|
void Window_draw_palette_bouton(word x_pos,word y_pos);
|
||||||
@ -54,35 +54,35 @@ void Window_clear_input_button(T_Special_button * button);
|
|||||||
void Window_draw_input_bouton(word x_pos, word y_pos, word width_in_characters);
|
void Window_draw_input_bouton(word x_pos, word y_pos, word width_in_characters);
|
||||||
|
|
||||||
T_Normal_button * Window_set_normal_button(word x_pos, word y_pos,
|
T_Normal_button * Window_set_normal_button(word x_pos, word y_pos,
|
||||||
word width, word height, char * title, byte undersc_letter,
|
word width, word height, char * title, byte undersc_letter,
|
||||||
byte clickable, word shortcut);
|
byte clickable, word shortcut);
|
||||||
|
|
||||||
T_Normal_button * Window_set_repeatable_button(word x_pos, word y_pos,
|
T_Normal_button * Window_set_repeatable_button(word x_pos, word y_pos,
|
||||||
word width, word height, char * title, byte undersc_letter,
|
word width, word height, char * title, byte undersc_letter,
|
||||||
byte clickable, word shortcut);
|
byte clickable, word shortcut);
|
||||||
|
|
||||||
T_Palette_button * Window_set_palette_button(word x_pos, word y_pos);
|
T_Palette_button * Window_set_palette_button(word x_pos, word y_pos);
|
||||||
void Window_clear_tags(void);
|
void Window_clear_tags(void);
|
||||||
void Tag_color_range(byte start, byte end);
|
void Tag_color_range(byte start, byte end);
|
||||||
|
|
||||||
T_Scroller_button * Window_set_scroller_button(word x_pos, word y_pos,
|
T_Scroller_button * Window_set_scroller_button(word x_pos, word y_pos,
|
||||||
word height, word nb_elements, word nb_elements_visible,
|
word height, word nb_elements, word nb_elements_visible,
|
||||||
word initial_position);
|
word initial_position);
|
||||||
|
|
||||||
T_Special_button * Window_set_special_button(word x_pos, word y_pos, word width,
|
T_Special_button * Window_set_special_button(word x_pos, word y_pos, word width,
|
||||||
word height);
|
word height);
|
||||||
|
|
||||||
T_Special_button * Window_set_input_button(word x_pos, word y_pos,
|
T_Special_button * Window_set_input_button(word x_pos, word y_pos,
|
||||||
word width_in_characters);
|
word width_in_characters);
|
||||||
|
|
||||||
T_Dropdown_button * Window_set_dropdown_button(word x_pos, word y_pos,
|
T_Dropdown_button * Window_set_dropdown_button(word x_pos, word y_pos,
|
||||||
word width, word height, word dropdown_width, const char *label,
|
word width, word height, word dropdown_width, const char *label,
|
||||||
byte display_choice, byte display_centered, byte display_arrow,
|
byte display_choice, byte display_centered, byte display_arrow,
|
||||||
byte active_button,byte bottom_up);
|
byte active_button,byte bottom_up);
|
||||||
|
|
||||||
/// Adds an item to a dropdown menu
|
/// Adds an item to a dropdown menu
|
||||||
void Window_dropdown_add_item(T_Dropdown_button * dropdown, word btn_number,
|
void Window_dropdown_add_item(T_Dropdown_button * dropdown, word btn_number,
|
||||||
const char *label);
|
const char *label);
|
||||||
|
|
||||||
void Window_dropdown_clear_items(T_Dropdown_button * dropdown);
|
void Window_dropdown_clear_items(T_Dropdown_button * dropdown);
|
||||||
|
|
||||||
@ -94,10 +94,10 @@ void Window_dropdown_clear_items(T_Dropdown_button * dropdown);
|
|||||||
T_Dropdown_choice * Dropdown_activate(T_Dropdown_button *button, short off_x, short off_y);
|
T_Dropdown_choice * Dropdown_activate(T_Dropdown_button *button, short off_x, short off_y);
|
||||||
|
|
||||||
T_List_button * Window_set_list_button(T_Special_button * entry_button,
|
T_List_button * Window_set_list_button(T_Special_button * entry_button,
|
||||||
T_Scroller_button * scroller, Func_draw_list_item draw_list_item);
|
T_Scroller_button * scroller, Func_draw_list_item draw_list_item);
|
||||||
void Window_redraw_list(T_List_button * list);
|
void Window_redraw_list(T_List_button * list);
|
||||||
byte Window_click_in_rectangle(short start_x, short start_y, short end_x,
|
byte Window_click_in_rectangle(short start_x, short start_y, short end_x,
|
||||||
short end_y);
|
short end_y);
|
||||||
short Wait_click_in_palette(T_Palette_button * button);
|
short Wait_click_in_palette(T_Palette_button * button);
|
||||||
void Get_color_behind_window(byte * color, byte * click);
|
void Get_color_behind_window(byte * color, byte * click);
|
||||||
|
|
||||||
|
|||||||
@ -1404,8 +1404,8 @@ byte Button_Load_or_Save(byte load, T_IO_Context *context)
|
|||||||
else Selected_type = 0;
|
else Selected_type = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now load immediately, but only if the user exited readline by pressing ENTER
|
// Now load immediately, but only if the user exited readline by pressing ENTER
|
||||||
if (Mouse_K == 0) has_clicked_ok = 1;
|
if (Mouse_K == 0) has_clicked_ok = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1647,7 +1647,7 @@ byte Button_Load_or_Save(byte load, T_IO_Context *context)
|
|||||||
Display_cursor();
|
Display_cursor();
|
||||||
New_preview_is_needed=1;
|
New_preview_is_needed=1;
|
||||||
|
|
||||||
// On est dans un nouveau répertoire, donc on remet le quicksearch à 0
|
// On est dans un nouveau répertoire, donc on remet le quicksearch à 0
|
||||||
*quicksearch_filename=0;
|
*quicksearch_filename=0;
|
||||||
}
|
}
|
||||||
else // Sinon on essaye de charger ou sauver le fichier
|
else // Sinon on essaye de charger ou sauver le fichier
|
||||||
|
|||||||
14
init.c
14
init.c
@ -353,9 +353,9 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
|
|||||||
// Preview
|
// Preview
|
||||||
cursor_x += Menu_bars[MENUBAR_TOOLS].Skin_width;
|
cursor_x += Menu_bars[MENUBAR_TOOLS].Skin_width;
|
||||||
if (GUI_seek_right(gui, &cursor_x, cursor_y, neutral_color, "preview"))
|
if (GUI_seek_right(gui, &cursor_x, cursor_y, neutral_color, "preview"))
|
||||||
return 1;
|
return 1;
|
||||||
if (Read_GUI_block(gfx, gui, cursor_x, cursor_y, gfx->Preview, 173, 16, "logo", 0))
|
if (Read_GUI_block(gfx, gui, cursor_x, cursor_y, gfx->Preview, 173, 16, "logo", 0))
|
||||||
return 1;
|
return 1;
|
||||||
cursor_y+= Menu_bars[MENUBAR_TOOLS].Height;
|
cursor_y+= Menu_bars[MENUBAR_TOOLS].Height;
|
||||||
|
|
||||||
// Layerbar
|
// Layerbar
|
||||||
@ -1936,10 +1936,10 @@ void Set_all_video_modes(void)
|
|||||||
{
|
{
|
||||||
int index2;
|
int index2;
|
||||||
#if defined(__GP2X__)
|
#if defined(__GP2X__)
|
||||||
// On the GP2X the first mode is not windowed, so include it in the search.
|
// On the GP2X the first mode is not windowed, so include it in the search.
|
||||||
index2=0;
|
index2=0;
|
||||||
#else
|
#else
|
||||||
index2=1;
|
index2=1;
|
||||||
#endif
|
#endif
|
||||||
for (/**/; index2 < Nb_video_modes; index2++)
|
for (/**/; index2 < Nb_video_modes; index2++)
|
||||||
if (Modes[index]->w == Video_mode[index2].Width &&
|
if (Modes[index]->w == Video_mode[index2].Width &&
|
||||||
@ -2084,9 +2084,9 @@ int Load_CFG(int reload_all)
|
|||||||
goto Erreur_lecture_config;
|
goto Erreur_lecture_config;
|
||||||
|
|
||||||
#if defined(__GP2X__)
|
#if defined(__GP2X__)
|
||||||
index2=0;
|
index2=0;
|
||||||
#else
|
#else
|
||||||
index2=1;
|
index2=1;
|
||||||
#endif
|
#endif
|
||||||
for (/**/; index2<Nb_video_modes; index2++)
|
for (/**/; index2<Nb_video_modes; index2++)
|
||||||
{
|
{
|
||||||
|
|||||||
18
input.c
18
input.c
@ -490,7 +490,7 @@ int Handle_joystick_press(SDL_JoyButtonEvent event)
|
|||||||
Directional_up_left=1;
|
Directional_up_left=1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
Key = (KEY_JOYBUTTON+event.button)|Key_modifiers(SDL_GetModState());
|
Key = (KEY_JOYBUTTON+event.button)|Key_modifiers(SDL_GetModState());
|
||||||
@ -517,15 +517,15 @@ int Handle_joystick_release(SDL_JoyButtonEvent event)
|
|||||||
return Release_control(0,MOD_ALT);
|
return Release_control(0,MOD_ALT);
|
||||||
}
|
}
|
||||||
if (event.button == Joybutton_left_click)
|
if (event.button == Joybutton_left_click)
|
||||||
{
|
{
|
||||||
Input_new_mouse_K &= ~1;
|
Input_new_mouse_K &= ~1;
|
||||||
return Move_cursor_with_constraints();
|
return Move_cursor_with_constraints();
|
||||||
}
|
}
|
||||||
if (event.button == Joybutton_right_click)
|
if (event.button == Joybutton_right_click)
|
||||||
{
|
{
|
||||||
Input_new_mouse_K &= ~2;
|
Input_new_mouse_K &= ~2;
|
||||||
return Move_cursor_with_constraints();
|
return Move_cursor_with_constraints();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __GP2X__
|
#ifdef __GP2X__
|
||||||
switch(event.button)
|
switch(event.button)
|
||||||
|
|||||||
@ -136,13 +136,13 @@ unsigned char *raw2crtc(T_IO_Context *context, unsigned short width, unsigned sh
|
|||||||
{
|
{
|
||||||
for(hcc = 0; hcc < *r1; hcc++)
|
for(hcc = 0; hcc < *r1; hcc++)
|
||||||
{
|
{
|
||||||
for(cclk = 0; cclk < 2; cclk++)
|
for(cclk = 0; cclk < 2; cclk++)
|
||||||
{
|
{
|
||||||
x = (hcc << 1 | cclk);
|
x = (hcc << 1 | cclk);
|
||||||
y = vcc*(r9+1) + rcc;
|
y = vcc*(r9+1) + rcc;
|
||||||
*(tmpBuffer + addrCalc(vcc, rcc, hcc, cclk, *r1, r12, r13)) = (*ptrMode)(context,x,y);
|
*(tmpBuffer + addrCalc(vcc, rcc, hcc, cclk, *r1, r12, r13)) = (*ptrMode)(context,x,y);
|
||||||
*(allocationBuffer + addrCalc(vcc, rcc, hcc, cclk, *r1, r12, r13)) += 1;
|
*(allocationBuffer + addrCalc(vcc, rcc, hcc, cclk, *r1, r12, r13)) += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
16
main.c
16
main.c
@ -782,19 +782,19 @@ int Init_program(int argc,char * argv[])
|
|||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
// Load this file
|
// Load this file
|
||||||
Init_context_layered_image(&context, spare_filename, spare_directory);
|
Init_context_layered_image(&context, spare_filename, spare_directory);
|
||||||
Load_image(&context);
|
Load_image(&context);
|
||||||
Destroy_context(&context);
|
Destroy_context(&context);
|
||||||
End_of_modification();
|
End_of_modification();
|
||||||
Redraw_layered_image();
|
Redraw_layered_image();
|
||||||
|
|
||||||
Button_Page();
|
Button_Page();
|
||||||
// no break ! proceed with the other file now
|
// no break ! proceed with the other file now
|
||||||
case 1:
|
case 1:
|
||||||
Init_context_layered_image(&context, main_filename, main_directory);
|
Init_context_layered_image(&context, main_filename, main_directory);
|
||||||
Load_image(&context);
|
Load_image(&context);
|
||||||
Destroy_context(&context);
|
Destroy_context(&context);
|
||||||
End_of_modification();
|
End_of_modification();
|
||||||
Redraw_layered_image();
|
Redraw_layered_image();
|
||||||
|
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
|
|||||||
@ -2577,86 +2577,86 @@ void Save_C64(T_IO_Context * context)
|
|||||||
|
|
||||||
void Test_SCR(__attribute__((unused)) T_IO_Context * context)
|
void Test_SCR(__attribute__((unused)) T_IO_Context * context)
|
||||||
{
|
{
|
||||||
// Mmh... not sure what we could test. Any idea ?
|
// Mmh... not sure what we could test. Any idea ?
|
||||||
// The palette file can be tested, if it exists and have the right size it's
|
// The palette file can be tested, if it exists and have the right size it's
|
||||||
// ok. But if it's not there the pixel data may still be valid. And we can't
|
// ok. But if it's not there the pixel data may still be valid. And we can't
|
||||||
// use the filesize as this depends on the screen format.
|
// use the filesize as this depends on the screen format.
|
||||||
|
|
||||||
// An AMSDOS header would be a good indication but in some cases it may not
|
// An AMSDOS header would be a good indication but in some cases it may not
|
||||||
// be there
|
// be there
|
||||||
}
|
}
|
||||||
|
|
||||||
void Load_SCR(__attribute__((unused)) T_IO_Context * context)
|
void Load_SCR(__attribute__((unused)) T_IO_Context * context)
|
||||||
{
|
{
|
||||||
// The Amstrad CPC screen memory is mapped in a weird mode, somewhere
|
// The Amstrad CPC screen memory is mapped in a weird mode, somewhere
|
||||||
// between bitmap and textmode. Basically the only way to decode this is to
|
// between bitmap and textmode. Basically the only way to decode this is to
|
||||||
// emulate the video chip and read the bytes as needed...
|
// emulate the video chip and read the bytes as needed...
|
||||||
// Moreover, the hardware allows the screen to have any size from 8x1 to
|
// Moreover, the hardware allows the screen to have any size from 8x1 to
|
||||||
// 800x273 pixels, and there is no indication of that in the file besides
|
// 800x273 pixels, and there is no indication of that in the file besides
|
||||||
// its size. It can also use any of the 3 screen modes. Fortunately this
|
// its size. It can also use any of the 3 screen modes. Fortunately this
|
||||||
// last bit of information is stored in the palette file.
|
// last bit of information is stored in the palette file.
|
||||||
// Oh, and BTW, the picture can be offset, and it's even usual to do it,
|
// Oh, and BTW, the picture can be offset, and it's even usual to do it,
|
||||||
// because letting 128 pixels unused at the beginning of the file make it a
|
// because letting 128 pixels unused at the beginning of the file make it a
|
||||||
// lot easier to handle screens using more than 16K of VRam.
|
// lot easier to handle screens using more than 16K of VRam.
|
||||||
// The pixel encoding change with the video mode so we have to know that
|
// The pixel encoding change with the video mode so we have to know that
|
||||||
// before attempting to load anything...
|
// before attempting to load anything...
|
||||||
// As if this wasn't enough, Advanced OCP Art Studio, the reference tool on
|
// As if this wasn't enough, Advanced OCP Art Studio, the reference tool on
|
||||||
// Amstrad, can use RLE packing when saving files, meaning we also have to
|
// Amstrad, can use RLE packing when saving files, meaning we also have to
|
||||||
// handle that.
|
// handle that.
|
||||||
|
|
||||||
// All this mess enforces us to load (and unpack if needed) the file to a
|
// All this mess enforces us to load (and unpack if needed) the file to a
|
||||||
// temporary 32k buffer before actually decoding it.
|
// temporary 32k buffer before actually decoding it.
|
||||||
|
|
||||||
// 1) Seek for a palette
|
// 1) Seek for a palette
|
||||||
// 2) If palette found get screenmode from there, else ask user
|
// 2) If palette found get screenmode from there, else ask user
|
||||||
// 3) ask user for screen size (or register values)
|
// 3) ask user for screen size (or register values)
|
||||||
// 4) Load color data from palette (if found)
|
// 4) Load color data from palette (if found)
|
||||||
// 5) Close palette
|
// 5) Close palette
|
||||||
// 6) Open the file
|
// 6) Open the file
|
||||||
// 7) Run around the screen to untangle the pixeldata
|
// 7) Run around the screen to untangle the pixeldata
|
||||||
// 8) Close the file
|
// 8) Close the file
|
||||||
}
|
}
|
||||||
|
|
||||||
void Save_SCR(T_IO_Context * context)
|
void Save_SCR(T_IO_Context * context)
|
||||||
{
|
{
|
||||||
// TODO : Add possibility to set R9, R12, R13 values
|
// TODO : Add possibility to set R9, R12, R13 values
|
||||||
// TODO : Add OCP packing support
|
// TODO : Add OCP packing support
|
||||||
// TODO : Add possibility to include AMSDOS header, with proper loading
|
// TODO : Add possibility to include AMSDOS header, with proper loading
|
||||||
// address guessed from r12/r13 values.
|
// address guessed from r12/r13 values.
|
||||||
|
|
||||||
unsigned char* output;
|
unsigned char* output;
|
||||||
unsigned long outsize;
|
unsigned long outsize;
|
||||||
unsigned char r1;
|
unsigned char r1;
|
||||||
int cpc_mode;
|
int cpc_mode;
|
||||||
FILE* file;
|
FILE* file;
|
||||||
char filename[MAX_PATH_CHARACTERS];
|
char filename[MAX_PATH_CHARACTERS];
|
||||||
|
|
||||||
Get_full_filename(filename, context->File_name, context->File_directory);
|
Get_full_filename(filename, context->File_name, context->File_directory);
|
||||||
|
|
||||||
|
|
||||||
switch(Pixel_ratio)
|
switch(Pixel_ratio)
|
||||||
{
|
{
|
||||||
case PIXEL_WIDE:
|
case PIXEL_WIDE:
|
||||||
case PIXEL_WIDE2:
|
case PIXEL_WIDE2:
|
||||||
cpc_mode = 0;
|
cpc_mode = 0;
|
||||||
break;
|
break;
|
||||||
case PIXEL_TALL:
|
case PIXEL_TALL:
|
||||||
case PIXEL_TALL2:
|
case PIXEL_TALL2:
|
||||||
cpc_mode = 2;
|
cpc_mode = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
cpc_mode = 1;
|
cpc_mode = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
output = raw2crtc(context->Width,context->Height,cpc_mode,7,&outsize,&r1,0,0);
|
output = raw2crtc(context->Width,context->Height,cpc_mode,7,&outsize,&r1,0,0);
|
||||||
|
|
||||||
file = fopen(filename,"wb");
|
file = fopen(filename,"wb");
|
||||||
Write_bytes(file, output, outsize);
|
Write_bytes(file, output, outsize);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
|
||||||
free (output);
|
free (output);
|
||||||
output = NULL;
|
output = NULL;
|
||||||
|
|
||||||
File_error = 0;
|
File_error = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
274
op_c.c
274
op_c.c
@ -188,17 +188,17 @@ T_Conversion_table * CT_new(int nbb_r,int nbb_g,int nbb_b)
|
|||||||
|
|
||||||
// Calculate the others
|
// Calculate the others
|
||||||
|
|
||||||
// Value ranges (max value actually)
|
// Value ranges (max value actually)
|
||||||
n->rng_r=(1<<nbb_r);
|
n->rng_r=(1<<nbb_r);
|
||||||
n->rng_g=(1<<nbb_g);
|
n->rng_g=(1<<nbb_g);
|
||||||
n->rng_b=(1<<nbb_b);
|
n->rng_b=(1<<nbb_b);
|
||||||
|
|
||||||
// Shifts
|
// Shifts
|
||||||
n->dec_r=nbb_g+nbb_b;
|
n->dec_r=nbb_g+nbb_b;
|
||||||
n->dec_g=nbb_b;
|
n->dec_g=nbb_b;
|
||||||
n->dec_b=0;
|
n->dec_b=0;
|
||||||
|
|
||||||
// Reductions (how many bits are lost)
|
// Reductions (how many bits are lost)
|
||||||
n->red_r=8-nbb_r;
|
n->red_r=8-nbb_r;
|
||||||
n->red_g=8-nbb_g;
|
n->red_g=8-nbb_g;
|
||||||
n->red_b=8-nbb_b;
|
n->red_b=8-nbb_b;
|
||||||
@ -550,7 +550,7 @@ ENDCRUSH:
|
|||||||
/// Split a cluster on its longest axis.
|
/// Split a cluster on its longest axis.
|
||||||
/// c = source cluster, c1, c2 = output after split
|
/// c = source cluster, c1, c2 = output after split
|
||||||
void Cluster_split(T_Cluster * c, T_Cluster * c1, T_Cluster * c2, int hue,
|
void Cluster_split(T_Cluster * c, T_Cluster * c1, T_Cluster * c2, int hue,
|
||||||
T_Occurrence_table * to)
|
T_Occurrence_table * to)
|
||||||
{
|
{
|
||||||
int limit;
|
int limit;
|
||||||
int cumul;
|
int cumul;
|
||||||
@ -561,7 +561,7 @@ void Cluster_split(T_Cluster * c, T_Cluster * c1, T_Cluster * c2, int hue,
|
|||||||
cumul = 0;
|
cumul = 0;
|
||||||
if (hue == 0) // split on red
|
if (hue == 0) // split on red
|
||||||
{
|
{
|
||||||
// Run over the cluster until we reach the requested number of pixels
|
// Run over the cluster until we reach the requested number of pixels
|
||||||
for (r = c->rmin<<16; r<=c->rmax<<16; r+=1<<16)
|
for (r = c->rmin<<16; r<=c->rmax<<16; r+=1<<16)
|
||||||
{
|
{
|
||||||
for (g = c->vmin<<8; g<=c->vmax<<8; g+=1<<8)
|
for (g = c->vmin<<8; g<=c->vmax<<8; g+=1<<8)
|
||||||
@ -582,9 +582,9 @@ void Cluster_split(T_Cluster * c, T_Cluster * c1, T_Cluster * c2, int hue,
|
|||||||
r>>=16;
|
r>>=16;
|
||||||
g>>=8;
|
g>>=8;
|
||||||
|
|
||||||
// We tried to split on red, but found half of the pixels with r = rmin
|
// We tried to split on red, but found half of the pixels with r = rmin
|
||||||
// so we enforce some split to happen anyway, instead of creating an empty
|
// so we enforce some split to happen anyway, instead of creating an empty
|
||||||
// c2 and c1 == c
|
// c2 and c1 == c
|
||||||
if (r==c->rmin)
|
if (r==c->rmin)
|
||||||
r++;
|
r++;
|
||||||
|
|
||||||
@ -724,15 +724,15 @@ void Cluster_compute_hue(T_Cluster * c,T_Occurrence_table * to)
|
|||||||
/*
|
/*
|
||||||
void CS_Check(T_Cluster_set* cs)
|
void CS_Check(T_Cluster_set* cs)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
T_Cluster* c = cs->clusters;
|
T_Cluster* c = cs->clusters;
|
||||||
for (i = cs->nb; i > 0; i--)
|
for (i = cs->nb; i > 0; i--)
|
||||||
{
|
{
|
||||||
assert( c != NULL);
|
assert( c != NULL);
|
||||||
c = c->next;
|
c = c->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(c == NULL);
|
assert(c == NULL);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -762,8 +762,8 @@ T_Cluster_set * CS_New(int nbmax, T_Occurrence_table * to)
|
|||||||
// Copy requested params
|
// Copy requested params
|
||||||
n->nb_max = OT_count_colors(to);
|
n->nb_max = OT_count_colors(to);
|
||||||
|
|
||||||
// If the number of colors asked is > 256, we ceil it because we know we
|
// If the number of colors asked is > 256, we ceil it because we know we
|
||||||
// don't want more
|
// don't want more
|
||||||
if (n->nb_max > nbmax)
|
if (n->nb_max > nbmax)
|
||||||
{
|
{
|
||||||
n->nb_max = nbmax;
|
n->nb_max = nbmax;
|
||||||
@ -787,14 +787,14 @@ T_Cluster_set * CS_New(int nbmax, T_Occurrence_table * to)
|
|||||||
/// Free a cluster set
|
/// Free a cluster set
|
||||||
void CS_Delete(T_Cluster_set * cs)
|
void CS_Delete(T_Cluster_set * cs)
|
||||||
{
|
{
|
||||||
T_Cluster* nxt;
|
T_Cluster* nxt;
|
||||||
while (cs->clusters != NULL)
|
while (cs->clusters != NULL)
|
||||||
{
|
{
|
||||||
nxt = cs->clusters->next;
|
nxt = cs->clusters->next;
|
||||||
free(cs->clusters);
|
free(cs->clusters);
|
||||||
cs->clusters = nxt;
|
cs->clusters = nxt;
|
||||||
}
|
}
|
||||||
free(cs);
|
free(cs);
|
||||||
cs = NULL;
|
cs = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -817,7 +817,7 @@ void CS_Get(T_Cluster_set * cs, T_Cluster * c)
|
|||||||
(current->bmin < current->bmax) )
|
(current->bmin < current->bmax) )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
prev = current;
|
prev = current;
|
||||||
|
|
||||||
} while((current = current -> next));
|
} while((current = current -> next));
|
||||||
|
|
||||||
@ -828,9 +828,9 @@ void CS_Get(T_Cluster_set * cs, T_Cluster * c)
|
|||||||
cs->nb--;
|
cs->nb--;
|
||||||
|
|
||||||
if(prev)
|
if(prev)
|
||||||
prev->next = current->next;
|
prev->next = current->next;
|
||||||
else
|
else
|
||||||
cs->clusters = current->next;
|
cs->clusters = current->next;
|
||||||
free(current);
|
free(current);
|
||||||
current = NULL;
|
current = NULL;
|
||||||
}
|
}
|
||||||
@ -845,8 +845,8 @@ void CS_Set(T_Cluster_set * cs,T_Cluster * c)
|
|||||||
// Search the first cluster that is smaller than ours (less pixels)
|
// Search the first cluster that is smaller than ours (less pixels)
|
||||||
while (current && current->occurences > c->occurences)
|
while (current && current->occurences > c->occurences)
|
||||||
{
|
{
|
||||||
prev = current;
|
prev = current;
|
||||||
current = current->next;
|
current = current->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now insert our cluster just before the one we found
|
// Now insert our cluster just before the one we found
|
||||||
@ -885,12 +885,12 @@ void CS_Generate(T_Cluster_set * cs, T_Occurrence_table * to)
|
|||||||
// Split it
|
// Split it
|
||||||
Cluster_split(¤t, &Nouveau1, &Nouveau2, current.plus_large, to);
|
Cluster_split(¤t, &Nouveau1, &Nouveau2, current.plus_large, to);
|
||||||
|
|
||||||
// Pack the 2 new clusters (the split may leave some empty space between the
|
// Pack the 2 new clusters (the split may leave some empty space between the
|
||||||
// box border and the first actual pixel)
|
// box border and the first actual pixel)
|
||||||
Cluster_pack(&Nouveau1, to);
|
Cluster_pack(&Nouveau1, to);
|
||||||
Cluster_pack(&Nouveau2, to);
|
Cluster_pack(&Nouveau2, to);
|
||||||
|
|
||||||
// Put them back in the list
|
// Put them back in the list
|
||||||
CS_Set(cs,&Nouveau1);
|
CS_Set(cs,&Nouveau1);
|
||||||
CS_Set(cs,&Nouveau2);
|
CS_Set(cs,&Nouveau2);
|
||||||
|
|
||||||
@ -914,69 +914,69 @@ void CS_Compute_colors(T_Cluster_set * cs, T_Occurrence_table * to)
|
|||||||
/// Sort the clusters by chrominance value
|
/// Sort the clusters by chrominance value
|
||||||
void CS_Sort_by_chrominance(T_Cluster_set * cs)
|
void CS_Sort_by_chrominance(T_Cluster_set * cs)
|
||||||
{
|
{
|
||||||
T_Cluster* nc;
|
T_Cluster* nc;
|
||||||
T_Cluster* prev = NULL;
|
T_Cluster* prev = NULL;
|
||||||
T_Cluster* place;
|
T_Cluster* place;
|
||||||
T_Cluster* newlist = NULL;
|
T_Cluster* newlist = NULL;
|
||||||
|
|
||||||
while (cs->clusters)
|
while (cs->clusters)
|
||||||
{
|
{
|
||||||
// Remove the first cluster from the original list
|
// Remove the first cluster from the original list
|
||||||
nc = cs->clusters;
|
nc = cs->clusters;
|
||||||
cs->clusters = cs->clusters->next;
|
cs->clusters = cs->clusters->next;
|
||||||
|
|
||||||
// Find his position in the new list
|
// Find his position in the new list
|
||||||
for (place = newlist; place != NULL; place = place->next)
|
for (place = newlist; place != NULL; place = place->next)
|
||||||
{
|
{
|
||||||
if (place->h > nc->h) break;
|
if (place->h > nc->h) break;
|
||||||
prev = place;
|
prev = place;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Chain it there
|
// Chain it there
|
||||||
nc->next = place;
|
nc->next = place;
|
||||||
if (prev) prev->next = nc;
|
if (prev) prev->next = nc;
|
||||||
else newlist = nc;
|
else newlist = nc;
|
||||||
|
|
||||||
prev = NULL;
|
prev = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Put the new list back in place
|
// Put the new list back in place
|
||||||
cs->clusters = newlist;
|
cs->clusters = newlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Sort the clusters by luminance value
|
/// Sort the clusters by luminance value
|
||||||
void CS_Sort_by_luminance(T_Cluster_set * cs)
|
void CS_Sort_by_luminance(T_Cluster_set * cs)
|
||||||
{
|
{
|
||||||
T_Cluster* nc;
|
T_Cluster* nc;
|
||||||
T_Cluster* prev = NULL;
|
T_Cluster* prev = NULL;
|
||||||
T_Cluster* place;
|
T_Cluster* place;
|
||||||
T_Cluster* newlist = NULL;
|
T_Cluster* newlist = NULL;
|
||||||
|
|
||||||
while (cs->clusters)
|
while (cs->clusters)
|
||||||
{
|
{
|
||||||
// Remove the first cluster from the original list
|
// Remove the first cluster from the original list
|
||||||
nc = cs->clusters;
|
nc = cs->clusters;
|
||||||
cs->clusters = cs->clusters->next;
|
cs->clusters = cs->clusters->next;
|
||||||
|
|
||||||
// Find its position in the new list
|
// Find its position in the new list
|
||||||
for (place = newlist; place != NULL; place = place->next)
|
for (place = newlist; place != NULL; place = place->next)
|
||||||
{
|
{
|
||||||
if (place->l > nc->l) break;
|
if (place->l > nc->l) break;
|
||||||
prev = place;
|
prev = place;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Chain it there
|
// Chain it there
|
||||||
nc->next = place;
|
nc->next = place;
|
||||||
if (prev) prev->next = nc;
|
if (prev) prev->next = nc;
|
||||||
else newlist = nc;
|
else newlist = nc;
|
||||||
|
|
||||||
// reset prev pointer
|
// reset prev pointer
|
||||||
prev = NULL;
|
prev = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Put the new list back in place
|
// Put the new list back in place
|
||||||
cs->clusters = newlist;
|
cs->clusters = newlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -997,7 +997,7 @@ void CS_Generate_color_table_and_palette(T_Cluster_set * cs,T_Conversion_table *
|
|||||||
for (g=current->Gmin;g<=current->Vmax;g++)
|
for (g=current->Gmin;g<=current->Vmax;g++)
|
||||||
for (b=current->Bmin;b<=current->Bmax;b++)
|
for (b=current->Bmin;b<=current->Bmax;b++)
|
||||||
CT_set(tc,r,g,b,index);
|
CT_set(tc,r,g,b,index);
|
||||||
current = current->next;
|
current = current->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1053,62 +1053,62 @@ void GS_Generate(T_Gradient_set * ds,T_Cluster_set * cs)
|
|||||||
int best_gradient; // Meilleur d‚grad‚
|
int best_gradient; // Meilleur d‚grad‚
|
||||||
int best_diff; // Meilleure diff‚rence de chrominance
|
int best_diff; // Meilleure diff‚rence de chrominance
|
||||||
int diff; // difference de chrominance courante
|
int diff; // difference de chrominance courante
|
||||||
T_Cluster * current = cs->clusters;
|
T_Cluster * current = cs->clusters;
|
||||||
|
|
||||||
// Pour chacun des clusters … traiter
|
// Pour chacun des clusters … traiter
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
// On recherche le d‚grad‚ le plus proche de la chrominance du cluster
|
// On recherche le d‚grad‚ le plus proche de la chrominance du cluster
|
||||||
best_gradient=-1;
|
best_gradient=-1;
|
||||||
best_diff=99999999;
|
best_diff=99999999;
|
||||||
for (id=0;id<ds->nb;id++)
|
for (id=0;id<ds->nb;id++)
|
||||||
{
|
{
|
||||||
diff=abs(current->h - ds->gradients[id].hue);
|
diff=abs(current->h - ds->gradients[id].hue);
|
||||||
if ((best_diff>diff) && (diff<16))
|
if ((best_diff>diff) && (diff<16))
|
||||||
{
|
{
|
||||||
best_gradient=id;
|
best_gradient=id;
|
||||||
best_diff=diff;
|
best_diff=diff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Si on a trouv‚ un d‚grad‚ dans lequel inclure le cluster
|
// Si on a trouv‚ un d‚grad‚ dans lequel inclure le cluster
|
||||||
if (best_gradient!=-1)
|
if (best_gradient!=-1)
|
||||||
{
|
{
|
||||||
// On met … jour le d‚grad‚
|
// On met … jour le d‚grad‚
|
||||||
if (current->h < ds->gradients[best_gradient].min)
|
if (current->h < ds->gradients[best_gradient].min)
|
||||||
ds->gradients[best_gradient].min=current->h;
|
ds->gradients[best_gradient].min=current->h;
|
||||||
if (current->h > ds->gradients[best_gradient].max)
|
if (current->h > ds->gradients[best_gradient].max)
|
||||||
ds->gradients[best_gradient].max=current->h;
|
ds->gradients[best_gradient].max=current->h;
|
||||||
ds->gradients[best_gradient].hue=((ds->gradients[best_gradient].hue*
|
ds->gradients[best_gradient].hue=((ds->gradients[best_gradient].hue*
|
||||||
ds->gradients[best_gradient].nb_colors)
|
ds->gradients[best_gradient].nb_colors)
|
||||||
+current->h)
|
+current->h)
|
||||||
/(ds->gradients[best_gradient].nb_colors+1);
|
/(ds->gradients[best_gradient].nb_colors+1);
|
||||||
ds->gradients[best_gradient].nb_colors++;
|
ds->gradients[best_gradient].nb_colors++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// On cr‚e un nouveau d‚grad‚
|
// On cr‚e un nouveau d‚grad‚
|
||||||
best_gradient=ds->nb;
|
best_gradient=ds->nb;
|
||||||
ds->gradients[best_gradient].nb_colors=1;
|
ds->gradients[best_gradient].nb_colors=1;
|
||||||
ds->gradients[best_gradient].min=current->h;
|
ds->gradients[best_gradient].min=current->h;
|
||||||
ds->gradients[best_gradient].max=current->h;
|
ds->gradients[best_gradient].max=current->h;
|
||||||
ds->gradients[best_gradient].hue=current->h;
|
ds->gradients[best_gradient].hue=current->h;
|
||||||
ds->nb++;
|
ds->nb++;
|
||||||
}
|
}
|
||||||
current->h=best_gradient;
|
current->h=best_gradient;
|
||||||
} while((current = current->next));
|
} while((current = current->next));
|
||||||
|
|
||||||
// On redistribue les valeurs dans les clusters
|
// On redistribue les valeurs dans les clusters
|
||||||
current = cs -> clusters;
|
current = cs -> clusters;
|
||||||
do
|
do
|
||||||
current->h=ds->gradients[current->h].hue;
|
current->h=ds->gradients[current->h].hue;
|
||||||
while((current = current ->next));
|
while((current = current ->next));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Compute best palette for given picture.
|
/// Compute best palette for given picture.
|
||||||
T_Conversion_table * Optimize_palette(T_Bitmap24B image, int size,
|
T_Conversion_table * Optimize_palette(T_Bitmap24B image, int size,
|
||||||
T_Components * palette, int r, int g, int b)
|
T_Components * palette, int r, int g, int b)
|
||||||
{
|
{
|
||||||
T_Occurrence_table * to;
|
T_Occurrence_table * to;
|
||||||
T_Conversion_table * tc;
|
T_Conversion_table * tc;
|
||||||
@ -1120,13 +1120,13 @@ T_Conversion_table * Optimize_palette(T_Bitmap24B image, int size,
|
|||||||
|
|
||||||
to = OT_new(r, g, b);
|
to = OT_new(r, g, b);
|
||||||
if (to == NULL)
|
if (to == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
tc = CT_new(r, g, b);
|
tc = CT_new(r, g, b);
|
||||||
if (tc == NULL)
|
if (tc == NULL)
|
||||||
{
|
{
|
||||||
OT_delete(to);
|
OT_delete(to);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Count pixels for each color
|
// Count pixels for each color
|
||||||
@ -1137,7 +1137,7 @@ T_Conversion_table * Optimize_palette(T_Bitmap24B image, int size,
|
|||||||
{
|
{
|
||||||
CT_delete(tc);
|
CT_delete(tc);
|
||||||
OT_delete(to);
|
OT_delete(to);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
//CS_Check(cs);
|
//CS_Check(cs);
|
||||||
// Ok, everything was allocated
|
// Ok, everything was allocated
|
||||||
@ -1153,8 +1153,8 @@ T_Conversion_table * Optimize_palette(T_Bitmap24B image, int size,
|
|||||||
ds = GS_New(cs);
|
ds = GS_New(cs);
|
||||||
if (ds!= NULL)
|
if (ds!= NULL)
|
||||||
{
|
{
|
||||||
GS_Generate(ds, cs);
|
GS_Generate(ds, cs);
|
||||||
GS_Delete(ds);
|
GS_Delete(ds);
|
||||||
}
|
}
|
||||||
// Sort the clusters on L and H to get a nice palette
|
// Sort the clusters on L and H to get a nice palette
|
||||||
CS_Sort_by_luminance(cs);
|
CS_Sort_by_luminance(cs);
|
||||||
@ -1286,8 +1286,8 @@ void Convert_24b_bitmap_to_256_Floyd_Steinberg(T_Bitmap256 dest,T_Bitmap24B sour
|
|||||||
|
|
||||||
/// Converts from 24b to 256c without dithering, using given conversion table
|
/// Converts from 24b to 256c without dithering, using given conversion table
|
||||||
void Convert_24b_bitmap_to_256_nearest_neighbor(T_Bitmap256 dest,
|
void Convert_24b_bitmap_to_256_nearest_neighbor(T_Bitmap256 dest,
|
||||||
T_Bitmap24B source, int width, int height, __attribute__((unused)) T_Components * palette,
|
T_Bitmap24B source, int width, int height, __attribute__((unused)) T_Components * palette,
|
||||||
T_Conversion_table * tc)
|
T_Conversion_table * tc)
|
||||||
{
|
{
|
||||||
T_Bitmap24B current;
|
T_Bitmap24B current;
|
||||||
T_Bitmap256 d;
|
T_Bitmap256 d;
|
||||||
@ -1310,7 +1310,7 @@ void Convert_24b_bitmap_to_256_nearest_neighbor(T_Bitmap256 dest,
|
|||||||
green = current->G;
|
green = current->G;
|
||||||
blue = current->B;
|
blue = current->B;
|
||||||
// Cherche la couleur correspondant dans la palette et la range dans
|
// Cherche la couleur correspondant dans la palette et la range dans
|
||||||
// l'image de destination
|
// l'image de destination
|
||||||
*d = CT_get(tc, red, green, blue);
|
*d = CT_get(tc, red, green, blue);
|
||||||
|
|
||||||
// On passe au pixel suivant :
|
// On passe au pixel suivant :
|
||||||
|
|||||||
128
operatio.c
128
operatio.c
@ -299,14 +299,14 @@ void Freehand_mode2_1_2(void)
|
|||||||
if ( (start_x!=Paintbrush_X) || (start_y!=Paintbrush_Y) )
|
if ( (start_x!=Paintbrush_X) || (start_y!=Paintbrush_Y) )
|
||||||
{
|
{
|
||||||
Print_coordinates();
|
Print_coordinates();
|
||||||
if (SDL_GetTicks()>Airbrush_next_time)
|
if (SDL_GetTicks()>Airbrush_next_time)
|
||||||
{
|
{
|
||||||
Airbrush_next_time+=Airbrush_delay*10;
|
Airbrush_next_time+=Airbrush_delay*10;
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
// On affiche définitivement le pinceau
|
// On affiche définitivement le pinceau
|
||||||
Display_paintbrush(Paintbrush_X,Paintbrush_Y,Fore_color,0);
|
Display_paintbrush(Paintbrush_X,Paintbrush_Y,Fore_color,0);
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Operation_push(Paintbrush_X);
|
Operation_push(Paintbrush_X);
|
||||||
@ -328,9 +328,9 @@ void Freehand_mode2_2_0(void)
|
|||||||
Operation_push(Paintbrush_X);
|
Operation_push(Paintbrush_X);
|
||||||
Operation_push(Paintbrush_Y);
|
Operation_push(Paintbrush_Y);
|
||||||
Print_coordinates();
|
Print_coordinates();
|
||||||
Airbrush_next_time = SDL_GetTicks() + Airbrush_delay*10;
|
Airbrush_next_time = SDL_GetTicks() + Airbrush_delay*10;
|
||||||
// On affiche définitivement le pinceau
|
// On affiche définitivement le pinceau
|
||||||
Display_paintbrush(Paintbrush_X,Paintbrush_Y,Back_color,0);
|
Display_paintbrush(Paintbrush_X,Paintbrush_Y,Back_color,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -350,14 +350,14 @@ void Freehand_mode2_2_2(void)
|
|||||||
if ( (start_x!=Paintbrush_X) || (start_y!=Paintbrush_Y) )
|
if ( (start_x!=Paintbrush_X) || (start_y!=Paintbrush_Y) )
|
||||||
{
|
{
|
||||||
Print_coordinates();
|
Print_coordinates();
|
||||||
if (SDL_GetTicks()>Airbrush_next_time)
|
if (SDL_GetTicks()>Airbrush_next_time)
|
||||||
{
|
{
|
||||||
Airbrush_next_time+=Airbrush_delay*10;
|
Airbrush_next_time+=Airbrush_delay*10;
|
||||||
Hide_cursor();
|
Hide_cursor();
|
||||||
// On affiche définitivement le pinceau
|
// On affiche définitivement le pinceau
|
||||||
Display_paintbrush(Paintbrush_X,Paintbrush_Y,Back_color,0);
|
Display_paintbrush(Paintbrush_X,Paintbrush_Y,Back_color,0);
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Operation_push(Paintbrush_X);
|
Operation_push(Paintbrush_X);
|
||||||
@ -3425,60 +3425,60 @@ void Grad_rectangle_0_5(void)
|
|||||||
|| Min(ray, rby) > Main_image_height // Rectangle below picture
|
|| Min(ray, rby) > Main_image_height // Rectangle below picture
|
||||||
|| Min(ray, rby) - 1 - Main_offset_Y > Menu_Y ) // Rectangle below viewport
|
|| Min(ray, rby) - 1 - Main_offset_Y > Menu_Y ) // Rectangle below viewport
|
||||||
{
|
{
|
||||||
Operation_pop(&rby); // reset the stack
|
Operation_pop(&rby); // reset the stack
|
||||||
return; // cancel the operation
|
return; // cancel the operation
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle clipping
|
// Handle clipping
|
||||||
if (Max(rax, rbx)-Main_offset_X > Min(Main_image_width,
|
if (Max(rax, rbx)-Main_offset_X > Min(Main_image_width,
|
||||||
Main_magnifier_mode?Main_separator_position:Screen_width))
|
Main_magnifier_mode?Main_separator_position:Screen_width))
|
||||||
{
|
{
|
||||||
offset_width = Max(rax, rbx) - Min(Main_image_width,
|
offset_width = Max(rax, rbx) - Min(Main_image_width,
|
||||||
Main_magnifier_mode?Main_separator_position:Screen_width);
|
Main_magnifier_mode?Main_separator_position:Screen_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Max(ray, rby)-Main_offset_Y > Min(Main_image_height, Menu_Y))
|
if (Max(ray, rby)-Main_offset_Y > Min(Main_image_height, Menu_Y))
|
||||||
offset_height = Max(ray, rby) - Min(Main_image_height, Menu_Y);
|
offset_height = Max(ray, rby) - Min(Main_image_height, Menu_Y);
|
||||||
|
|
||||||
// Dessin dans la zone de dessin normale
|
// Dessin dans la zone de dessin normale
|
||||||
Horizontal_XOR_line(Min(rax, rbx)-Main_offset_X,
|
Horizontal_XOR_line(Min(rax, rbx)-Main_offset_X,
|
||||||
Min(ray, rby) - Main_offset_Y, width - offset_width);
|
Min(ray, rby) - Main_offset_Y, width - offset_width);
|
||||||
|
|
||||||
// If not, this line is out of the picture so there is no need to draw it
|
// If not, this line is out of the picture so there is no need to draw it
|
||||||
if (offset_height == 0 || Max(ray, rby) - 1 > Menu_Y + Main_offset_Y )
|
if (offset_height == 0 || Max(ray, rby) - 1 > Menu_Y + Main_offset_Y )
|
||||||
{
|
{
|
||||||
Horizontal_XOR_line(Min(rax, rbx) - Main_offset_X, Max(ray, rby) - 1
|
Horizontal_XOR_line(Min(rax, rbx) - Main_offset_X, Max(ray, rby) - 1
|
||||||
- Main_offset_Y, width - offset_width);
|
- Main_offset_Y, width - offset_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (height > offset_height) {
|
if (height > offset_height) {
|
||||||
Vertical_XOR_line(Min(rax, rbx)-Main_offset_X, Min(ray, rby)
|
Vertical_XOR_line(Min(rax, rbx)-Main_offset_X, Min(ray, rby)
|
||||||
- Main_offset_Y, height - offset_height);
|
- Main_offset_Y, height - offset_height);
|
||||||
|
|
||||||
if (offset_width == 0)
|
if (offset_width == 0)
|
||||||
{
|
{
|
||||||
Vertical_XOR_line(Max(rax, rbx) - 1 - Main_offset_X, Min(ray, rby)
|
Vertical_XOR_line(Max(rax, rbx) - 1 - Main_offset_X, Min(ray, rby)
|
||||||
- Main_offset_Y, height - offset_height);
|
- Main_offset_Y, height - offset_height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Update_rect(Min(rax, rbx) - Main_offset_X, Min(ray, rby) - Main_offset_Y,
|
Update_rect(Min(rax, rbx) - Main_offset_X, Min(ray, rby) - Main_offset_Y,
|
||||||
width + 1 - offset_width, height + 1 - offset_height);
|
width + 1 - offset_width, height + 1 - offset_height);
|
||||||
|
|
||||||
// Dessin dans la zone zoomée
|
// Dessin dans la zone zoomée
|
||||||
if (Main_magnifier_mode && Min(rax, rbx) <= Limit_right_zoom
|
if (Main_magnifier_mode && Min(rax, rbx) <= Limit_right_zoom
|
||||||
&& Max(rax, rbx) > Limit_left_zoom
|
&& Max(rax, rbx) > Limit_left_zoom
|
||||||
&& Min(ray, rby) <= Limit_bottom_zoom
|
&& Min(ray, rby) <= Limit_bottom_zoom
|
||||||
&& Max(ray, rby) > Limit_top_zoom )
|
&& Max(ray, rby) > Limit_top_zoom )
|
||||||
{
|
{
|
||||||
offset_width = 0;
|
offset_width = 0;
|
||||||
offset_height = 0;
|
offset_height = 0;
|
||||||
|
|
||||||
if (Min(rax, rbx)<=Limit_left_zoom) // On dépasse du zoom à gauche
|
if (Min(rax, rbx)<=Limit_left_zoom) // On dépasse du zoom à gauche
|
||||||
{
|
{
|
||||||
offset_width += Limit_left_zoom - Min(rax, rbx);
|
offset_width += Limit_left_zoom - Min(rax, rbx);
|
||||||
offset_left = Limit_left_zoom;
|
offset_left = Limit_left_zoom;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Max(rax,rbx)>Limit_right_zoom) // On dépasse du zoom à droite
|
if(Max(rax,rbx)>Limit_right_zoom) // On dépasse du zoom à droite
|
||||||
offset_width += Max(rax,rbx) - Limit_right_zoom - 1;
|
offset_width += Max(rax,rbx) - Limit_right_zoom - 1;
|
||||||
@ -3604,8 +3604,8 @@ void Grad_rectangle_12_7(void)
|
|||||||
|
|
||||||
// Dessin dans la zone zoomée
|
// Dessin dans la zone zoomée
|
||||||
if (Main_magnifier_mode && Min(rax, rbx) <= Limit_right_zoom
|
if (Main_magnifier_mode && Min(rax, rbx) <= Limit_right_zoom
|
||||||
&& Max(rax, rbx)>Limit_left_zoom && Min(ray, rby) <= Limit_bottom_zoom
|
&& Max(rax, rbx)>Limit_left_zoom && Min(ray, rby) <= Limit_bottom_zoom
|
||||||
&& Max(ray,rby)>Limit_top_zoom )
|
&& Max(ray,rby)>Limit_top_zoom )
|
||||||
{
|
{
|
||||||
offset_width = 0;
|
offset_width = 0;
|
||||||
offset_height=0;
|
offset_height=0;
|
||||||
@ -3758,10 +3758,10 @@ void Grad_rectangle_0_9(void)
|
|||||||
|
|
||||||
// Dessin dans la zone zoomée
|
// Dessin dans la zone zoomée
|
||||||
if (Main_magnifier_mode
|
if (Main_magnifier_mode
|
||||||
&& Min(rect_start_x, rect_end_x) <= Limit_right_zoom
|
&& Min(rect_start_x, rect_end_x) <= Limit_right_zoom
|
||||||
&& Max(rect_start_x, rect_end_x) > Limit_left_zoom
|
&& Max(rect_start_x, rect_end_x) > Limit_left_zoom
|
||||||
&& Min(rect_start_y, rect_end_y) <= Limit_bottom_zoom
|
&& Min(rect_start_y, rect_end_y) <= Limit_bottom_zoom
|
||||||
&& Max(rect_start_y, rect_end_y) > Limit_top_zoom )
|
&& Max(rect_start_y, rect_end_y) > Limit_top_zoom )
|
||||||
{
|
{
|
||||||
offset_width = 0;
|
offset_width = 0;
|
||||||
offset_height=0;
|
offset_height=0;
|
||||||
|
|||||||
22
readini.c
22
readini.c
@ -715,15 +715,15 @@ int Load_INI(T_Config * conf)
|
|||||||
// Do that only if the first mode is actually windowed (not the case on gp2x for example)
|
// Do that only if the first mode is actually windowed (not the case on gp2x for example)
|
||||||
if(Video_mode[0].Fullscreen==0)
|
if(Video_mode[0].Fullscreen==0)
|
||||||
{
|
{
|
||||||
Video_mode[0].Width = 640;
|
Video_mode[0].Width = 640;
|
||||||
Video_mode[0].Height = 480;
|
Video_mode[0].Height = 480;
|
||||||
if (!Load_INI_get_values (file,buffer,"Default_window_size",2,values))
|
if (!Load_INI_get_values (file,buffer,"Default_window_size",2,values))
|
||||||
{
|
{
|
||||||
if ((values[0]>=320))
|
if ((values[0]>=320))
|
||||||
Video_mode[0].Width = values[0];
|
Video_mode[0].Width = values[0];
|
||||||
if ((values[1]>=200))
|
if ((values[1]>=200))
|
||||||
Video_mode[0].Height = values[1];
|
Video_mode[0].Height = values[1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
conf->Mouse_merge_movement=100;
|
conf->Mouse_merge_movement=100;
|
||||||
@ -823,14 +823,14 @@ int Load_INI(T_Config * conf)
|
|||||||
// Optional, name of skin file. (>2.0)
|
// Optional, name of skin file. (>2.0)
|
||||||
if(!Load_INI_get_string(file,buffer,"Skin_file",value_label,1))
|
if(!Load_INI_get_string(file,buffer,"Skin_file",value_label,1))
|
||||||
{
|
{
|
||||||
conf->Skin_file = strdup(value_label);
|
conf->Skin_file = strdup(value_label);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
conf->Skin_file = strdup("skin_modern.png");
|
conf->Skin_file = strdup("skin_modern.png");
|
||||||
|
|
||||||
// Optional, name of font file. (>2.0)
|
// Optional, name of font file. (>2.0)
|
||||||
if(!Load_INI_get_string(file,buffer,"Font_file",value_label,1))
|
if(!Load_INI_get_string(file,buffer,"Font_file",value_label,1))
|
||||||
conf->Font_file = strdup(value_label);
|
conf->Font_file = strdup(value_label);
|
||||||
else
|
else
|
||||||
conf->Font_file = strdup("font_Classic.png");
|
conf->Font_file = strdup("font_Classic.png");
|
||||||
|
|
||||||
|
|||||||
4
setup.c
4
setup.c
@ -118,8 +118,8 @@ void Set_config_directory(const char * program_dir, char * config_dir)
|
|||||||
strcpy(config_dir,"PROGDIR:");
|
strcpy(config_dir,"PROGDIR:");
|
||||||
// GP2X
|
// GP2X
|
||||||
#elif defined(__GP2X__)
|
#elif defined(__GP2X__)
|
||||||
// On the GP2X, the program is installed to the sdcard, and we don't want to mess with the system tree which is
|
// On the GP2X, the program is installed to the sdcard, and we don't want to mess with the system tree which is
|
||||||
// on an internal flash chip. So, keep these settings locals.
|
// on an internal flash chip. So, keep these settings locals.
|
||||||
strcpy(config_dir,program_dir);
|
strcpy(config_dir,program_dir);
|
||||||
#else
|
#else
|
||||||
char filename[MAX_PATH_CHARACTERS];
|
char filename[MAX_PATH_CHARACTERS];
|
||||||
|
|||||||
12
shade.c
12
shade.c
@ -617,12 +617,12 @@ int Menu_shade(void)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5: // Ok
|
case 5: // Ok
|
||||||
if (selection_start == selection_end && Shade_list[Shade_current].List[selection_start] > 0)
|
if (selection_start == selection_end && Shade_list[Shade_current].List[selection_start] > 0)
|
||||||
Set_fore_color(Shade_list[Shade_current].List[selection_start]);
|
Set_fore_color(Shade_list[Shade_current].List[selection_start]);
|
||||||
else if (first_color == last_color)
|
else if (first_color == last_color)
|
||||||
Set_fore_color(first_color);
|
Set_fore_color(first_color);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6 : // Copy
|
case 6 : // Copy
|
||||||
memcpy(buffer,Shade_list[Shade_current].List,512*sizeof(word));
|
memcpy(buffer,Shade_list[Shade_current].List,512*sizeof(word));
|
||||||
|
|||||||
2
struct.h
2
struct.h
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
// POSIX calls it strcasecmp, Windows uses stricmp... no ANSI standard.
|
// POSIX calls it strcasecmp, Windows uses stricmp... no ANSI standard.
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#define strcasecmp stricmp
|
#define strcasecmp stricmp
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Definition of the base data types
|
// Definition of the base data types
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user