QPalette::ColorGroup and KColorScheme

Matthew Woehlke mw_triad at users.sourceforge.net
Mon Aug 13 20:42:01 BST 2007

On IRC, Casper Boemann pointed out that KColorScheme does not have any 
concept of widget state (active, inactive, disabled), and that the 
oxygen style will be making serious use of these. Well, this is news to 
me, possibly the first time anyone has ever really cared, but it's 
something that should be addressed.

Yes, this will mean more UI and more knobs for users to play with, and 
yes it means we will have 240 colors in out color schemes, although I do 
NOT intend to allow these to be set (as opposed to calculated); this 
does not change that most users only need to care about ~15 colors. 
Anyway I'm not even sure how much of the needed code will make 4.0 (IMO 
there are more important fish to fry) but this is all BC/SC stuff anyway.

More important is the SIC, which is that users really ought to say what 
QPalette::ColorGroup they are using (oh, and Qt seems to have forgotten 
about inactive+disabled). So I'm inclined to change the KColorScheme 
ctor to require an enum to specify this (alternatively it can be 
optional). Convenience ctors, e.g. taking a QPalette or even QWidget 
(assuming I can get the correct result from them) can be considered.

I talked to winterz, who told me to add this to 
http://techbase.kde.org/Projects/kdelibs (done); now I am asking for 
other thoughts on the best way to do this.

For people that like code, here is the proposal:

Index: kcolorscheme.h
--- kcolorscheme.h      (revision 699557)
+++ kcolorscheme.h      (working copy)
@@ -57,6 +57,14 @@
  class KDEUI_EXPORT KColorScheme {

+    enum ColorState {
+        ActiveState = 0x0,
+        InactiveState = 0x1,
+        DisabledState = 0x2,
+        InactiveDisabledState = InactiveState|DisabledState,
+        NormalState = ActiveState
+    };
       * This enumeration describes the color set for which a color is 
      * being selected.
@@ -258,7 +266,7 @@
       * Construct a palette from given color set, using the colors from
       * the given KConfig (if null, the system colors are used).
-    explicit KColorScheme(ColorSet = View,
+    explicit KColorScheme(QPalette::ColorGroup, ColorSet = View,
                            KSharedConfigPtr = KSharedConfigPtr());

       * Retrieve the requested background brush.

Again, for the moment the extra param is going to be ignored, it is 
eventually needed (but not sure how quickly I can write code for it), 
but the point is that KCS users should think about what color state 
(normal/inactive/disabled) they are in.

People say I'm going insane. I say, "what do you mean, 'going'?".

More information about the kde-core-devel mailing list