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.
tdeedu/kstars/kstars/starpixmap.cpp

139 lines
4.6 KiB

/***************************************************************************
starpixmap.cpp - Trinity Desktop Planetarium
-------------------
begin : Wed Sep 19 2001
copyright : (C) 2001 by Thomas Kabelmann
email : tk78@gmx.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "starpixmap.h"
#include <kimageeffect.h>
#include <tqbitmap.h>
#include <tqimage.h>
#include <tqpainter.h>
#define STARSIZE 24
StarPixmap::StarPixmap (int starColorMode, int starColorIntensity)
: colorMode (starColorMode), colorIntensity (starColorIntensity)
{
loadPixmaps (starColorMode, starColorIntensity);
}
TQPixmap* StarPixmap::getPixmap (TQChar *color, int size) {
int c;
// the colors from blue to red +, O, B, A, F, G, K, M, N, P
// if *color is '+' use white star
switch (*color) {
case 'O' : c = 1; break;
case 'B' : c = 2; break;
case 'A' : c = 3; break;
case 'F' : c = 4; break;
case 'G' : c = 5; break;
case 'K' : c = 6; break;
case 'M' : c = 7; break;
case 'N' : c = 8; break;
case 'P' : c = 9; break;
default : c = 0;
}
// don't overflow the array
if (size > 25) size = 25;
return &starPixmaps[c][size];
}
void StarPixmap::setColorMode( int newMode ) {
colorMode = newMode;
loadPixmaps ( colorMode, colorIntensity );
}
void StarPixmap::setIntensity ( int newIntensity ) {
colorIntensity = newIntensity;
loadPixmaps ( colorMode, colorIntensity );
}
void StarPixmap::loadPixmaps (int newColorMode, int newColorIntensity) {
colorMode = newColorMode;
colorIntensity = newColorIntensity;
if (colorIntensity < 0) colorIntensity = 0; // min
TQPixmap pix (STARSIZE, STARSIZE);
TQBitmap mask (STARSIZE, STARSIZE);
TQImage image;
TQPainter p;
TQMemArray<TQColor> starColor;
starColor.resize( 8 );
image.setAlphaBuffer(true);
starColor[0] = TQColor( 255, 255, 255 ); //default to white
starColor[1] = TQColor( 0, 0, 255 ); //type O
starColor[2] = TQColor( 0, 200, 255 ); //type B
starColor[3] = TQColor( 0, 255, 255 ); //type A
starColor[4] = TQColor( 200, 255, 100 ); //type F
starColor[5] = TQColor( 255, 255, 0 ); //type G
starColor[6] = TQColor( 255, 100, 0 ); //type K
starColor[7] = TQColor( 255, 0, 0 ); //type M
// background of the star
if ( colorMode==1 ) // night colors (fill red, no temperature colors)
pix.fill (TQt::red);
else if ( colorMode==2 ) //star chart colors (fill black, no temperature colors)
pix.fill (TQt::black);
else
pix.fill (TQt::white); // default (white)
for (int color = 0; color < 10; color ++) {
int ic = color;
if ( color > 7 ) ic = 7;
if (colorMode==0) {
p.begin (&pix);
p.setPen (TQPen (starColor[ic], colorIntensity)); // the intensity of color determines the width of the pen
p.drawEllipse (0, 0, STARSIZE, STARSIZE);
p.end();
}
mask.fill (TQt::color0);
p.begin (&mask);
p.setPen (TQPen ( TQt::color1, 1));
p.setBrush( TQBrush( TQt::color1 ) );
p.drawEllipse(0, 0, STARSIZE, STARSIZE);
p.end();
//BLUR!! ugliness-- requires temporary conversion to pixmap, then back again.
// if we defer the blur until the end, we lose the transparency. Bleh.
TQImage tmp = pix.convertToImage();
pix.convertFromImage( KImageEffect::blur( tmp, 100.0 ) );
pix.setMask (mask); // set the mask
image = pix.convertToImage(); // create the image for smoothScale()
for (int i = 0; i < 26; i++)
{
tmp = image.smoothScale( STARSIZE*(i+1)/26, STARSIZE*(i+1)/26 );
/* if (i < 6)
tmp = image.smoothScale (1+ i, 1+ i); // size: 1x1 .. 6x6
else if (i < 12)
tmp = image.smoothScale (int((1+ i)*1.25), int((1+ i)*1.25)); // size: 8x8 ... 16x16
else if (i < 18)
tmp = image.smoothScale (int((1+ i)*1.5), int((1+ i)*1.5)); // size: 19x19 .. 27x27
else
tmp = image.smoothScale ((1+ i)*2, (1+ i)*2); // size: 38 .. 52x52
*/
starPixmaps[color][i].convertFromImage( tmp ); // fill the array of pixmaps
}
}
}