diff options
Diffstat (limited to 'kiconedit/palettetoolbar.cpp')
-rw-r--r-- | kiconedit/palettetoolbar.cpp | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/kiconedit/palettetoolbar.cpp b/kiconedit/palettetoolbar.cpp new file mode 100644 index 00000000..207442e1 --- /dev/null +++ b/kiconedit/palettetoolbar.cpp @@ -0,0 +1,178 @@ +/* + kiconedit - a small graphics drawing program for the KDE + Copyright ( C ) 1998 Thomas Tanghus ( tanghus@kde.org ) + Copyright ( C ) 2002 Nadeem Hasan ( nhasan@kde.org ) + + 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. + + This program 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 + 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. +*/ + +#include <qlabel.h> +#include <qlayout.h> +#include <qwhatsthis.h> +#include <qpainter.h> + +#include <klocale.h> +#include <kdebug.h> + +#include "kiconcolors.h" +#include "palettetoolbar.h" + +PaletteToolBar::PaletteToolBar( QWidget *parent, const char *name ) + : KToolBar( parent, name ) +{ + QWidget *base = new QWidget( this ); + + QBoxLayout::Direction d = orientation() == Qt::Horizontal? + QBoxLayout::LeftToRight : QBoxLayout::TopToBottom; + m_layout = new QBoxLayout( base, d, 2, 6 ); + + m_lblPreview = new QLabel( base ); + m_lblPreview->setFrameStyle( QFrame::Panel|QFrame::Sunken ); + m_lblPreview->setFixedHeight( 64 ); + m_lblPreview->setAlignment( Qt::AlignHCenter|Qt::AlignVCenter ); + QWhatsThis::add(m_lblPreview, i18n( "Preview\n\nThis is a 1:1 preview" + " of the current icon" ) ); + m_layout->addWidget( m_lblPreview ); + + m_currentColorView = new QLabel( base ); + m_currentColorView->setFrameStyle( QFrame::Panel|QFrame::Sunken ); + m_currentColorView->setFixedHeight( 24 ); + m_currentColorView->setAlignment( Qt::AlignHCenter|Qt::AlignVCenter ); + QWhatsThis::add(m_currentColorView, i18n( "Current color\n\nThis is the currently selected color" ) ); + m_layout->addWidget( m_currentColorView ); + + QVBoxLayout *vlayout = new QVBoxLayout( m_layout, 0 ); + QLabel *l = new QLabel( i18n( "System colors:" ), base ); + vlayout->addWidget( l ); + m_sysColors = new KSysColors( base ); + QWhatsThis::add(m_sysColors, i18n( "System colors\n\nHere you can select" + " colors from the KDE icon palette" ) ); + + vlayout->addWidget( m_sysColors ); + + connect( m_sysColors, SIGNAL( newColor(uint) ), + SIGNAL( newColor(uint) ) ); + + vlayout = new QVBoxLayout( m_layout, 0 ); + l = new QLabel( i18n( "Custom colors:" ), base ); + vlayout->addWidget( l ); + m_customColors = new KCustomColors( base ); + QWhatsThis::add(m_customColors, i18n( "Custom colors\n\nHere you can" + " build a palette of custom colors.\nDouble-click on a box to edit" + " the color" ) ); + + vlayout->addWidget( m_customColors ); + + connect( m_customColors, SIGNAL( newColor(uint) ), + SIGNAL( newColor(uint) ) ); + connect( this, SIGNAL( newColor(uint)), + this, SLOT(currentColorChanged(uint))); + currentColorChanged(OPAQUE_MASK|0); + + setEnableContextMenu( false ); + setMovingEnabled( false ); +} + +void PaletteToolBar::setOrientation( Orientation o ) +{ + if( barPos() == Floating ) + o = o == Qt::Vertical ? Qt::Horizontal : Qt::Vertical; + + QBoxLayout::Direction d = o == Qt::Horizontal? QBoxLayout::LeftToRight + : QBoxLayout::TopToBottom; + m_layout->setDirection( d ); + + QDockWindow::setOrientation( o ); +} + +void PaletteToolBar::previewChanged( const QPixmap &p ) +{ + m_lblPreview->setPixmap( p ); +} + +void PaletteToolBar::addColors( uint n, uint *c ) +{ + m_customColors->clear(); + for( uint i = 0; i < n; i++ ) + addColor( c[ i ] ); +} + +void PaletteToolBar::addColor( uint color ) +{ + if( !m_sysColors->contains( color ) ) + m_customColors->addColor( color ); +} + +void PaletteToolBar::setPreviewBackground( QPixmap pixmap ) +{ + m_lblPreview->setBackgroundPixmap(pixmap); +} + +void PaletteToolBar::setPreviewBackground( const QColor& colour ) +{ + m_lblPreview->setBackgroundColor(colour); +} + +void PaletteToolBar::currentColorChanged(uint color) +{ + if(qAlpha(color) == 255) + { + m_currentColorView->setBackgroundColor(color); + } + else + { + // Show the colour as if drawn over a checkerboard pattern + const int squareWidth = 8; + const uint lightColour = qRgb(255, 255, 255); + const uint darkColour = qRgb(127, 127, 127); + + QPixmap pm(2 * squareWidth, 2 * squareWidth); + QPainter p(&pm); + + double alpha = qAlpha(color) / 255.0; + + int r = int(qRed(color) * alpha + (1 - alpha) * qRed(lightColour) + 0.5); + int g = int(qGreen(color) * alpha + (1 - alpha) * qGreen(lightColour) + 0.5); + int b = int(qBlue(color) * alpha + (1 - alpha) * qBlue(lightColour) + 0.5); + + uint squareColour = qRgb(r, g, b); + + p.setPen(Qt::NoPen); + p.setBrush(squareColour); + p.drawRect(0, 0, squareWidth, squareWidth); + p.drawRect(squareWidth, squareWidth, squareWidth, squareWidth); + + r = int(qRed(color) * alpha + (1 - alpha) * qRed(darkColour) + 0.5); + g = int(qGreen(color) * alpha + (1 - alpha) * qGreen(darkColour) + 0.5); + b = int(qBlue(color) * alpha + (1 - alpha) * qBlue(darkColour) + 0.5); + + squareColour = qRgb(r, g, b); + + p.setBrush(squareColour); + p.drawRect(squareWidth, 0, squareWidth, squareWidth); + p.drawRect(0, squareWidth, squareWidth, squareWidth); + + p.end(); + + m_currentColorView->setBackgroundPixmap(pm); + } +} + +#include "palettetoolbar.moc" + +/* vim: et sw=2 ts=2 +*/ + |