You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
4.4 KiB
187 lines
4.4 KiB
#include "kspainter.h"
|
|
#include "../ksopts.h"
|
|
#include <stdlib.h>
|
|
|
|
const int KSPainter::optcolours = 8;
|
|
const int KSPainter::startspecial = 16;
|
|
const int KSPainter::maxcolour = 16+optcolours;
|
|
|
|
const TQColor KSPainter::brown ( 165, 42, 42 );
|
|
const TQColor KSPainter::orange ( 255, 165, 0 );
|
|
const TQColor KSPainter::lightCyan( 224, 255, 255 );
|
|
const TQColor KSPainter::lightBlue( 173, 216, 230 );
|
|
const TQColor KSPainter::pink ( 255, 192, 203 );
|
|
|
|
TQColor KSPainter::num2colour[KSPainter::maxcolour] = { TQt::white,
|
|
TQt::black,
|
|
TQt::darkBlue,
|
|
TQt::darkGreen,
|
|
TQt::red,
|
|
brown,
|
|
TQt::darkMagenta,
|
|
orange,
|
|
TQt::yellow,
|
|
TQt::green,
|
|
TQt::darkCyan,
|
|
TQt::cyan,
|
|
TQt::blue,
|
|
pink,
|
|
TQt::gray,
|
|
TQt::lightGray };
|
|
|
|
void KSPainter::initOptColours()
|
|
{
|
|
num2colour[startspecial+0] = ksopts->textColor;
|
|
num2colour[startspecial+1] = ksopts->infoColor;
|
|
num2colour[startspecial+2] = ksopts->channelColor;
|
|
num2colour[startspecial+3] = ksopts->errorColor;
|
|
num2colour[startspecial+4] = ksopts->ownNickColor;
|
|
num2colour[startspecial+5] = ksopts->nickForeground;
|
|
num2colour[startspecial+6] = ksopts->nickBackground;
|
|
num2colour[startspecial+7] = ksopts->backgroundColor;
|
|
}
|
|
|
|
int KSPainter::colour2num(const TQColor &colour)
|
|
{
|
|
for(int i = 0; i < maxcolour; i++)
|
|
if(num2colour[i] == colour)
|
|
return i;
|
|
|
|
return -1;
|
|
}
|
|
|
|
void KSPainter::colourDrawText(TQPainter *p, int startx, int starty,
|
|
char *str, int length)
|
|
{
|
|
int offset = 0;
|
|
int pcolour;
|
|
char buf[3];
|
|
int loc = 0, i;
|
|
buf[2] = 0;
|
|
bool ReverseText = FALSE;
|
|
|
|
// Default pen (colour)
|
|
|
|
const TQPen qpDefPen = p->pen();
|
|
|
|
for(loc = 0; (str[loc] != 0x00) && (loc != length) ; loc++){
|
|
if(str[loc] == 0x03 || str[loc] == '~'){
|
|
i = loc;
|
|
p->drawText(startx, starty, TQString(str + offset), i-offset);
|
|
startx += p->fontMetrics().width(str + offset, i-offset);
|
|
offset = i;
|
|
// lastp = i;
|
|
if((str[i+1] >= 0x30) && (str[i+1] <= 0x39)){
|
|
i++;
|
|
buf[0] = str[i];
|
|
i++;
|
|
if((str[i] >= 0x30) && (str[i] <= 0x39)){
|
|
buf[1] = str[i];
|
|
i++;
|
|
}
|
|
else{
|
|
buf[1] = 0;
|
|
}
|
|
|
|
pcolour = atoi(buf);
|
|
if(pcolour < maxcolour)
|
|
p->setPen(num2colour[pcolour]);
|
|
else
|
|
i = loc;
|
|
if(str[i] == ','){
|
|
i++;
|
|
if((str[i] >= 0x30) && (str[i] <= 0x39)){
|
|
buf[0] = str[i];
|
|
i++;
|
|
if((str[i] >= 0x30) && (str[i] <= 0x39)){
|
|
buf[1] = str[i];
|
|
i++;
|
|
}
|
|
else{
|
|
buf[1] = 0;
|
|
}
|
|
int bcolour = atoi(buf);
|
|
if(pcolour == bcolour){
|
|
if(bcolour + 1 < maxcolour)
|
|
bcolour += 1;
|
|
else
|
|
bcolour -= 1;
|
|
}
|
|
if(bcolour < maxcolour ){
|
|
p->setBackgroundColor(num2colour[bcolour]);
|
|
p->setBackgroundMode(TQt::OpaqueMode);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
else if(str[i] == 0x03){
|
|
i++;
|
|
p->setPen(qpDefPen);
|
|
p->setBackgroundMode(TQt::TransparentMode);
|
|
}
|
|
else if((str[i] == '~') && ((str[i+1] >= 0x61) || (str[i+1] <= 0x7a))){
|
|
TQFont fnt = p->font();
|
|
TQColor temppen;
|
|
switch(str[i+1]){
|
|
case 'c':
|
|
p->setPen(qpDefPen);
|
|
p->setBackgroundMode(TQt::TransparentMode);
|
|
break;
|
|
case 'C':
|
|
p->setPen(qpDefPen);
|
|
p->setBackgroundMode(TQt::TransparentMode);
|
|
fnt.setBold(FALSE);
|
|
fnt.setItalic(FALSE);
|
|
fnt.setUnderline(FALSE);
|
|
ReverseText = TRUE; // Force reverse removed, all fall through.
|
|
// FALL THROUGH.
|
|
case 'r':
|
|
if(ReverseText == TRUE) {
|
|
ReverseText = FALSE;
|
|
p->setBackgroundMode(TQt::TransparentMode);
|
|
}
|
|
else {
|
|
ReverseText = TRUE;
|
|
p->setBackgroundMode(TQt::OpaqueMode);
|
|
}
|
|
temppen = p->pen().color();
|
|
p->setPen( p->backgroundColor() );
|
|
p->setBackgroundColor( temppen );
|
|
break;
|
|
case 'b':
|
|
if(fnt.bold() == TRUE)
|
|
fnt.setBold(FALSE);
|
|
else
|
|
fnt.setBold(TRUE);
|
|
break;
|
|
case 'i':
|
|
if(fnt.italic() == TRUE)
|
|
fnt.setItalic(FALSE);
|
|
else
|
|
fnt.setItalic(TRUE);
|
|
break;
|
|
case 'u':
|
|
if(fnt.underline() == TRUE)
|
|
fnt.setUnderline(FALSE);
|
|
else
|
|
fnt.setUnderline(TRUE);
|
|
break;
|
|
case '~':
|
|
loc++; // Skip ahead 2 characters
|
|
break;
|
|
default:
|
|
i-=1;
|
|
offset -= 1;
|
|
}
|
|
p->setFont(fnt);
|
|
i += 2;
|
|
}
|
|
offset += i - loc;
|
|
}
|
|
}
|
|
p->drawText(startx, starty, TQString(str + offset), loc-offset);
|
|
|
|
}
|
|
|