Histogram: Shows pixel count, and selects the clicked color.
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1563 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
b7a083ee92
commit
684034c687
139
src/palette.c
139
src/palette.c
@ -766,11 +766,16 @@ void Draw_all_palette_sliders(T_Scroller_button * red_slider,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Window_Histogram(unsigned char block_start, unsigned char block_end, dword* color_usage)
|
int Window_Histogram(unsigned char block_start, unsigned char block_end, dword* color_usage)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
unsigned int max_count = 0;
|
unsigned int max_count = 0;
|
||||||
int old_height=0;
|
int old_height=0;
|
||||||
|
int hovered_color=-1;
|
||||||
|
int new_hovered_color;
|
||||||
|
int bar_width;
|
||||||
|
T_Special_button *histo;
|
||||||
|
int clicked_button;
|
||||||
|
|
||||||
/* Draws an histogram of the selected range in a separate window */
|
/* Draws an histogram of the selected range in a separate window */
|
||||||
|
|
||||||
@ -790,15 +795,21 @@ void Window_Histogram(unsigned char block_start, unsigned char block_end, dword*
|
|||||||
if(color_usage[i] > max_count) max_count = color_usage[i];
|
if(color_usage[i] > max_count) max_count = color_usage[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (max_count == 0) {
|
if (max_count == 0)
|
||||||
|
{
|
||||||
Warning_message("All these colors are unused!");
|
Warning_message("All these colors are unused!");
|
||||||
return;
|
Hide_cursor();
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Open_window(263, 140, "Histogram");
|
Open_window(263, 150, "Histogram");
|
||||||
Window_set_normal_button(120, 120, 42, 14, "Close",-1,1,SDLK_RETURN);
|
Window_set_normal_button(120, 130, 42, 14, "Close",-1,1,SDLK_RETURN);
|
||||||
|
|
||||||
|
Print_in_window(6, 17, "Color:", MC_Dark, MC_Light);
|
||||||
|
Print_in_window(110+12*8, 17, "Pixels", MC_Dark, MC_Light);
|
||||||
|
|
||||||
// Step 2 : draw bars
|
// Step 2 : draw bars
|
||||||
|
bar_width=256/(block_end-block_start+1);
|
||||||
j = 0;
|
j = 0;
|
||||||
for(i=block_start; i<= block_end; i++) {
|
for(i=block_start; i<= block_end; i++) {
|
||||||
int height = 100*color_usage[i]/max_count;
|
int height = 100*color_usage[i]/max_count;
|
||||||
@ -810,30 +821,30 @@ void Window_Histogram(unsigned char block_start, unsigned char block_end, dword*
|
|||||||
height=1;
|
height=1;
|
||||||
|
|
||||||
Window_rectangle(
|
Window_rectangle(
|
||||||
3+j*(256/(block_end-block_start+1)),
|
3+j*bar_width,
|
||||||
117-height,
|
127-height,
|
||||||
256/(block_end-block_start+1),
|
bar_width,
|
||||||
height, i);
|
height, i);
|
||||||
|
|
||||||
//if (i == MC_Light) {
|
//if (i == MC_Light) {
|
||||||
Window_rectangle(
|
Window_rectangle(
|
||||||
3+j*(256/(block_end-block_start+1)),
|
3+j*bar_width,
|
||||||
116-height,
|
126-height,
|
||||||
256/(block_end-block_start+1),
|
bar_width,
|
||||||
1,MC_Black);
|
1,MC_Black);
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
// vertical outline
|
// vertical outline
|
||||||
if (height>old_height)
|
if (height>old_height)
|
||||||
Window_rectangle(
|
Window_rectangle(
|
||||||
2+j*(256/(block_end-block_start+1)),
|
2+j*bar_width,
|
||||||
116-height,
|
126-height,
|
||||||
1,
|
1,
|
||||||
height-old_height+1,MC_Black);
|
height-old_height+1,MC_Black);
|
||||||
else if (old_height>height)
|
else if (old_height>height)
|
||||||
Window_rectangle(
|
Window_rectangle(
|
||||||
3+j*(256/(block_end-block_start+1)),
|
3+j*bar_width,
|
||||||
116-old_height,
|
126-old_height,
|
||||||
1,
|
1,
|
||||||
old_height-height+1,MC_Black);
|
old_height-height+1,MC_Black);
|
||||||
|
|
||||||
@ -844,16 +855,71 @@ void Window_Histogram(unsigned char block_start, unsigned char block_end, dword*
|
|||||||
if (old_height!=0)
|
if (old_height!=0)
|
||||||
Window_rectangle(
|
Window_rectangle(
|
||||||
3+j*(256/(block_end-block_start+1)),
|
3+j*(256/(block_end-block_start+1)),
|
||||||
116-old_height,
|
126-old_height,
|
||||||
1,
|
1,
|
||||||
old_height+1,MC_Black);
|
old_height+1,MC_Black);
|
||||||
|
|
||||||
Update_window_area(0,0,263,140);
|
histo = Window_set_special_button(3, 27, j*bar_width, 100); // 2
|
||||||
Display_cursor();
|
|
||||||
|
|
||||||
while(Window_clicked_button() != 1 && Key != KEY_ESC);
|
Update_window_area(0,0,263,150);
|
||||||
Close_window();
|
|
||||||
Display_cursor();
|
Display_cursor();
|
||||||
|
do
|
||||||
|
{
|
||||||
|
// Find hovered area
|
||||||
|
if (Window_click_in_rectangle(histo->Pos_X,histo->Pos_Y,histo->Pos_X+histo->Width-1,histo->Pos_Y+histo->Height-1))
|
||||||
|
{
|
||||||
|
short x_pos;
|
||||||
|
x_pos=((short)Mouse_X-Window_pos_X)/Menu_factor_X;
|
||||||
|
new_hovered_color=block_start+(x_pos-histo->Pos_X)/bar_width;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
new_hovered_color=-1;
|
||||||
|
|
||||||
|
// When changing hovered color, update the info area
|
||||||
|
if (new_hovered_color!=hovered_color)
|
||||||
|
{
|
||||||
|
char str[12];
|
||||||
|
|
||||||
|
hovered_color=new_hovered_color;
|
||||||
|
Hide_cursor();
|
||||||
|
if (hovered_color==-1)
|
||||||
|
{
|
||||||
|
Window_rectangle(6+6*8,17,3*8,7,MC_Light);
|
||||||
|
Update_window_area(6+6*8,17,3*8,7);
|
||||||
|
Window_rectangle(86,17,2*8,8,MC_Light);
|
||||||
|
Update_window_area(86,17,2*8,8);
|
||||||
|
Window_rectangle(110,17,11*8,7,MC_Light);
|
||||||
|
Update_window_area(110,17,11*8,7);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Num2str(hovered_color,str ,3);
|
||||||
|
Print_in_window(6+6*8,17,str,MC_Black,MC_Light);
|
||||||
|
Window_rectangle(86,17,2*8,8,hovered_color);
|
||||||
|
Update_window_area(86,17,2*8,8);
|
||||||
|
Num2str(color_usage[hovered_color],str ,11);
|
||||||
|
Print_in_window(110,17,str,MC_Black,MC_Light);
|
||||||
|
}
|
||||||
|
Display_cursor();
|
||||||
|
}
|
||||||
|
clicked_button=Window_clicked_button();
|
||||||
|
if (Key == KEY_ESC)
|
||||||
|
clicked_button=1;
|
||||||
|
|
||||||
|
} while( clicked_button < 1);
|
||||||
|
Close_window();
|
||||||
|
|
||||||
|
if (clicked_button==2)
|
||||||
|
{
|
||||||
|
// This is a counter-hack. Close_window() sets Mouse_K to zero
|
||||||
|
// on exit, I don't know why (It will become 1 again if you move
|
||||||
|
// the mouse slightly)
|
||||||
|
// Here I force it back to 1, so that the Wait_end_of_click()
|
||||||
|
// will really wait for a release of mouse button.
|
||||||
|
Mouse_K=1;
|
||||||
|
return hovered_color;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Print_RGB_or_HSL(byte mode)
|
void Print_RGB_or_HSL(byte mode)
|
||||||
@ -2289,9 +2355,40 @@ void Button_Palette(void)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 25: // Number of colors used: Open histogram
|
case 25: // Number of colors used: Open histogram
|
||||||
Window_Histogram(block_start, block_end, color_usage);
|
{
|
||||||
|
int selected_col;
|
||||||
|
|
||||||
|
selected_col=Window_Histogram(block_start, block_end, color_usage);
|
||||||
|
if (selected_col!=-1)
|
||||||
|
{
|
||||||
|
// Tag selected color
|
||||||
|
Fore_color=first_color=last_color=block_start=block_end=selected_col;
|
||||||
|
Tag_color_range(block_start,block_end);
|
||||||
|
|
||||||
|
// Affichage du n° de la couleur sélectionnée
|
||||||
|
Window_rectangle(COLOR_X,COLOR_Y,56,7,MC_Light);
|
||||||
|
Num2str(Fore_color,str,3);
|
||||||
|
Print_in_window(COLOR_X,COLOR_Y,str,MC_Black,MC_Light);
|
||||||
|
Update_window_area(COLOR_X,COLOR_Y,56,7);
|
||||||
|
|
||||||
|
// Affichage des jauges
|
||||||
|
Window_rectangle(NUMERIC_R_X,NUMERIC_Y,72,7,MC_Light);
|
||||||
|
Display_sliders(red_slider,green_slider,blue_slider,0,working_palette);
|
||||||
|
|
||||||
|
// Affichage dans le block de visu de la couleur en cours
|
||||||
|
Window_rectangle(FGCOLOR_DISPLAY_X,FGCOLOR_DISPLAY_Y,FGCOLOR_DISPLAY_W,FGCOLOR_DISPLAY_H,Fore_color);
|
||||||
|
Update_window_area(FGCOLOR_DISPLAY_X,FGCOLOR_DISPLAY_Y,FGCOLOR_DISPLAY_W,FGCOLOR_DISPLAY_H);
|
||||||
|
|
||||||
|
memcpy(backup_palette ,working_palette,sizeof(T_Palette));
|
||||||
|
memcpy(temp_palette,working_palette,sizeof(T_Palette));
|
||||||
|
|
||||||
|
}
|
||||||
|
Display_cursor();
|
||||||
|
Input_sticky_control=0;
|
||||||
|
Wait_end_of_click();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!Mouse_K)
|
if (!Mouse_K)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user