"Unable to figure out contents of YPP client display.\n"
"Please check the following:\n"
" * YPP client is showing commodity listing screen\n"
- " * YPP client has antialiased text turned off (Ye / Options / General)\n"
" * YPP client window is on top (we try to raise it but your window\n"
" manager might have prevented that from succeeding)\n"
" * Your X display is 24bpp (NB some VNC servers use 16bpp by default)\n"
const RgbImage *ri= cim->rgb;
Rgb background= ri_rgb(ri, cell->br.x, cell->br.y);
- long bg_count=0, white_count=0, black_count=0;
+ long bg_count=0, light_count=0, dark_count=0;
Point p;
FOR_P_RECT(p,*cell) {
Rgb here= ri_rgb(ri, p.x, p.y);
if (here == background) bg_count++;
- else if (here == 0) black_count++;
- else if (here == 0xffffffU) white_count++;
+ else if (here < background) dark_count++;
+ else if (here > background) light_count++;
}
long total_count= RECT_W(*cell) * RECT_H(*cell);
- MUST( bg_count > 8*total_count / 10,
- MR(*cell);MIL(bg_count);MIL(white_count);MIL(black_count) );
+ MUST( bg_count > total_count / 2,
+ MR(*cell);MIL(total_count);MIL(bg_count);
+ MIL(light_count);MIL(dark_count) );
if (bg_count == total_count)
return;
- MUST( !!black_count != !!white_count,
- MR(*cell);MIL(bg_count);MIL(white_count);MIL(black_count) );
+ MUST( !!dark_count != !!light_count,
+ MR(*cell);MIL(total_count);MIL(bg_count);
+ MIL(light_count);MIL(dark_count) );
- debugf("TABLEENTRY col=%d %d,%d..%d,%d bg=%ld white=%ld black=%ld\n",
+ debugf("TABLEENTRY col=%d %d,%d..%d,%d bg=%ld light=%ld dark=%ld\n",
colno, cell->tl.x,cell->tl.y, cell->br.x,cell->br.y,
- bg_count, white_count, black_count);
+ bg_count, light_count, dark_count);
- Rgb foreground= white_count ? 0xffffffU : 0;
+ Rgb foreground;
+ double fg_extra;
+ if (light_count) {
+ foreground= 0xffffffU;
+ fg_extra= +1;
+ } else {
+ foreground= 0;
+ fg_extra= -1;
+ }
int monochrome= 1;
FOR_P_RECT(p,*cell) {
unsigned char bg_chan= background >> (i*8);
unsigned char fg_chan= foreground >> (i*8);
double alpha_chan=
- ((double)here_chan - (double)bg_chan) /
- ((double)fg_chan - (double)bg_chan);
+ ((double)here_chan - (double)bg_chan) /
+ ((fg_chan + fg_extra) - (double)bg_chan);
alpha[i]= alpha_chan;
alpha_mean += alpha_chan * (1/3.0);
}
- double thresh= 1.0/AAMAXVAL;
+ double thresh= 1.5/AAMAXVAL;
double alpha_min= alpha_mean - thresh;
double alpha_max= alpha_mean + thresh;
for (i=0; i<3; i++)
MI(i);MRGB(here);MRGB(background);MRGB(foreground);
MF(alpha_min);MF(alpha[i]);MF(alpha_max) );
- MUST( 0 <= alpha_mean && alpha_mean <= 1,
+ MUST( 0 <= alpha_mean && alpha_mean < 0.999,
MRGB(here);MRGB(background);MRGB(foreground);
- MF(alpha_mean) );
- int here_int= AAMAXVAL*alpha_mean;
+ MF(alpha_mean); MF(alpha[0]);MF(alpha[1]);MF(alpha[2]); );
+ int here_int= floor((AAMAXVAL+1)*alpha_mean);
+ assert(here_int <= AAMAXVAL);
if (!(here_int==0 || here_int==AAMAXVAL)) monochrome=0;
cim->d[p.y * cim->w + p.x]= '0' + here_int;
}