Add "Set Palette" option in the 8bit menu

This commit is contained in:
Thomas Bernard 2018-11-20 10:52:37 +01:00
parent 0439831a1d
commit 1e6f0175da
No known key found for this signature in database
GPG Key ID: 0FF11B67A5C0863C
5 changed files with 116 additions and 30 deletions

View File

@ -42,6 +42,7 @@
#include "struct.h"
#include "windows.h"
#include "tiles.h"
#include "oldies.h"
//---------- Menu dans lequel on tagge des couleurs (genre Stencil) ----------
void Menu_tag_colors(char * window_title, byte * table, byte * mode, byte can_cancel, const char *help_section, word close_shortcut)
@ -213,6 +214,7 @@ void Button_Constraint_mode(void)
void Button_Constraint_menu(void)
{
unsigned int i;
int set_palette = 1;
short clicked_button;
T_Dropdown_button* dropdown;
const char * label;
@ -229,12 +231,15 @@ void Button_Constraint_menu(void)
{IMAGE_MODE_EGX2, "EGX2 (CPC)", "Alternate Mode1/Mode2 "},
{IMAGE_MODE_MODE5, "Mode 5 (CPC)", "Mode5 "},
{IMAGE_MODE_RASTER, "Rasters (CPC)", "CPC Rasters "},
{IMAGE_MODE_C64HIRES,"C64 HiRes", "2 colors per 8x8 block"},
{IMAGE_MODE_C64MULTI,"C64 Multicolor","4 colors per 4x1 block"},
{IMAGE_MODE_C64FLI, "C64 FLI", "improved multicolor "},
};
Open_window(194,79,"8-bit constraints");
Open_window(194,95,"8-bit constraints");
Window_set_normal_button(31,55,51,14,"Cancel",0,1,KEY_ESC); // 1
Window_set_normal_button(112,55,51,14,"OK" ,0,1,KEY_RETURN); // 2
Window_set_normal_button(31,71,51,14,"Cancel",0,1,KEY_ESC); // 1
Window_set_normal_button(112,71,51,14,"OK" ,0,1,KEY_RETURN); // 2
label = "Constraints";
summary = "";
@ -250,6 +255,9 @@ void Button_Constraint_menu(void)
Window_dropdown_add_item(dropdown, modes[i].mode, modes[i].label);
Print_in_window(10, 21+18, summary, MC_Dark, MC_Light);
Window_set_normal_button(10, 51, 14, 14, set_palette?"X":" ", 0, 1, KEY_p); // 4
Print_in_window(10+18, 51+3, "Set Palette", MC_Dark, MC_Light);
Update_window_area(0,0,Window_width, Window_height);
Display_cursor();
@ -273,6 +281,14 @@ void Button_Constraint_menu(void)
break;
}
}
else if (clicked_button == 4)
{
// palette
set_palette = !set_palette;
Hide_cursor();
Print_in_window(10+3, 51+3, set_palette?"X":" ", MC_Black, MC_Light);
Display_cursor();
}
}
while ( (clicked_button!=1) && (clicked_button!=2) );
@ -285,6 +301,33 @@ void Button_Constraint_menu(void)
if (Main.backups->Pages->Image_mode > IMAGE_MODE_ANIMATION)
Button_Constraint_mode(); // unactivate current mode
Button_Constraint_mode(); // activate selected Mode
if (set_palette)
{
switch (Selected_Constraint_Mode)
{
case IMAGE_MODE_ZX:
ZX_Spectrum_set_palette(Main.palette);
break;
//case IMAGE_MODE_THOMSON:
// ask TO7/70, MO5 or MO6 / TO8/TO9
case IMAGE_MODE_EGX:
case IMAGE_MODE_EGX2:
case IMAGE_MODE_MODE5:
case IMAGE_MODE_RASTER:
// TODO : CPC
break;
case IMAGE_MODE_C64HIRES:
case IMAGE_MODE_C64MULTI:
case IMAGE_MODE_C64FLI:
C64_set_palette(Main.palette);
break;
default:
break;
}
// Refresh palette
Set_palette(Main.palette);
//Compute_optimal_menu_colors(Main.palette); // I'm not sure this is needed
}
}
}
@ -624,7 +667,7 @@ void Button_Smooth_mode(void)
}
byte Smooth_default_matrices[4][3][3]=
static const byte Smooth_default_matrices[4][3][3]=
{
{ {1,2,1}, {2,4,2}, {1,2,1} },
{ {1,3,1}, {3,9,3}, {1,3,1} },

View File

@ -606,6 +606,7 @@ enum OPERATIONS
NB_OPERATIONS ///< Number of operations handled by the engine
};
/// Image drawing modes.
enum IMAGE_MODES
{
IMAGE_MODE_LAYERED=0, ///< Layered image
@ -617,6 +618,9 @@ enum IMAGE_MODES
IMAGE_MODE_EGX2, ///< CPC EGX2
IMAGE_MODE_MODE5, ///< CPC mode 5
IMAGE_MODE_RASTER, ///< CPC generic rasters
IMAGE_MODE_C64HIRES, ///< C64 HiRes
IMAGE_MODE_C64MULTI, ///< C64 Multicolor
IMAGE_MODE_C64FLI, ///< C64 Flexible Line Interpretation
};
/// Circle / Ellipse Modes

View File

@ -2679,25 +2679,6 @@ void Load_C64(T_IO_Context * context)
word load_addr;
enum c64_format loadFormat = F_invalid;
/// Set C64 Palette from http://www.pepto.de/projects/colorvic/
static const byte pal[48]={
0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF,
0x68, 0x37, 0x2B,
0x70, 0xA4, 0xB2,
0x6F, 0x3D, 0x86,
0x58, 0x8D, 0x43,
0x35, 0x28, 0x79,
0xB8, 0xC7, 0x6F,
0x6F, 0x4F, 0x25,
0x43, 0x39, 0x00,
0x9A, 0x67, 0x59,
0x44, 0x44, 0x44,
0x6C, 0x6C, 0x6C,
0x9A, 0xD2, 0x84,
0x6C, 0x5E, 0xB5,
0x95, 0x95, 0x95};
byte *file_buffer;
byte *bitmap, *screen_ram, *color_ram=NULL, *background=NULL; // Only pointers to existing data
word width, height=200;
@ -2952,13 +2933,9 @@ void Load_C64(T_IO_Context * context)
Pre_load(context, width, height, file_size, FORMAT_C64, context->Ratio, (loadFormat == F_bitmap) ? 1 : 4); // Do this as soon as you can
memcpy(context->Palette,pal,48); // this set the software palette for grafx2
// Transparent color "16" is a dark grey that is distinguishable
// from black, but darker than normal colors.
context->Palette[16].R=20;
context->Palette[16].G=20;
context->Palette[16].B=20;
if (Config.Clear_palette)
memset(context->Palette,0, sizeof(T_Palette));
C64_set_palette(context->Palette);
context->Transparent_color=16;
switch(loadFormat)

View File

@ -420,6 +420,48 @@ int C64_FLI_enforcer(void)
return 0;
}
void C64_set_palette(T_Components * palette)
{
/// Set C64 Palette from http://www.pepto.de/projects/colorvic/
static const byte pal[48]={
0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF,
0x68, 0x37, 0x2B,
0x70, 0xA4, 0xB2,
0x6F, 0x3D, 0x86,
0x58, 0x8D, 0x43,
0x35, 0x28, 0x79,
0xB8, 0xC7, 0x6F,
0x6F, 0x4F, 0x25,
0x43, 0x39, 0x00,
0x9A, 0x67, 0x59,
0x44, 0x44, 0x44,
0x6C, 0x6C, 0x6C,
0x9A, 0xD2, 0x84,
0x6C, 0x5E, 0xB5,
0x95, 0x95, 0x95};
memcpy(palette, pal, 48);
/// Also set transparent color "16" as a dark grey that is distinguishable
/// from black, but darker than normal colors.
palette[16].R=20;
palette[16].G=20;
palette[16].B=20;
}
void ZX_Spectrum_set_palette(T_Components * palette)
{
int i, intensity;
for (i = 0; i < 16; i++)
{
intensity = (i & 8) ? 255 : 205;
palette[i].G = ((i & 4) >> 2) * intensity;
palette[i].R = ((i & 2) >> 1) * intensity;
palette[i].B = (i & 1) * intensity;
}
}
int DECB_Check_binary_file(FILE * f)
{
byte code;

View File

@ -38,6 +38,26 @@ int C64_FLI(byte *bitmap, byte *screen_ram, byte *color_ram, byte *background);
int C64_FLI_enforcer(void);
/**
* Set the 16 colors Commodore 64 palette
*/
void C64_set_palette(T_Components * palette);
/** @}*/
/** @defgroup zx_spectrum Sinclair ZX Spectrum
*
* @{
*/
/**
* Set the 16 colors ZX Spectrum palette.
*
* The ZX Spectrum palette is a 16 color RGBI palette.
* The color components are in IGRB order.
*/
void ZX_Spectrum_set_palette(T_Components * palette);
/** @}*/
/** @defgroup decb DECB binary format