int PaletteTransform::quant(void) { if(!inProgress) return 0; uchar* pf = from + 3*n0; uchar* pt = to + 3*n0; char* pd = delta + 3*n0; int max = 3*sz; int log = 0; while(max--) { if(*pd) { log = 1; if(abs((int)*pf - (int)*pt) <= abs(*pd)) *pf = *pt, *pd = 0; else *pf += *pd; } pf++; pt++; pd++; } if(!log) { inProgress = 0; if(event) *event = 0; } XGR_SetPal(from,n0,sz); if(DIBLog) XGR_Flush(0,0,XGR_MAXX,XGR_MAXY); return 1; }
void PalEvidence(char* tpal,char* pal) { const int SPEED = 4; int log = 1,i; int t; while(log) { t = CLOCK(); while(CLOCK() < t + 1); log = 0; for(i = 0; i < 256; i++) { tpal[3*i + 0] += SPEED; tpal[3*i + 1] += SPEED; tpal[3*i + 2] += SPEED; if(tpal[3*i + 0] >= pal[3*i + 0]) tpal[3*i + 0] = pal[3*i + 0]; else log = 1; if(tpal[3*i + 1] >= pal[3*i + 1]) tpal[3*i + 1] = pal[3*i + 1]; else log = 1; if(tpal[3*i + 2] >= pal[3*i + 2]) tpal[3*i + 2] = pal[3*i + 2]; else log = 1; } XGR_SetPal(tpal,0,255); XGR_Flush(0,0,XGR_MAXX,XGR_MAXY); xtClearMessageQueue(); } }
void PalSlake(char* pal) { const int SPEED = 4; int log = 1,i; int t; while(log) { t = CLOCK(); while(CLOCK() < t + 1); log = 0; for(i = 0; i < 256; i++) { if(pal[3*i + 0] <= SPEED) pal[3*i + 0] = 0; else pal[3*i + 0] -= SPEED, log = 1; if(pal[3*i + 1] <= SPEED) pal[3*i + 1] = 0; else pal[3*i + 1] -= SPEED, log = 1; if(pal[3*i + 2] <= SPEED) pal[3*i + 2] = 0; else pal[3*i + 2] -= SPEED, log = 1; } XGR_SetPal(pal,0,255); XGR_Flush(0,0,XGR_MAXX,XGR_MAXY); xtClearMessageQueue(); } }
void iChatScreenObject::flush(void) { XGR_Flush(PosX,PosY,SizeX,SizeY); }