summaryrefslogtreecommitdiff
path: root/libopie/colordialog.cpp
Unidiff
Diffstat (limited to 'libopie/colordialog.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/colordialog.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/libopie/colordialog.cpp b/libopie/colordialog.cpp
index 684d6ea..35f15d6 100644
--- a/libopie/colordialog.cpp
+++ b/libopie/colordialog.cpp
@@ -36,48 +36,53 @@
36**********************************************************************/ 36**********************************************************************/
37 37
38#include "colordialog.h" 38#include "colordialog.h"
39 39
40#include "qpainter.h" 40#include "qpainter.h"
41#include "qlayout.h" 41#include "qlayout.h"
42#include "qlabel.h" 42#include "qlabel.h"
43#include "qpushbutton.h" 43#include "qpushbutton.h"
44#include "qlineedit.h" 44#include "qlineedit.h"
45#include "qimage.h" 45#include "qimage.h"
46#include "qpixmap.h" 46#include "qpixmap.h"
47#include "qdrawutil.h" 47#include "qdrawutil.h"
48#include "qvalidator.h" 48#include "qvalidator.h"
49#include "qdragobject.h" 49#include "qdragobject.h"
50#include "qapplication.h" 50#include "qapplication.h"
51#include "qdragobject.h" 51#include "qdragobject.h"
52 52
53static inline void rgb2hsv( QRgb rgb, int&h, int&s, int&v ) 53static inline void rgb2hsv( QRgb rgb, int&h, int&s, int&v )
54{ 54{
55 QColor c; 55 QColor c;
56 c.setRgb( rgb ); 56 c.setRgb( rgb );
57 c.getHsv(h,s,v); 57 c.getHsv(h,s,v);
58} 58}
59 59
60/*
61 * avoid clashes with the original Qt
62 */
63namespace {
64
60class QColorPicker : public QFrame 65class QColorPicker : public QFrame
61{ 66{
62 Q_OBJECT 67 Q_OBJECT
63public: 68public:
64 QColorPicker(QWidget* parent=0, const char* name=0); 69 QColorPicker(QWidget* parent=0, const char* name=0);
65 ~QColorPicker(); 70 ~QColorPicker();
66 71
67public slots: 72public slots:
68 void setCol( int h, int s ); 73 void setCol( int h, int s );
69 74
70signals: 75signals:
71 void newCol( int h, int s ); 76 void newCol( int h, int s );
72 77
73protected: 78protected:
74 QSize sizeHint() const; 79 QSize sizeHint() const;
75 QSizePolicy sizePolicy() const; 80 QSizePolicy sizePolicy() const;
76 void drawContents(QPainter* p); 81 void drawContents(QPainter* p);
77 void mouseMoveEvent( QMouseEvent * ); 82 void mouseMoveEvent( QMouseEvent * );
78 void mousePressEvent( QMouseEvent * ); 83 void mousePressEvent( QMouseEvent * );
79 84
80private: 85private:
81 int hue; 86 int hue;
82 int sat; 87 int sat;
83 88
@@ -586,79 +591,81 @@ void QColorShower::setRgb( QRgb rgb )
586 gEd->setNum( qGreen(currentColor()) ); 591 gEd->setNum( qGreen(currentColor()) );
587 bEd->setNum( qBlue(currentColor()) ); 592 bEd->setNum( qBlue(currentColor()) );
588 593
589 showCurrentColor(); 594 showCurrentColor();
590} 595}
591 596
592void QColorShower::setHsv( int h, int s, int v ) 597void QColorShower::setHsv( int h, int s, int v )
593{ 598{
594 rgbOriginal = FALSE; 599 rgbOriginal = FALSE;
595 hue = h; val = v; sat = s; //Range check### 600 hue = h; val = v; sat = s; //Range check###
596 curCol = QColor( hue, sat, val, QColor::Hsv ).rgb(); 601 curCol = QColor( hue, sat, val, QColor::Hsv ).rgb();
597 602
598 hEd->setNum( hue ); 603 hEd->setNum( hue );
599 sEd->setNum( sat ); 604 sEd->setNum( sat );
600 vEd->setNum( val ); 605 vEd->setNum( val );
601 606
602 rEd->setNum( qRed(currentColor()) ); 607 rEd->setNum( qRed(currentColor()) );
603 gEd->setNum( qGreen(currentColor()) ); 608 gEd->setNum( qGreen(currentColor()) );
604 bEd->setNum( qBlue(currentColor()) ); 609 bEd->setNum( qBlue(currentColor()) );
605 610
606 611
607 showCurrentColor(); 612 showCurrentColor();
608} 613}
609 614
615}
616
610class OColorDialogPrivate : public QObject 617class OColorDialogPrivate : public QObject
611{ 618{
612Q_OBJECT 619Q_OBJECT
613public: 620public:
614 OColorDialogPrivate( OColorDialog *p ); 621 OColorDialogPrivate( OColorDialog *p );
615 QRgb currentColor() const { return cs->currentColor(); } 622 QRgb currentColor() const { return cs->currentColor(); }
616 void setCurrentColor( QRgb rgb ); 623 void setCurrentColor( const QRgb& rgb );
617 624
618 int currentAlpha() const { return cs->currentAlpha(); } 625 int currentAlpha() const { return cs->currentAlpha(); }
619 void setCurrentAlpha( int a ) { cs->setCurrentAlpha( a ); } 626 void setCurrentAlpha( int a ) { cs->setCurrentAlpha( a ); }
620 void showAlpha( bool b ) { cs->showAlpha( b ); } 627 void showAlpha( bool b ) { cs->showAlpha( b ); }
621 628
622private slots: 629private slots:
623 void newHsv( int h, int s, int v ); 630 void newHsv( int h, int s, int v );
624 void newColorTypedIn( QRgb rgb ); 631 void newColorTypedIn( QRgb rgb );
625private: 632private:
626 QColorPicker *cp; 633 QColorPicker *cp;
627 QColorLuminancePicker *lp; 634 QColorLuminancePicker *lp;
628 QColorShower *cs; 635 QColorShower *cs;
629}; 636};
630 637
631//sets all widgets to display h,s,v 638//sets all widgets to display h,s,v
632void OColorDialogPrivate::newHsv( int h, int s, int v ) 639void OColorDialogPrivate::newHsv( int h, int s, int v )
633{ 640{
634 cs->setHsv( h, s, v ); 641 cs->setHsv( h, s, v );
635 cp->setCol( h, s ); 642 cp->setCol( h, s );
636 lp->setCol( h, s, v ); 643 lp->setCol( h, s, v );
637} 644}
638 645
639//sets all widgets to display rgb 646//sets all widgets to display rgb
640void OColorDialogPrivate::setCurrentColor( QRgb rgb ) 647void OColorDialogPrivate::setCurrentColor( const QRgb& rgb )
641{ 648{
642 cs->setRgb( rgb ); 649 cs->setRgb( rgb );
643 newColorTypedIn( rgb ); 650 newColorTypedIn( rgb );
644} 651}
645 652
646//sets all widgets exept cs to display rgb 653//sets all widgets exept cs to display rgb
647void OColorDialogPrivate::newColorTypedIn( QRgb rgb ) 654void OColorDialogPrivate::newColorTypedIn( QRgb rgb )
648{ 655{
649 int h, s, v; 656 int h, s, v;
650 rgb2hsv(rgb, h, s, v ); 657 rgb2hsv(rgb, h, s, v );
651 cp->setCol( h, s ); 658 cp->setCol( h, s );
652 lp->setCol( h, s, v); 659 lp->setCol( h, s, v);
653} 660}
654 661
655OColorDialogPrivate::OColorDialogPrivate( OColorDialog *dialog ) : 662OColorDialogPrivate::OColorDialogPrivate( OColorDialog *dialog ) :
656 QObject(dialog) 663 QObject(dialog)
657{ 664{
658 int border = 2; 665 int border = 2;
659 QVBoxLayout *topLay = new QVBoxLayout( dialog, border, 2 ); 666 QVBoxLayout *topLay = new QVBoxLayout( dialog, border, 2 );
660 667
661 QHBoxLayout *pickLay = new QHBoxLayout( topLay ); 668 QHBoxLayout *pickLay = new QHBoxLayout( topLay );
662 669
663 670
664 cp = new QColorPicker( dialog ); 671 cp = new QColorPicker( dialog );
@@ -705,86 +712,86 @@ OColorDialogPrivate::OColorDialogPrivate( OColorDialog *dialog ) :
705 712
706 <img src=qcolordlg-m.png> <img src=qcolordlg-w.png> 713 <img src=qcolordlg-m.png> <img src=qcolordlg-w.png>
707*/ 714*/
708 715
709/*! 716/*!
710 Constructs a default color dialog. Use setColor() for setting an initial value. 717 Constructs a default color dialog. Use setColor() for setting an initial value.
711 718
712 \sa getColor() 719 \sa getColor()
713*/ 720*/
714 721
715OColorDialog::OColorDialog(QWidget* parent, const char* name, bool modal) : 722OColorDialog::OColorDialog(QWidget* parent, const char* name, bool modal) :
716 QDialog(parent, name, modal ) 723 QDialog(parent, name, modal )
717{ 724{
718 d = new OColorDialogPrivate( this ); 725 d = new OColorDialogPrivate( this );
719} 726}
720 727
721 728
722/*! 729/*!
723 Pops up a modal color dialog letting the user choose a color and returns 730 Pops up a modal color dialog letting the user choose a color and returns
724 that color. The color is initially set to \a initial. Returns an \link QColor::isValid() invalid\endlink color if the user cancels 731 that color. The color is initially set to \a initial. Returns an \link QColor::isValid() invalid\endlink color if the user cancels
725 the dialog. All colors allocated by the dialog will be deallocated 732 the dialog. All colors allocated by the dialog will be deallocated
726 before this function returns. 733 before this function returns.
727*/ 734*/
728 735
729QColor OColorDialog::getColor( QColor initial, QWidget *parent, 736QColor OColorDialog::getColor( const QColor& initial, QWidget *parent,
730 const char *name ) 737 const char *name )
731{ 738{
732 int allocContext = QColor::enterAllocContext(); 739 int allocContext = QColor::enterAllocContext();
733 OColorDialog *dlg = new OColorDialog( parent, name, TRUE ); //modal 740 OColorDialog *dlg = new OColorDialog( parent, name, TRUE ); //modal
734 if ( parent && parent->icon() && !parent->icon()->isNull() ) 741 if ( parent && parent->icon() && !parent->icon()->isNull() )
735 dlg->setIcon( *parent->icon() ); 742 dlg->setIcon( *parent->icon() );
736 else if ( qApp->mainWidget() && qApp->mainWidget()->icon() && !qApp->mainWidget()->icon()->isNull() ) 743 else if ( qApp->mainWidget() && qApp->mainWidget()->icon() && !qApp->mainWidget()->icon()->isNull() )
737 dlg->setIcon( *qApp->mainWidget()->icon() ); 744 dlg->setIcon( *qApp->mainWidget()->icon() );
738 745
739 dlg->setCaption( OColorDialog::tr( "Select color" ) ); 746 dlg->setCaption( OColorDialog::tr( "Select color" ) );
740 dlg->setColor( initial ); 747 dlg->setColor( initial );
741 dlg->showMaximized(); 748 dlg->showMaximized();
742 int resultCode = dlg->exec(); 749 int resultCode = dlg->exec();
743 QColor::leaveAllocContext(); 750 QColor::leaveAllocContext();
744 QColor result; 751 QColor result;
745 if ( resultCode == QDialog::Accepted ) { 752 if ( resultCode == QDialog::Accepted ) {
746 result = dlg->color(); 753 result = dlg->color();
747 } else { 754 } else {
748 result = initial; 755 result = initial;
749 } 756 }
750 QColor::destroyAllocContext(allocContext); 757 QColor::destroyAllocContext(allocContext);
751 delete dlg; 758 delete dlg;
752 return result; 759 return result;
753} 760}
754 761
755 762
756/*! 763/*!
757 Pops up a modal color dialog, letting the user choose a color and an 764 Pops up a modal color dialog, letting the user choose a color and an
758 alpha channel value. The color+alpha is initially set to \a initial. 765 alpha channel value. The color+alpha is initially set to \a initial.
759 766
760 If \a ok is non-null, \c *ok is set to TRUE if the user clicked OK, 767 If \a ok is non-null, \c *ok is set to TRUE if the user clicked OK,
761 and FALSE if the user clicked Cancel. 768 and FALSE if the user clicked Cancel.
762 769
763 If the user clicks Cancel the \a initial value is returned. 770 If the user clicks Cancel the \a initial value is returned.
764*/ 771*/
765 772
766QRgb OColorDialog::getRgba( QRgb initial, bool *ok, 773QRgb OColorDialog::getRgba( const QRgb& initial, bool *ok,
767 QWidget *parent, const char* name ) 774 QWidget *parent, const char* name )
768{ 775{
769 int allocContext = QColor::enterAllocContext(); 776 int allocContext = QColor::enterAllocContext();
770 OColorDialog *dlg = new OColorDialog( parent, name, TRUE ); //modal 777 OColorDialog *dlg = new OColorDialog( parent, name, TRUE ); //modal
771 dlg->setColor( initial ); 778 dlg->setColor( initial );
772 dlg->setSelectedAlpha( qAlpha(initial) ); 779 dlg->setSelectedAlpha( qAlpha(initial) );
773 dlg->showMaximized(); 780 dlg->showMaximized();
774 int resultCode = dlg->exec(); 781 int resultCode = dlg->exec();
775 QColor::leaveAllocContext(); 782 QColor::leaveAllocContext();
776 QRgb result = initial; 783 QRgb result = initial;
777 if ( resultCode == QDialog::Accepted ) { 784 if ( resultCode == QDialog::Accepted ) {
778 QRgb c = dlg->color().rgb(); 785 QRgb c = dlg->color().rgb();
779 int alpha = dlg->selectedAlpha(); 786 int alpha = dlg->selectedAlpha();
780 result = qRgba( qRed(c), qGreen(c), qBlue(c), alpha ); 787 result = qRgba( qRed(c), qGreen(c), qBlue(c), alpha );
781 } 788 }
782 if ( ok ) 789 if ( ok )
783 *ok = resultCode == QDialog::Accepted; 790 *ok = resultCode == QDialog::Accepted;
784 791
785 QColor::destroyAllocContext(allocContext); 792 QColor::destroyAllocContext(allocContext);
786 delete dlg; 793 delete dlg;
787 return result; 794 return result;
788} 795}
789 796
790 797
@@ -798,49 +805,49 @@ QRgb OColorDialog::getRgba( QRgb initial, bool *ok,
798*/ 805*/
799 806
800QColor OColorDialog::color() const 807QColor OColorDialog::color() const
801{ 808{
802 return QColor(d->currentColor()); 809 return QColor(d->currentColor());
803} 810}
804 811
805 812
806/*! Destructs the dialog and frees any memory it allocated. 813/*! Destructs the dialog and frees any memory it allocated.
807 814
808*/ 815*/
809 816
810OColorDialog::~OColorDialog() 817OColorDialog::~OColorDialog()
811{ 818{
812 //d inherits QObject, so it is deleted by Qt. 819 //d inherits QObject, so it is deleted by Qt.
813} 820}
814 821
815 822
816/*! 823/*!
817 Sets the color shown in the dialog to \a c. 824 Sets the color shown in the dialog to \a c.
818 825
819 \sa color() 826 \sa color()
820*/ 827*/
821 828
822void OColorDialog::setColor( QColor c ) 829void OColorDialog::setColor( const QColor& c )
823{ 830{
824 d->setCurrentColor( c.rgb() ); 831 d->setCurrentColor( c.rgb() );
825} 832}
826 833
827 834
828 835
829 836
830/*! 837/*!
831 Sets the initial alpha channel value to \a a, and show the alpha channel 838 Sets the initial alpha channel value to \a a, and show the alpha channel
832 entry box. 839 entry box.
833*/ 840*/
834 841
835void OColorDialog::setSelectedAlpha( int a ) 842void OColorDialog::setSelectedAlpha( int a )
836{ 843{
837 d->showAlpha( TRUE ); 844 d->showAlpha( TRUE );
838 d->setCurrentAlpha( a ); 845 d->setCurrentAlpha( a );
839} 846}
840 847
841 848
842/*! 849/*!
843 Returns the value selected for the alpha channel. 850 Returns the value selected for the alpha channel.
844*/ 851*/
845 852
846int OColorDialog::selectedAlpha() const 853int OColorDialog::selectedAlpha() const