diff options
Diffstat (limited to 'kdeui/kled.cpp')
-rw-r--r-- | kdeui/kled.cpp | 644 |
1 files changed, 0 insertions, 644 deletions
diff --git a/kdeui/kled.cpp b/kdeui/kled.cpp deleted file mode 100644 index aebf6ce26..000000000 --- a/kdeui/kled.cpp +++ /dev/null @@ -1,644 +0,0 @@ -/* This file is part of the KDE libraries - Copyright (C) 1998 Jörg Habenicht (j.habenicht@europemail.com) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. -*/ - - -#define PAINT_BENCH -#undef PAINT_BENCH - -#ifdef PAINT_BENCH -#include <tqdatetime.h> -#include <stdio.h> -#endif - - -#include <tqpainter.h> -#include <tqimage.h> -#include <tqcolor.h> -#include <kapplication.h> -#include <kpixmapeffect.h> -#include "kled.h" - - -class KLed::KLedPrivate -{ - friend class KLed; - - int dark_factor; - TQColor offcolor; - TQPixmap *off_map; - TQPixmap *on_map; -}; - - - -KLed::KLed(TQWidget *parent, const char *name) - : TQWidget( parent, name), - led_state(On), - led_look(Raised), - led_tqshape(Circular) -{ - TQColor col(green); - d = new KLed::KLedPrivate; - d->dark_factor = 300; - d->offcolor = col.dark(300); - d->off_map = 0; - d->on_map = 0; - - setColor(col); -} - - -KLed::KLed(const TQColor& col, TQWidget *parent, const char *name) - : TQWidget( parent, name), - led_state(On), - led_look(Raised), - led_tqshape(Circular) -{ - d = new KLed::KLedPrivate; - d->dark_factor = 300; - d->offcolor = col.dark(300); - d->off_map = 0; - d->on_map = 0; - - setColor(col); - //setShape(Circular); -} - -KLed::KLed(const TQColor& col, KLed::State state, - KLed::Look look, KLed::Shape tqshape, TQWidget *parent, const char *name ) - : TQWidget(parent, name), - led_state(state), - led_look(look), - led_tqshape(tqshape) -{ - d = new KLed::KLedPrivate; - d->dark_factor = 300; - d->offcolor = col.dark(300); - d->off_map = 0; - d->on_map = 0; - - //setShape(tqshape); - setColor(col); -} - - -KLed::~KLed() -{ - delete d->off_map; - delete d->on_map; - delete d; -} - -void -KLed::paintEvent(TQPaintEvent *) -{ -#ifdef PAINT_BENCH - const int rounds = 1000; - TQTime t; - t.start(); - for (int i=0; i<rounds; i++) { -#endif - switch(led_tqshape) - { - case Rectangular: - switch (led_look) - { - case Sunken : - paintRectFrame(false); - break; - case Raised : - paintRectFrame(true); - break; - case Flat : - paintRect(); - break; - default : - qWarning("%s: in class KLed: no KLed::Look set",tqApp->argv()[0]); - } - break; - case Circular: - switch (led_look) - { - case Flat : - paintFlat(); - break; - case Raised : - paintRound(); - break; - case Sunken : - paintSunken(); - break; - default: - qWarning("%s: in class KLed: no KLed::Look set",tqApp->argv()[0]); - } - break; - default: - qWarning("%s: in class KLed: no KLed::Shape set",tqApp->argv()[0]); - break; - } -#ifdef PAINT_BENCH - } - int ready = t.elapsed(); - qWarning("elapsed: %d msec. for %d rounds", ready, rounds); -#endif -} - -int -KLed::ensureRoundLed() -{ - // Initialize coordinates, width, and height of the LED - // - int width = this->width(); - // Make sure the LED is round! - if (width > this->height()) - width = this->height(); - width -= 2; // leave one pixel border - if (width < 0) - width = 0; - - return width; -} - -bool -KLed::paintCachedPixmap() -{ - if (led_state) { - if (d->on_map) { - TQPainter paint(this); - paint.drawPixmap(0, 0, *d->on_map); - return true; - } - } else { - if (d->off_map) { - TQPainter paint(this); - paint.drawPixmap(0, 0, *d->off_map); - return true; - } - } - - return false; -} - -void -KLed::paintFlat() // paint a ROUND FLAT led lamp -{ - if (paintCachedPixmap()) return; - - TQPainter paint; - TQColor color; - TQBrush brush; - TQPen pen; - - int width = ensureRoundLed(); - - - int scale = 3; - TQPixmap *tmpMap = 0; - - width *= scale; - - tmpMap = new TQPixmap(width + 6, width + 6); - tmpMap->fill(paletteBackgroundColor()); - - // start painting widget - // - paint.begin(tmpMap); - - // Set the color of the LED according to given parameters - color = ( led_state ) ? led_color : d->offcolor; - - // Set the brush to SolidPattern, this fills the entire area - // of the ellipse which is drawn with a thin gray "border" (pen) - brush.setStyle( Qt::SolidPattern ); - brush.setColor( color ); - - pen.setWidth( scale ); - color = tqcolorGroup().dark(); - pen.setColor( color ); // Set the pen accordingly - - paint.setPen( pen ); // Select pen for drawing - paint.setBrush( brush ); // Assign the brush to the painter - - // Draws a "flat" LED with the given color: - paint.drawEllipse( scale, scale, width - scale * 2, width - scale * 2 ); - - paint.end(); - // - // painting done - TQPixmap *&dest = led_state ? d->on_map : d->off_map; - TQImage i = tmpMap->convertToImage(); - width /= 3; - i = i.smoothScale(width, width); - delete tmpMap; - dest = new TQPixmap(i); - paint.begin(this); - paint.drawPixmap(0, 0, *dest); - paint.end(); - -} - -void -KLed::paintRound() // paint a ROUND RAISED led lamp -{ - if (paintCachedPixmap()) return; - - TQPainter paint; - TQColor color; - TQBrush brush; - TQPen pen; - - // Initialize coordinates, width, and height of the LED - int width = ensureRoundLed(); - - int scale = 3; - TQPixmap *tmpMap = 0; - - width *= scale; - - tmpMap = new TQPixmap(width + 6, width + 6); - tmpMap->fill(paletteBackgroundColor()); - paint.begin(tmpMap); - - // Set the color of the LED according to given parameters - color = ( led_state ) ? led_color : d->offcolor; - - // Set the brush to SolidPattern, this fills the entire area - // of the ellipse which is drawn first - brush.setStyle( Qt::SolidPattern ); - brush.setColor( color ); - paint.setBrush( brush ); // Assign the brush to the painter - - // Draws a "flat" LED with the given color: - paint.drawEllipse( scale, scale, width - scale*2, width - scale*2 ); - - // Draw the bright light spot of the LED now, using modified "old" - // painter routine taken from KDEUI´s KLed widget: - - // Setting the new width of the pen is essential to avoid "pixelized" - // shadow like it can be observed with the old LED code - pen.setWidth( 2 * scale ); - - // shrink the light on the LED to a size about 2/3 of the complete LED - int pos = width/5 + 1; - int light_width = width; - light_width *= 2; - light_width /= 3; - - // Calculate the LED´s "light factor": - int light_quote = (130*2/(light_width?light_width:1))+100; - - // Now draw the bright spot on the LED: - while (light_width) { - color = color.light( light_quote ); // make color lighter - pen.setColor( color ); // set color as pen color - paint.setPen( pen ); // select the pen for drawing - paint.drawEllipse( pos, pos, light_width, light_width ); // draw the ellipse (circle) - light_width--; - if (!light_width) - break; - paint.drawEllipse( pos, pos, light_width, light_width ); - light_width--; - if (!light_width) - break; - paint.drawEllipse( pos, pos, light_width, light_width ); - pos++; light_width--; - } - - // Drawing of bright spot finished, now draw a thin gray border - // around the LED; it looks nicer that way. We do this here to - // avoid that the border can be erased by the bright spot of the LED - - pen.setWidth( 2 * scale + 1 ); - color = tqcolorGroup().dark(); - pen.setColor( color ); // Set the pen accordingly - paint.setPen( pen ); // Select pen for drawing - brush.setStyle( Qt::NoBrush ); // Switch off the brush - paint.setBrush( brush ); // This avoids filling of the ellipse - - paint.drawEllipse( 2, 2, width, width ); - - paint.end(); - // - // painting done - TQPixmap *&dest = led_state ? d->on_map : d->off_map; - TQImage i = tmpMap->convertToImage(); - width /= 3; - i = i.smoothScale(width, width); - delete tmpMap; - dest = new TQPixmap(i); - paint.begin(this); - paint.drawPixmap(0, 0, *dest); - paint.end(); - -} - -void -KLed::paintSunken() // paint a ROUND SUNKEN led lamp -{ - if (paintCachedPixmap()) return; - - TQPainter paint; - TQColor color; - TQBrush brush; - TQPen pen; - - // First of all we want to know what area should be updated - // Initialize coordinates, width, and height of the LED - int width = ensureRoundLed(); - - int scale = 3; - TQPixmap *tmpMap = 0; - - width *= scale; - - tmpMap = new TQPixmap(width, width); - tmpMap->fill(paletteBackgroundColor()); - paint.begin(tmpMap); - - // Set the color of the LED according to given parameters - color = ( led_state ) ? led_color : d->offcolor; - - // Set the brush to SolidPattern, this fills the entire area - // of the ellipse which is drawn first - brush.setStyle( Qt::SolidPattern ); - brush.setColor( color ); - paint.setBrush( brush ); // Assign the brush to the painter - - // Draws a "flat" LED with the given color: - paint.drawEllipse( scale, scale, width - scale*2, width - scale*2 ); - - // Draw the bright light spot of the LED now, using modified "old" - // painter routine taken from KDEUI´s KLed widget: - - // Setting the new width of the pen is essential to avoid "pixelized" - // shadow like it can be observed with the old LED code - pen.setWidth( 2 * scale ); - - // shrink the light on the LED to a size about 2/3 of the complete LED - int pos = width/5 + 1; - int light_width = width; - light_width *= 2; - light_width /= 3; - - // Calculate the LED´s "light factor": - int light_quote = (130*2/(light_width?light_width:1))+100; - - // Now draw the bright spot on the LED: - while (light_width) { - color = color.light( light_quote ); // make color lighter - pen.setColor( color ); // set color as pen color - paint.setPen( pen ); // select the pen for drawing - paint.drawEllipse( pos, pos, light_width, light_width ); // draw the ellipse (circle) - light_width--; - if (!light_width) - break; - paint.drawEllipse( pos, pos, light_width, light_width ); - light_width--; - if (!light_width) - break; - paint.drawEllipse( pos, pos, light_width, light_width ); - pos++; light_width--; - } - - // Drawing of bright spot finished, now draw a thin border - // around the LED which resembles a shadow with light coming - // from the upper left. - - pen.setWidth( 2 * scale + 1 ); // ### shouldn't this value be smaller for smaller LEDs? - brush.setStyle( (Qt::BrushStyle)NoBrush ); // Switch off the brush - paint.setBrush( brush ); // This avoids filling of the ellipse - - // Set the initial color value to colorGroup().light() (bright) and start - // drawing the shadow border at 45° (45*16 = 720). - - int angle = -720; - color = tqcolorGroup().light(); - - for ( int arc = 120; arc < 2880; arc += 240 ) { - pen.setColor( color ); - paint.setPen( pen ); - int w = width - pen.width()/2 - scale + 1; - paint.drawArc( pen.width()/2, pen.width()/2, w, w, angle + arc, 240 ); - paint.drawArc( pen.width()/2, pen.width()/2, w, w, angle - arc, 240 ); - color = color.dark( 110 ); //FIXME: this should somehow use the contrast value - } // end for ( angle = 720; angle < 6480; angle += 160 ) - - paint.end(); - // - // painting done - - TQPixmap *&dest = led_state ? d->on_map : d->off_map; - TQImage i = tmpMap->convertToImage(); - width /= 3; - i = i.smoothScale(width, width); - delete tmpMap; - dest = new TQPixmap(i); - paint.begin(this); - paint.drawPixmap(0, 0, *dest); - paint.end(); - -} - -void -KLed::paintRect() -{ - TQPainter painter(this); - TQBrush lightBrush(led_color); - TQBrush darkBrush(d->offcolor); - TQPen pen(led_color.dark(300)); - int w=width(); - int h=height(); - // ----- - switch(led_state) - { - case On: - painter.setBrush(lightBrush); - painter.drawRect(0, 0, w, h); - break; - case Off: - painter.setBrush(darkBrush); - painter.drawRect(0, 0, w, h); - painter.setPen(pen); - painter.drawLine(0, 0, w, 0); - painter.drawLine(0, h-1, w, h-1); - // Draw verticals - int i; - for(i=0; i < w; i+= 4 /* dx */) - painter.drawLine(i, 1, i, h-1); - break; - default: break; - } -} - -void -KLed::paintRectFrame(bool raised) -{ - TQPainter painter(this); - TQBrush lightBrush(led_color); - TQBrush darkBrush(d->offcolor); - int w=width(); - int h=height(); - TQColor black=Qt::black; - TQColor white=Qt::white; - // ----- - if(raised) - { - painter.setPen(white); - painter.drawLine(0, 0, 0, h-1); - painter.drawLine(1, 0, w-1, 0); - painter.setPen(black); - painter.drawLine(1, h-1, w-1, h-1); - painter.drawLine(w-1, 1, w-1, h-1); - painter.fillRect(1, 1, w-2, h-2, - (led_state==On)? lightBrush : darkBrush); - } else { - painter.setPen(black); - painter.drawRect(0,0,w,h); - painter.drawRect(0,0,w-1,h-1); - painter.setPen(white); - painter.drawRect(1,1,w-1,h-1); - painter.fillRect(2, 2, w-4, h-4, - (led_state==On)? lightBrush : darkBrush); - } -} - -KLed::State -KLed::state() const -{ - return led_state; -} - -KLed::Shape -KLed::tqshape() const -{ - return led_tqshape; -} - -TQColor -KLed::color() const -{ - return led_color; -} - -KLed::Look -KLed::look() const -{ - return led_look; -} - -void -KLed::setState( State state ) -{ - if (led_state != state) - { - led_state = state; - update(); - } -} - -void -KLed::toggleState() -{ - toggle(); -} - -void -KLed::setShape(KLed::Shape s) -{ - if(led_tqshape!=s) - { - led_tqshape = s; - update(); - } -} - -void -KLed::setColor(const TQColor& col) -{ - if(led_color!=col) { - if(d->on_map) { delete d->on_map; d->on_map = 0; } - if(d->off_map) { delete d->off_map; d->off_map = 0; } - led_color = col; - d->offcolor = col.dark(d->dark_factor); - update(); - } -} - -void -KLed::setDarkFactor(int darkfactor) -{ - if (d->dark_factor != darkfactor) { - d->dark_factor = darkfactor; - d->offcolor = led_color.dark(darkfactor); - update(); - } -} - -int -KLed::darkFactor() const -{ - return d->dark_factor; -} - -void -KLed::setLook( Look look ) -{ - if(led_look!=look) - { - led_look = look; - update(); - } -} - -void -KLed::toggle() -{ - led_state = (led_state == On) ? Off : On; - // setColor(led_color); - update(); -} - -void -KLed::on() -{ - setState(On); -} - -void -KLed::off() -{ - setState(Off); -} - -TQSize -KLed::tqsizeHint() const -{ - return TQSize(16, 16); -} - -TQSize -KLed::tqminimumSizeHint() const -{ - return TQSize(16, 16 ); -} - -void KLed::virtual_hook( int, void* ) -{ /*BASE::virtual_hook( id, data );*/ } - -#include "kled.moc" |