From fa5d50518e81eb42a8220c9c09abf01029d79091 Mon Sep 17 00:00:00 2001 From: tpearson Date: Thu, 25 Aug 2011 00:39:59 +0000 Subject: [PATCH] Add gamma configuration tab to display control module git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1249377 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kcontrol/displayconfig/CMakeLists.txt | 2 + kcontrol/displayconfig/displayconfig.cpp | 266 +++++++++++++++++- kcontrol/displayconfig/displayconfig.h | 11 + kcontrol/displayconfig/displayconfigbase.ui | 290 ++++++++++++++++++++ kcontrol/displayconfig/pics/CMakeLists.txt | 23 ++ kcontrol/displayconfig/pics/gamma1.4.gif | Bin 0 -> 1878 bytes kcontrol/displayconfig/pics/gamma1.4.png | Bin 0 -> 490 bytes kcontrol/displayconfig/pics/gamma1.6.gif | Bin 0 -> 1877 bytes kcontrol/displayconfig/pics/gamma1.6.png | Bin 0 -> 486 bytes kcontrol/displayconfig/pics/gamma1.8.gif | Bin 0 -> 1877 bytes kcontrol/displayconfig/pics/gamma1.8.png | Bin 0 -> 481 bytes kcontrol/displayconfig/pics/gamma2.0.gif | Bin 0 -> 1877 bytes kcontrol/displayconfig/pics/gamma2.0.png | Bin 0 -> 488 bytes kcontrol/displayconfig/pics/gamma2.2.gif | Bin 0 -> 1875 bytes kcontrol/displayconfig/pics/gamma2.2.png | Bin 0 -> 493 bytes kcontrol/displayconfig/pics/gamma2.4.gif | Bin 0 -> 1883 bytes kcontrol/displayconfig/pics/gamma2.4.png | Bin 0 -> 489 bytes 17 files changed, 587 insertions(+), 5 deletions(-) create mode 100644 kcontrol/displayconfig/pics/CMakeLists.txt create mode 100644 kcontrol/displayconfig/pics/gamma1.4.gif create mode 100644 kcontrol/displayconfig/pics/gamma1.4.png create mode 100644 kcontrol/displayconfig/pics/gamma1.6.gif create mode 100644 kcontrol/displayconfig/pics/gamma1.6.png create mode 100644 kcontrol/displayconfig/pics/gamma1.8.gif create mode 100644 kcontrol/displayconfig/pics/gamma1.8.png create mode 100644 kcontrol/displayconfig/pics/gamma2.0.gif create mode 100644 kcontrol/displayconfig/pics/gamma2.0.png create mode 100644 kcontrol/displayconfig/pics/gamma2.2.gif create mode 100644 kcontrol/displayconfig/pics/gamma2.2.png create mode 100644 kcontrol/displayconfig/pics/gamma2.4.gif create mode 100644 kcontrol/displayconfig/pics/gamma2.4.png diff --git a/kcontrol/displayconfig/CMakeLists.txt b/kcontrol/displayconfig/CMakeLists.txt index a96b60197..9f5192b9e 100644 --- a/kcontrol/displayconfig/CMakeLists.txt +++ b/kcontrol/displayconfig/CMakeLists.txt @@ -9,6 +9,8 @@ # ################################################# +add_subdirectory( pics ) + include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR} diff --git a/kcontrol/displayconfig/displayconfig.cpp b/kcontrol/displayconfig/displayconfig.cpp index 98285276a..3498327b0 100644 --- a/kcontrol/displayconfig/displayconfig.cpp +++ b/kcontrol/displayconfig/displayconfig.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include @@ -642,18 +643,84 @@ void KDisplayConfig::moveMonitor(DraggableMonitor* monitor, int realx, int realy monitor->move(base->monitorPhyArrange->width(), base->monitorPhyArrange->height()); } +// int KDisplayConfig::realResolutionSliderValue() { +// return base->resolutionSlider->maxValue() - base->resolutionSlider->value(); +// } +// +// void KDisplayConfig::setRealResolutionSliderValue(int index) { +// base->resolutionSlider->setValue(base->resolutionSlider->maxValue() - index); +// } + +TQStringList sortResolutions(TQStringList unsorted) { + int i; + int xres; + int largest; + TQStringList sorted; + TQStringList::Iterator it; + TQStringList::Iterator largestit; + + while (unsorted.count()) { + largest = -1; + for ( it = unsorted.begin(); it != unsorted.end(); ++it ) { + TQString resolutionstring = *it; + int separator_pos = resolutionstring.find(" x "); + TQString x_res_string = resolutionstring.left(separator_pos); + TQString y_res_string = resolutionstring.right(resolutionstring.length()-separator_pos-3); + xres = x_res_string.toInt(); + if (xres > largest) { + largest = xres; + largestit = it; + } + } + sorted.prepend(*largestit); + unsorted.remove(largestit); + } + + return sorted; +} + int KDisplayConfig::realResolutionSliderValue() { - return base->resolutionSlider->maxValue() - base->resolutionSlider->value(); + int i; + int j; + SingleScreenData *screendata; + + screendata = m_screenInfoArray.at(base->monitorDisplaySelectDD->currentItem()); + TQStringList sortedList = screendata->resolutions; + sortedList = sortResolutions(sortedList); + + j=0; + for (i=0; iresolutions.count(); i++) { + if ((*sortedList.at(base->resolutionSlider->value())) == (*screendata->resolutions.at(i))) { + j=i; + } + } + + return j; } void KDisplayConfig::setRealResolutionSliderValue(int index) { - base->resolutionSlider->setValue(base->resolutionSlider->maxValue() - index); + int i; + int j; + SingleScreenData *screendata; + + screendata = m_screenInfoArray.at(base->monitorDisplaySelectDD->currentItem()); + TQStringList sortedList = screendata->resolutions; + sortedList = sortResolutions(sortedList); + + j=0; + for (i=0; iresolutions.count(); i++) { + if ((*sortedList.at(i)) == (*screendata->resolutions.at(index))) { + j=i; + } + } + + base->resolutionSlider->setValue(j); } /**** KDisplayConfig ****/ KDisplayConfig::KDisplayConfig(TQWidget *parent, const char *name, const TQStringList &) - : KCModule(KDisplayCFactory::instance(), parent, name), m_randrsimple(0) + : KCModule(KDisplayCFactory::instance(), parent, name), m_randrsimple(0), m_gammaApplyTimer(0) { m_randrsimple = new KRandrSimpleAPI(); @@ -669,6 +736,9 @@ KDisplayConfig::KDisplayConfig(TQWidget *parent, const char *name, const TQStrin about->addAuthor("Timothy Pearson", 0, "kb9vqf@pearsoncomputing.net"); setAboutData( about ); + m_gammaApplyTimer = new TQTimer(); + connect(m_gammaApplyTimer, SIGNAL(timeout()), this, SLOT(applyGamma())); + base = new DisplayConfigBase(this); layout->add(base); @@ -678,12 +748,19 @@ KDisplayConfig::KDisplayConfig(TQWidget *parent, const char *name, const TQStrin connect(base->systemEnableSupport, TQT_SIGNAL(clicked()), TQT_SLOT(changed())); connect(base->systemEnableSupport, TQT_SIGNAL(clicked()), TQT_SLOT(processLockoutControls())); connect(base->monitorDisplaySelectDD, TQT_SIGNAL(activated(int)), TQT_SLOT(changed())); + connect(base->gammamonitorDisplaySelectDD, TQT_SIGNAL(activated(int)), TQT_SLOT(changed())); + connect(base->gammaTargetSelectDD, TQT_SIGNAL(activated(int)), TQT_SLOT(gammaTargetChanged(int))); connect(base->rotationSelectDD, TQT_SIGNAL(activated(int)), TQT_SLOT(rotationInfoChanged())); connect(base->refreshRateDD, TQT_SIGNAL(activated(int)), TQT_SLOT(refreshInfoChanged())); connect(base->orientationHFlip, TQT_SIGNAL(clicked()), TQT_SLOT(rotationInfoChanged())); connect(base->orientationVFlip, TQT_SIGNAL(clicked()), TQT_SLOT(rotationInfoChanged())); connect(base->resolutionSlider, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(resolutionSliderChanged(int))); + connect(base->gammaAllSlider, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(gammaAllSliderChanged(int))); + connect(base->gammaRedSlider, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(gammaRedSliderChanged(int))); + connect(base->gammaGreenSlider, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(gammaGreenSliderChanged(int))); + connect(base->gammaBlueSlider, TQT_SIGNAL(valueChanged(int)), TQT_SLOT(gammaBlueSliderChanged(int))); connect(base->monitorDisplaySelectDD, TQT_SIGNAL(activated(int)), TQT_SLOT(selectScreen(int))); + connect(base->gammamonitorDisplaySelectDD, TQT_SIGNAL(activated(int)), TQT_SLOT(gammaselectScreen(int))); connect(base->monitorPhyArrange, TQT_SIGNAL(workspaceRelayoutNeeded()), this, TQT_SLOT(layoutDragDropDisplay())); connect(base->isPrimaryMonitorCB, TQT_SIGNAL(clicked()), TQT_SLOT(changed())); @@ -708,6 +785,10 @@ KDisplayConfig::KDisplayConfig(TQWidget *parent, const char *name, const TQStrin KDisplayConfig::~KDisplayConfig() { delete systemconfig; + if (m_gammaApplyTimer) { + delete m_gammaApplyTimer; + m_gammaApplyTimer = 0; + } if (m_randrsimple) { delete m_randrsimple; m_randrsimple = 0; @@ -750,7 +831,7 @@ void KDisplayConfig::identifyMonitors () { ScreenInfo *randr_screen_info; XRROutputInfo *output_info; - randr_display = XOpenDisplay(NULL); + randr_display = qt_xdisplay(); randr_screen_info = m_randrsimple->read_screen_info(randr_display); for (i = 0; i < randr_screen_info->n_output; i++) { @@ -774,6 +855,8 @@ void KDisplayConfig::identifyMonitors () { KDialog::centerOnScreen(idWidget, i); TQTimer::singleShot(3000, idWidget, SLOT(close())); } + + m_randrsimple->freeScreenInfoStructure(randr_screen_info); } void KDisplayConfig::deleteProfile () { @@ -803,6 +886,7 @@ void KDisplayConfig::selectProfile (int slotNumber) { void KDisplayConfig::selectScreen (int slotNumber) { base->monitorDisplaySelectDD->setCurrentItem(slotNumber); + base->gammamonitorDisplaySelectDD->setCurrentItem(slotNumber); updateDisplayedInformation(); } @@ -920,6 +1004,12 @@ void KDisplayConfig::refreshDisplayedInformation () { base->monitorDisplaySelectDD->insertItem(screendata->screenFriendlyName, i); } base->monitorDisplaySelectDD->setCurrentItem(currentScreenIndex); + base->gammamonitorDisplaySelectDD->clear(); + for (i=0;igammamonitorDisplaySelectDD->insertItem(screendata->screenFriendlyName, i); + } + base->gammamonitorDisplaySelectDD->setCurrentItem(currentScreenIndex); updateDisplayedInformation(); @@ -956,7 +1046,7 @@ void KDisplayConfig::updateDragDropDisplay() { for (j=0;j<2;j++) { for (i=0;iis_primary==true)) || (j==1)) { // This ensures that the primary monitor is always the first one created and placed on the configuration widget + if (((j==0) && (screendata->is_primary==true)) || ((j==1) && (screendata->is_primary==false))) { // This ensures that the primary monitor is always the first one created and placed on the configuration widget TQString rotationDesired = *screendata->rotations.at(screendata->current_rotation_index); bool isvisiblyrotated = ((rotationDesired == "Rotate 90 degrees") || (rotationDesired == "Rotate 270 degrees")); DraggableMonitor *m = new DraggableMonitor( base->monitorPhyArrange, 0, WStyle_Customize | WDestructiveClose | WStyle_NoBorder | WX11BypassWM ); @@ -1080,18 +1170,173 @@ int KDisplayConfig::findScreenIndex(TQString screenName) { } +void KDisplayConfig::setGammaLabels() { + SingleScreenData *screendata; + + screendata = m_screenInfoArray.at(base->gammamonitorDisplaySelectDD->currentItem()); + + // Round off the gammas to one decimal place + screendata->gamma_red = floorf(screendata->gamma_red * 10 + 0.5) / 10; + screendata->gamma_green = floorf(screendata->gamma_green * 10 + 0.5) / 10; + screendata->gamma_blue = floorf(screendata->gamma_blue * 10 + 0.5) / 10; + + // Set the labels + base->gammaAllLabel->setText(TQString("%1").tqarg(((float)base->gammaAllSlider->value())/10.0, 0, 'f', 1)); + base->gammaRedLabel->setText(TQString("%1").tqarg(((float)base->gammaRedSlider->value())/10.0, 0, 'f', 1)); + base->gammaGreenLabel->setText(TQString("%1").tqarg(((float)base->gammaGreenSlider->value())/10.0, 0, 'f', 1)); + base->gammaBlueLabel->setText(TQString("%1").tqarg(((float)base->gammaBlueSlider->value())/10.0, 0, 'f', 1)); +} + +void KDisplayConfig::gammaSetAverageAllSlider() { + float average_gamma; + SingleScreenData *screendata; + + screendata = m_screenInfoArray.at(base->gammamonitorDisplaySelectDD->currentItem()); + average_gamma = (screendata->gamma_red+screendata->gamma_green+screendata->gamma_blue)/3.0; + average_gamma = floorf(average_gamma* 10 + 0.5) / 10; // Round off the gamma to one decimal place + base->gammaAllSlider->setValue(average_gamma*10.0); +} + +void KDisplayConfig::gammaselectScreen (int slotNumber) { + SingleScreenData *screendata; + + base->gammaAllSlider->blockSignals(true); + base->gammaRedSlider->blockSignals(true); + base->gammaGreenSlider->blockSignals(true); + base->gammaBlueSlider->blockSignals(true); + + screendata = m_screenInfoArray.at(base->gammamonitorDisplaySelectDD->currentItem()); + base->gammaRedSlider->setValue(screendata->gamma_red*10.0); + base->gammaGreenSlider->setValue(screendata->gamma_green*10.0); + base->gammaBlueSlider->setValue(screendata->gamma_blue*10.0); + gammaSetAverageAllSlider(); + setGammaLabels(); + + base->gammaAllSlider->blockSignals(false); + base->gammaRedSlider->blockSignals(false); + base->gammaGreenSlider->blockSignals(false); + base->gammaBlueSlider->blockSignals(false); +} + +void KDisplayConfig::gammaAllSliderChanged(int index) { + SingleScreenData *screendata; + + base->gammaAllSlider->blockSignals(true); + base->gammaRedSlider->blockSignals(true); + base->gammaGreenSlider->blockSignals(true); + base->gammaBlueSlider->blockSignals(true); + + screendata = m_screenInfoArray.at(base->gammamonitorDisplaySelectDD->currentItem()); + + base->gammaRedSlider->setValue(base->gammaAllSlider->value()); + base->gammaGreenSlider->setValue(base->gammaAllSlider->value()); + base->gammaBlueSlider->setValue(base->gammaAllSlider->value()); + setGammaLabels(); + + screendata->gamma_red = ((float)base->gammaAllSlider->value())/10.0; + screendata->gamma_green = ((float)base->gammaAllSlider->value())/10.0; + screendata->gamma_blue = ((float)base->gammaAllSlider->value())/10.0; + + m_gammaApplyTimer->start(10, TRUE); + + base->gammaAllSlider->blockSignals(false); + base->gammaRedSlider->blockSignals(false); + base->gammaGreenSlider->blockSignals(false); + base->gammaBlueSlider->blockSignals(false); + + changed(); +} + +void KDisplayConfig::gammaRedSliderChanged(int index) { + SingleScreenData *screendata; + + base->gammaAllSlider->blockSignals(true); + base->gammaRedSlider->blockSignals(true); + base->gammaGreenSlider->blockSignals(true); + base->gammaBlueSlider->blockSignals(true); + + screendata = m_screenInfoArray.at(base->gammamonitorDisplaySelectDD->currentItem()); + screendata->gamma_red = ((float)index)/10.0; + gammaSetAverageAllSlider(); + setGammaLabels(); + m_gammaApplyTimer->start(10, TRUE); + + base->gammaAllSlider->blockSignals(false); + base->gammaRedSlider->blockSignals(false); + base->gammaGreenSlider->blockSignals(false); + base->gammaBlueSlider->blockSignals(false); + + changed(); +} + +void KDisplayConfig::gammaGreenSliderChanged(int index) { + SingleScreenData *screendata; + + base->gammaAllSlider->blockSignals(true); + base->gammaRedSlider->blockSignals(true); + base->gammaGreenSlider->blockSignals(true); + base->gammaBlueSlider->blockSignals(true); + + screendata = m_screenInfoArray.at(base->gammamonitorDisplaySelectDD->currentItem()); + screendata->gamma_green = ((float)index)/10.0; + gammaSetAverageAllSlider(); + setGammaLabels(); + m_gammaApplyTimer->start(10, TRUE); + + base->gammaAllSlider->blockSignals(false); + base->gammaRedSlider->blockSignals(false); + base->gammaGreenSlider->blockSignals(false); + base->gammaBlueSlider->blockSignals(false); + + changed(); +} + +void KDisplayConfig::gammaBlueSliderChanged(int index) { + SingleScreenData *screendata; + + base->gammaAllSlider->blockSignals(true); + base->gammaRedSlider->blockSignals(true); + base->gammaGreenSlider->blockSignals(true); + base->gammaBlueSlider->blockSignals(true); + + screendata = m_screenInfoArray.at(base->gammamonitorDisplaySelectDD->currentItem()); + screendata->gamma_blue = ((float)index)/10.0; + gammaSetAverageAllSlider(); + setGammaLabels(); + m_gammaApplyTimer->start(10, TRUE); + + base->gammaAllSlider->blockSignals(false); + base->gammaRedSlider->blockSignals(false); + base->gammaGreenSlider->blockSignals(false); + base->gammaBlueSlider->blockSignals(false); + + changed(); +} + +void KDisplayConfig::applyGamma() { + m_randrsimple->applySystemwideDisplayGamma(m_screenInfoArray); +} + +void KDisplayConfig::gammaTargetChanged (int slotNumber) { + TQPixmap gammaPixmap( locate("data", TQString("kcontrol/pics/gamma%1.png").arg(base->gammaTargetSelectDD->text(slotNumber))) ); + base->gammaTestImage->setBackgroundPixmap( gammaPixmap ); +} + void KDisplayConfig::processLockoutControls() { if (getuid() != 0 || !systemconfig->checkConfigFilesWritable( true )) { base->globalTab->setEnabled(false); base->resolutionTab->setEnabled(false); + base->gammaTab->setEnabled(false); } else { base->globalTab->setEnabled(true); if (base->systemEnableSupport->isChecked()) { base->resolutionTab->setEnabled(true); + base->gammaTab->setEnabled(true); } else { base->resolutionTab->setEnabled(false); + base->gammaTab->setEnabled(false); } } @@ -1133,6 +1378,17 @@ void KDisplayConfig::load(bool useDefaults ) refreshDisplayedInformation(); + gammaselectScreen(base->gammamonitorDisplaySelectDD->currentItem()); + base->gammaTargetSelectDD->clear(); + base->gammaTargetSelectDD->insertItem("1.4", 0); + base->gammaTargetSelectDD->insertItem("1.6", 1); + base->gammaTargetSelectDD->insertItem("1.8", 2); + base->gammaTargetSelectDD->insertItem("2.0", 3); + base->gammaTargetSelectDD->insertItem("2.2", 4); + base->gammaTargetSelectDD->insertItem("2.4", 5); + base->gammaTargetSelectDD->setCurrentItem(4); + gammaTargetChanged(4); + emit changed(useDefaults); } diff --git a/kcontrol/displayconfig/displayconfig.h b/kcontrol/displayconfig/displayconfig.h index 835f1209a..cddb8186e 100644 --- a/kcontrol/displayconfig/displayconfig.h +++ b/kcontrol/displayconfig/displayconfig.h @@ -91,6 +91,10 @@ private: bool applyMonitorLayoutRules(void); bool applyMonitorLayoutRules(DraggableMonitor* primary_monitor); void updateDraggableMonitorInformationInternal (int, bool); + TQTimer* m_gammaApplyTimer; + void gammaSetAverageAllSlider(); + void setGammaLabels(); + void generateSortedResolutions(); private slots: void selectProfile (int slotNumber); @@ -114,6 +118,13 @@ private slots: void identifyMonitors (void); void rescanHardware (void); void reloadProfile (void); + void gammaAllSliderChanged(int index); + void gammaRedSliderChanged(int index); + void gammaGreenSliderChanged(int index); + void gammaBlueSliderChanged(int index); + void applyGamma(); + void gammaselectScreen (int slotNumber); + void gammaTargetChanged (int slotNumber); }; #endif diff --git a/kcontrol/displayconfig/displayconfigbase.ui b/kcontrol/displayconfig/displayconfigbase.ui index cbffc91fd..a0d73f4e9 100644 --- a/kcontrol/displayconfig/displayconfigbase.ui +++ b/kcontrol/displayconfig/displayconfigbase.ui @@ -302,6 +302,296 @@ + + + gammaTab + + + Brightness and Gamma + + + + unnamed + + + + unnamed + + + + textLabel7_4 + + + Display: + + + + + gammamonitorDisplaySelectDD + + + + + groupGamma + + + Gamma + + + + + groupGammaImages + + + Visual Calibration Aid + + + + + gammaTestImage + + + + 305 + 105 + + + + + 305 + 105 + + + + + + textLabel7_4 + + + Target gamma: + + + + + gammaTargetSelectDD + + + + + Spacer6 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + Spacer7 + + + Horizontal + + + Expanding + + + + 20 + 20 + + + + + + + + groupHardware + + + Hardware Gamma Control + + + + + textLabel7_0 + + + All + + + + + gammaAllSlider + + + 30 + + + Horizontal + + + Below + + + 1 + + + + + gammaAllLabel + + + + + + + + textLabel7_1 + + + Red + + + + + gammaRedSlider + + + 30 + + + Horizontal + + + Below + + + 1 + + + + + gammaRedLabel + + + + + + + + textLabel7_2 + + + Green + + + + + gammaGreenSlider + + + 30 + + + Horizontal + + + Below + + + 1 + + + + + gammaGreenLabel + + + + + + + + textLabel7_3 + + + Blue + + + + + gammaBlueSlider + + + 30 + + + Horizontal + + + Below + + + 1 + + + + + gammaBlueLabel + + + + + + + + + + gammaTipText + + + Adjust the gamma sliders to make the squares above fade into their backgrounds as much as possible. + + + + + gammaTipText2 + + + Tip: Most computer software expects a gamma of 2.2. + + + + + Spacer4 + + + Vertical + + + Expanding + + + + 20 + 20 + + + + + + + + diff --git a/kcontrol/displayconfig/pics/CMakeLists.txt b/kcontrol/displayconfig/pics/CMakeLists.txt new file mode 100644 index 000000000..bfee8505e --- /dev/null +++ b/kcontrol/displayconfig/pics/CMakeLists.txt @@ -0,0 +1,23 @@ +################################################# +# +# (C) 2010-2011 Serghei Amelian +# serghei (DOT) amelian (AT) gmail.com +# +# Improvements and feedback are welcome +# +# This file is released under GPL >= 2 +# +################################################# + +install( FILES gamma1.4.gif DESTINATION ${DATA_INSTALL_DIR}/kcontrol/pics ) +install( FILES gamma1.4.png DESTINATION ${DATA_INSTALL_DIR}/kcontrol/pics ) +install( FILES gamma1.6.gif DESTINATION ${DATA_INSTALL_DIR}/kcontrol/pics ) +install( FILES gamma1.6.png DESTINATION ${DATA_INSTALL_DIR}/kcontrol/pics ) +install( FILES gamma1.8.gif DESTINATION ${DATA_INSTALL_DIR}/kcontrol/pics ) +install( FILES gamma1.8.png DESTINATION ${DATA_INSTALL_DIR}/kcontrol/pics ) +install( FILES gamma2.0.gif DESTINATION ${DATA_INSTALL_DIR}/kcontrol/pics ) +install( FILES gamma2.0.png DESTINATION ${DATA_INSTALL_DIR}/kcontrol/pics ) +install( FILES gamma2.2.gif DESTINATION ${DATA_INSTALL_DIR}/kcontrol/pics ) +install( FILES gamma2.2.png DESTINATION ${DATA_INSTALL_DIR}/kcontrol/pics ) +install( FILES gamma2.4.gif DESTINATION ${DATA_INSTALL_DIR}/kcontrol/pics ) +install( FILES gamma2.4.png DESTINATION ${DATA_INSTALL_DIR}/kcontrol/pics ) \ No newline at end of file diff --git a/kcontrol/displayconfig/pics/gamma1.4.gif b/kcontrol/displayconfig/pics/gamma1.4.gif new file mode 100644 index 0000000000000000000000000000000000000000..3813ffe79c33c734b64fc6cb370472c78696b8de GIT binary patch literal 1878 zcmV-c2dVf+Nk%w1VKD(|0J8u900000UteDUUteDUUteDUUz}e6oL^s@0GwZ6oB&^( zUz`A6oL>N(UtgS@oB#j-EC2ui05Jh+000F3kjP1^y*TU5yZ>M)j$~<`XsWJk>%MR- z&vb3yc&_h!@BhG{a7Zi~kI1BQ$!t2G(5Q4uty-_xtai)odcWYXcuX#v&*-#z&2GEj z@VIMDijE{;H0tAzll$Vy7n46lNoS&K%2Lz*~ zq^G8-sH>{2tgosS00gtOw70goxVyT&yuZ3R0mH<_#>dFX%FD?V3eV8d($mz{*4Nb( z1KZr)-rwNi;^W~I4(I6U>g(+7?(gk64fFK%_V@Vt`uq750{;L53LHqVpuvL$DI8eH zu%W|;5F<*Q7?A>iix@L%+{m$`$B+IUg)tjRvgAl-*ix!onNl0MmoQ_#GzYJy&6_pl z@!QF>=T3hJg9;rQR3XKqNRuA52(qcur%gqgoJy4>N|so&s&px{t5=vbaf%&lQ>V|f zXn6u9%C@agqe|n-MamSa-MdbuR^7{&*j25714HBbwXk7sVaY09jLvM@$B^l*bxXN2 zK)7==Yi3v%ujkJg_4XY-^{?R5SP36q-8C`e*J2$5riLC$03wQPwppTz z60k_)oOH%$qXaqT8Pbj;5$WfjLRxhsHc%F7sFPbwNe-8cHmW69Uxq2^Ib+^)=A~z* zNl8#{cIqaaq#RY}sCC{+i=L>4#wRm?whE}A63BPxtcE5kL4c0t+9;$FOzLZ;_FyXP zhMKPF>9KDXwW6q`{x&P4si{UQ-Z8FLJ0z?G$V%(BP1;HTuDXVsC9eedIw`RA46E*i z#d3=5yCQ-rr?d372yL{ePHT*{{Qiiow%i6B>tJ$M3R=VkBDn8KaojMK??4!y)`(3r${wMC#=+1fA-;V7&qreAG*6_p=i@KVs zBafo;4>4bA)p$PtTlCTsN&Pg|AIf_;+dJC5_pwd5Q}|{woi4Ak87zO?8(g{gCp`c01AxUF-=-u+!1J{(R5U{%jhx58ysT;&5A@Ug zq(Q+#S@0Ve%wXs?$ieS%z$p4?hS8{E1+iDMEGA5YT=bzA{|Ckl z4G|z@G?5t@g2p9w$7*W~&J&^7o<_RIk&T379Qi}Z{#25ZSH$9iHpw7PZgPuxbVt&t zLmlg2=ad7{4tG}h5bq>1Jc}fbERSIvU+2Nz6$gk(J1F zh$~;|k-N>3G_|~?G!>A`U0So3zKq8YgUQW$46~T0RAn+*xlCqq#F@|ROEjlx%W7Iv zm)OkaI)K^D$9xl<*AeG9xl>MaY6P9>+{-%Ic^r4Xb2;&pXFBLvPqf?Eo;u>EJ`JiPJ_L%Qdg7=?O{ynW1dFD+;;BxJsw-{;jH>$Ls#eXaF9N~Uu6p&W zU=6ES$4b_+n)R$`O{-eh%GS2J^{sG?D-AM|gNtCmu5$GQUh!Iki`FHteczP7i=-K}Dg63dj~I`_HI QjjnX3OWo?0AOZjYJK{RQ@c;k- literal 0 HcmV?d00001 diff --git a/kcontrol/displayconfig/pics/gamma1.4.png b/kcontrol/displayconfig/pics/gamma1.4.png new file mode 100644 index 0000000000000000000000000000000000000000..f193a4c09fb6214de01270fadc2c1d471726d7cc GIT binary patch literal 490 zcmeAS@N?(olHy`uVBq!ia0y~yU^E1>Gg+8{3`+x z_ort~a-%NJ6k58SF>OX-nB6#tSrTQ=wC3cDY7US6En|7!R7 z=*w?@Ty-x!p1$z3w|wYFPLsuwXEWT4XKkG|H?r;QJKfOD?x#i0=J9MloVNRX+p3#e zA7*u>J#X7}vvXnAx0D4C#TR?hVESOpZ~3!xrC;UWUJlf=FY)mH+|Tw65JhIo)09`} zxm|e5u`01;+08u%c#O|H<4mj1S3CPT`G-}BareT?zn>DOeOMeQJo{vpOQm;C+P0kqSf!yR>v*m_-^WbknOBW-K@?vJ6o^sXP%W->ATzP o@}}p~t8dM)j$~<`XsWJk>%MR- z&vb3yc&_h!@BhG{a7Zi~kI1BQ$!t2G(5Q4uty-_xtai)odcWYXcuX#v&*-#z&2GEj z@VIMDijE{;H0tAzll$Vy7n46lNoS&K%2Lz*~ zq^G8-sH>{2tgosS00gtOw70goxVyT&yuZ3R0mH<_#>dFX%FD?V3eV8d($mz{*4Nb( z1KZr)-rwNi;^W~I4(I6U>g(+7?(gk64fFK%_V@Vt`uq750{;L53LHqVpuvL$DI8eH zu%W|;5F<*Q7?A>iix@L%+{m$`$B+IUg)tjRvgAl-*ix!onNl0MmoQ_#GzYJy&6_pl z@!QF>=T3hJg9;rQR3XKqNRuA52(qcur%gqgoJy4>N|so&s&px{t5=vbaf%&lQ>V|f zXn6u9%C@agqe|n-MamSa-MdbuR^7{&*j25714HBbwXk7sVaY09jLvM@$B^l*bxXN2 zK)7==Yi3v%ujkJg_4XY-^{?R5SP36q-8C`e*J2$5riLC$03wQPwppTz z60k_)oOH%$qXaqT8Pbj;5$WfjLRxhsHc%F7sFPbwNe-8cHmW69Uxq2^Ib+^)=A~z* zNl8#{cIqaaq#RY}sCC{+i=L>4#wRm?whE}A63BPxtcE5kL4c0t+9;$FOzLZ;_FyXP zhMKPF>9KDXwW6q`{x&P4si{UQ-Z8FLJ0z?G$V%(BP1;HTuDXVsC9eedIw`RA46E*i z#d3=5yCQ-rr?d372yL{ePHT*{{Qiiow%i6B>tJ$M3R=VkBDn8KaojMK??4!y)`(3r${wMC#=+1fA-;V7&qreAG*6_p=i@KVs zBafo;4>4bA)p$PtTlCTsN&Pg|AIf_;+dJC5_pwd5Q}|{woi4Ak87zO?8(g{gCp`c01AxUF-=-u+!1J{(R5U{%jhx58ysT;&5A@Ug zq(Q+#S@0Ve%wXs?$ieS%z$p4?hS8{E1+iDMEGA5YT=bzA{|Ckl z4G|z@G?5t@g2p9w$7*W~&J&^7o<_RIk&T379Qi}Z{#25ZSH$9iHpw7PZgPuxbVt&t zLmlg2=ad7{4tG}h5bq>1Jc}fbERSIvU+2Nz6$gk(J1F zh$~;|k-N>3G_|~?G!>A`U0So3zKq8YgUQW$46~T0RAn+*xlCqq#F@|ROEjlx%W7Iv zm)OkaI)K^D$9xl<*AeG9xl>MaY6P9>+{-%Ic^r4Xb2;&pXFBLvPqf?Eo;u>EJ`JiPJ_L%Qdg7=?O{ynW1dFD+;;BxJsw-{;jH>$Ls#eXaF9N~Uu6p&W zU=6ES$4b_+n)R$`O{-eh%GS2J^{sG?YYj4zgNs<;qH^tnT~Bobyz+IgdEEnG>(ah+ zE^s4=l!adh8(6`@)FSQUt7PrE*UH*LvUtL5VISMrJXjW{bhT_`MLSu)YWA<3?W`RD zOW9huHnOONZEH_^+S#hsv!H#gZADAk*)q1YvAr#BSsR+(z81KLy=!g@5i8v0I`_HI PjjnX3OWhJg0000xTA{!% literal 0 HcmV?d00001 diff --git a/kcontrol/displayconfig/pics/gamma1.6.png b/kcontrol/displayconfig/pics/gamma1.6.png new file mode 100644 index 0000000000000000000000000000000000000000..0110dad2611e5c98592d2871b2e845b7d7457386 GIT binary patch literal 486 zcmeAS@N?(olHy`uVBq!ia0y~yU^E1>Gg+8{rg$iEWZF;@Xurwr*cd(j*FnjbjX!<&|v`U;Inx^OAIT!&UKy z^Fud(?w7dQJY(j${NxZ-wTnGzCW|G{W`t#zJ&nx$_C|Bo-YT<;Zw`LkaqCUNLycK? zt=|E;w*t*}7l@p_Cj(aNW;_d~4Z-}EySdi=XYTJyfhN{vZ+>jg{l|U*Vs=%QS>vl5 zrn&wLW~r^1^_3Oq&}-^5a_{T(-z!nh$@+Wd+8LK@=A10Q*S&F+5D{}&kG44$rjF6*2Ung9d|(=h-5 literal 0 HcmV?d00001 diff --git a/kcontrol/displayconfig/pics/gamma1.8.gif b/kcontrol/displayconfig/pics/gamma1.8.gif new file mode 100644 index 0000000000000000000000000000000000000000..a73c8324961e5f0dcadb729dcbf91fca3bf27800 GIT binary patch literal 1877 zcmV-b2del-Nk%w1VKD(|0J8u900000c6N3Ec6N3Ec6N3EcCK~+u6A~=0Iqg+t^jtf zcCG++u66*fc6P3=t^fc4EC2ui05Jh+000F3kjP1^y*TU5yZ>M)j$~<`XsWJk>%MR- z&vb3yc&_h!@BhG{a7Zi~kI1BQ$!t2G(5Q4uty-_xtai)odcWYXcuX#v&*-#z&2GEj z@VIMDijE{;H0tAzll$Vy7n46lNoS&K%2Lz*~ zq^G8-sH>{2tgosS00gtOw70goxVyT&yuZ3R0mH<_#>dFX%FD?V3eV8d($mz{*4Nb( z1KZr)-rwNi;^W~I4(I6U>g(+7?(gk64fFK%_V@Vt`uq750{;L53LHqVpuvL$DI8eH zu%W|;5F<*Q7?A>iix@L%+{m$`$B+IUg)tjRvgAl-*ix!onNl0MmoQ_#GzYJy&6_pl z@!QF>=T3hJg9;rQR3XKqNRuA52(qcur%gqgoJy4>N|so&s&px{t5=vbaf%&lQ>V|f zXn6u9%C@agqe|n-MamSa-MdbuR^7{&*j25714HBbwXk7sVaY09jLvM@$B^l*bxXN2 zK)7==Yi3v%ujkJg_4XY-^{?R5SP36q-8C`e*J2$5riLC$03wQPwppTz z60k_)oOH%$qXaqT8Pbj;5$WfjLRxhsHc%F7sFPbwNe-8cHmW69Uxq2^Ib+^)=A~z* zNl8#{cIqaaq#RY}sCC{+i=L>4#wRm?whE}A63BPxtcE5kL4c0t+9;$FOzLZ;_FyXP zhMKPF>9KDXwW6q`{x&P4si{UQ-Z8FLJ0z?G$V%(BP1;HTuDXVsC9eedIw`RA46E*i z#d3=5yCQ-rr?d372yL{ePHT*{{Qiiow%i6B>tJ$M3R=VkBDn8KaojMK??4!y)`(3r${wMC#=+1fA-;V7&qreAG*6_p=i@KVs zBafo;4>4bA)p$PtTlCTsN&Pg|AIf_;+dJC5_pwd5Q}|{woi4Ak87zO?8(g{gCp`c01AxUF-=-u+!1J{(R5U{%jhx58ysT;&5A@Ug zq(Q+#S@0Ve%wXs?$ieS%z$p4?hS8{E1+iDMEGA5YT=bzA{|Ckl z4G|z@G?5t@g2p9w$7*W~&J&^7o<_RIk&T379Qi}Z{#25ZSH$9iHpw7PZgPuxbVt&t zLmlg2=ad7{4tG}h5bq>1Jc}fbERSIvU+2Nz6$gk(J1F zh$~;|k-N>3G_|~?G!>A`U0So3zKq8YgUQW$46~T0RAn+*xlCqq#F@|ROEjlx%W7Iv zm)OkaI)K^D$9xl<*AeG9xl>MaY6P9>+{-%Ic^r4Xb2;&pXFBLvPqf?Eo;u>EJ`JiPJ_L%Qdg7=?O{ynW1dFD+;;BxJsw-{;jH>$Ls#eXaF9N~Uu6p&W zU=6ES$4b_+n)R$`O{-eh%GS2J^{sG?YYj4zgNs<;qH^tnT~Bobyz+IgdEEnG>(ah+ zE^s4=l!agII@rMCp|Q94D@^yw*vVQpvV*M!ObP2)!CLmSnr)wGDSO$&-gUF1MQvy8 z0NBb(R>uVv~Sl6yL52T%KX>FTZ+cG7!vc2tNFG|Gg+8{+MWMKNdp? zH|;7$9(D!oLJyxt{m9lM4-Dosv?w1C6|gXfPziTPD$F={Kt#a!@9g>`dbiUm^Pi~v z-?K+;ZkpPP;Gm4$2FbJ;iES{#)U^8Z#J<`#!En37%(bu5+^y{{O+Mf3$5*q&e}4a} zn=g0wZ+X7?!lzsATy_)FOcqO?&2ZZswVC_$mYa*0W_-(ubl+@!`0tjR|5h)|D9hdf z* zxYh2=B&V*Qr~W#f5={PmRi>qA^~9Uy`lT0hF3d9NuAT9BSI8Ns?9F?!L&A->+%x^h ecV^qEH{6N3dEeJqT(|=aYX(nOKbLh*2~7Z%SkSlt literal 0 HcmV?d00001 diff --git a/kcontrol/displayconfig/pics/gamma2.0.gif b/kcontrol/displayconfig/pics/gamma2.0.gif new file mode 100644 index 0000000000000000000000000000000000000000..2e98232a495656f89d78230f7dac8f0c8340d54f GIT binary patch literal 1877 zcmV-b2del-Nk%w1VKD(|0J8u900000fPjDifPjDifPjDifVF@CwSa)N0JVUCwE%#% zfVBXCwSWM%fPl5NwEzGBEC2ui05Jh+000F3kjP1^y*TU5yZ>M)j$~<`XsWJk>%MR- z&vb3yc&_h!@BhG{a7Zi~kI1BQ$!t2G(5Q4uty-_xtai)odcWYXcuX#v&*-#z&2GEj z@VIMDijE{;H0tAzll$Vy7n46lNoS&K%2Lz*~ zq^G8-sH>{2tgosS00gtOw70goxVyT&yuZ3R0mH<_#>dFX%FD?V3eV8d($mz{*4Nb( z1KZr)-rwNi;^W~I4(I6U>g(+7?(gk64fFK%_V@Vt`uq750{;L53LHqVpuvL$DI8eH zu%W|;5F<*Q7?A>iix@L%+{m$`$B+IUg)tjRvgAl-*ix!onNl0MmoQ_#GzYJy&6_pl z@!QF>=T3hJg9;rQR3XKqNRuA52(qcur%gqgoJy4>N|so&s&px{t5=vbaf%&lQ>V|f zXn6u9%C@agqe|n-MamSa-MdbuR^7{&*j25714HBbwXk7sVaY09jLvM@$B^l*bxXN2 zK)7==Yi3v%ujkJg_4XY-^{?R5SP36q-8C`e*J2$5riLC$03wQPwppTz z60k_)oOH%$qXaqT8Pbj;5$WfjLRxhsHc%F7sFPbwNe-8cHmW69Uxq2^Ib+^)=A~z* zNl8#{cIqaaq#RY}sCC{+i=L>4#wRm?whE}A63BPxtcE5kL4c0t+9;$FOzLZ;_FyXP zhMKPF>9KDXwW6q`{x&P4si{UQ-Z8FLJ0z?G$V%(BP1;HTuDXVsC9eedIw`RA46E*i z#d3=5yCQ-rr?d372yL{ePHT*{{Qiiow%i6B>tJ$M3R=VkBDn8KaojMK??4!y)`(3r${wMC#=+1fA-;V7&qreAG*6_p=i@KVs zBafo;4>4bA)p$PtTlCTsN&Pg|AIf_;+dJC5_pwd5Q}|{woi4Ak87zO?8(g{gCp`c01AxUF-=-u+!1J{(R5U{%jhx58ysT;&5A@Ug zq(Q+#S@0Ve%wXs?$ieS%z$p4?hS8{E1+iDMEGA5YT=bzA{|Ckl z4G|z@G?5t@g2p9w$7*W~&J&^7o<_RIk&T379Qi}Z{#25ZSH$9iHpw7PZgPuxbVt&t zLmlg2=ad7{4tG}h5bq>1Jc}fbERSIvU+2Nz6$gk(J1F zh$~;|k-N>3G_|~?G!>A`U0So3zKq8YgUQW$46~T0RAn+*xlCqq#F@|ROEjlx%W7Iv zm)OkaI)K^D$9xl<*AeG9xl>MaY6P9>+{-%Ic^r4Xb2;&pXFBLvPqf?Eo;u>EJ`JiPJ_L%Qdg7=?O{ynW1dFD+;;BxJsw-{;jH>$Ls#eXaF9N~Uu6p&W zU=6ES$4b_+n)R$`O{-eh%GS2J^{sG?YYj4jgNq_ku7J2m`)r_By;|*5cGg+8{*NPu};w*uAv?#Pq}Qk(@Ik;OpT1B~5HX4?U6i1T!D45_&F_NJmAv!g`Y zL&0K39(IMP7Ak2C`YWB13MBj-4hcTs;*gQhnWU|-(ZVD>VfmVj=kxz)M_En&RA-ty zE9btA@AlbdD=sg+u&cr7l*Zy77?Brd*n zzkjcqHn;xQWWGOVP4<6PXRQ}BK4Wm0$M{TET6o#&wDV=HH&@?PJ0o{SF8nOt{j*$~ zt2giVoe?{GYMOXj>&@AcX)_Yrun^z!&we|5>i#x;ppN9tvj1~u|7QjpYw-GHPST~E zq*?wxUBauUeKiHTbj|s|ZGSgy`QjTcv-Q`RZ>O5F*f}({j(+9an-+OWPjOkz%mw$e zTUkTpQ#FO3Mt|eZY`ozdc`D31_3+{|E54;l<{Z^&o46_W=8d3fti9z@)1Gc_t2J-; kcgm=}_G5S8w%}BIwuO1?*Zo?z0~q8Cp00i_>zopr0O|44S^xk5 literal 0 HcmV?d00001 diff --git a/kcontrol/displayconfig/pics/gamma2.2.gif b/kcontrol/displayconfig/pics/gamma2.2.gif new file mode 100644 index 0000000000000000000000000000000000000000..cb10c1fd2a86796e80c8f42b10b1a2580b28cd4b GIT binary patch literal 1875 zcmV-Z2dwxFn0J?~Xx&Vl} zh`IoXx`+U}h={tnx&QzGEC2ui05Jh+000F3kjP1^y*TU5yZ>M)j$~<`XsWJk>%MR- z&vb3yc&_h!@BhG{a7Zi~kI1BQ$!t2G(5Q4uty-_xtai)odcWYXcuX#v&*-#z&2GEj z@VIMDijE{;H0tAzll$Vy7n46lNoS&K%2Lz*~ zq^G8-sH>{2tgosS00gtOw70goxVyT&yuZ3R0mH<_#>dFX%FD?V3eV8d($mz{*4Nb( z1KZr)-rwNi;^W~I4(I6U>g(+7?(gk64fFK%_V@Vt`uq750{;L53LHqVpuvL$DI8eH zu%W|;5F<*Q7?A>iix@L%+{m$`$B+IUg)tjRvgAl-*ix!onNl0MmoQ_#GzYJy&6_pl z@!QF>=T3hJg9;rQR3XKqNRuA52(qcur%gqgoJy4>N|so&s&px{t5=vbaf%&lQ>V|f zXn6u9%C@agqe|n-MamSa-MdbuR^7{&*j25714HBbwXk7sVaY09jLvM@$B^l*bxXN2 zK)7==Yi3v%ujkJg_4XY-^{?R5SP36q-8C`e*J2$5riLC$03wQPwppTz z60k_)oOH%$qXaqT8Pbj;5$WfjLRxhsHc%F7sFPbwNe-8cHmW69Uxq2^Ib+^)=A~z* zNl8#{cIqaaq#RY}sCC{+i=L>4#wRm?whE}A63BPxtcE5kL4c0t+9;$FOzLZ;_FyXP zhMKPF>9KDXwW6q`{x&P4si{UQ-Z8FLJ0z?G$V%(BP1;HTuDXVsC9eedIw`RA46E*i z#d3=5yCQ-rr?d372yL{ePHT*{{Qiiow%i6B>tJ$M3R=VkBDn8KaojMK??4!y)`(3r${wMC#=+1fA-;V7&qreAG*6_p=i@KVs zBafo;4>4bA)p$PtTlCTsN&Pg|AIf_;+dJC5_pwd5Q}|{woi4Ak87zO?8(g{gCp`c01AxUF-=-u+!1J{(R5U{%jhx58ysT;&5A@Ug zq(Q+#S@0Ve%wXs?$ieS%z$p4?hS8{E1+iDMEGA5YT=bzA{|Ckl z4G|z@G?5t@g2p9w$7*W~&J&^7o<_RIk&T379Qi}Z{#25ZSH$9iHpw7PZgPuxbVt&t zLmlg2=ad7{4tG}h5bq>1Jc}fbERSIvU+2Nz6$gk(J1F zh$~;|k-N>3G_|~?G!>A`U0So3zKq8YgUQW$46~T0RAn+*xlCqq#F@|ROEjlx%W7Iv zm)OkaI)K^D$9xl<*AeG9xl>MaY6P9>+{-%Ic^r4Xb2;&pXFBLvPqf?Eo;u>EJ`JiPJ_L%Qdg7=?O{ynW1dFD+;;BxJsw-{;jH>$Ls#eXaF9N~Uu6p&W zU=6ES$4b_+n)R$`O{-eh%GS2J^{sG?YYj4jgNq_ku7J2m`)r_By;|*5cuFQ#SlHI$wxPxCYXQ61-s+aNd!TFkT5H?f4i~lmq^wGg+8{O_;&BFGaM7m+vsAhXqp%V$C$?EEkH_o)e{)~0WMZqNP4exWA~r0Cg|9F|PO zrfJF^XE|IqS2hBjc~8MXKc;hA2c`iY}(pu3nF*zQS&f6%A+x(wN5C+)VrLw p+U)jBfut2xbN?#Ncsunb|J@h)zgasKM1kSX;OXk;vd$@?2>@-f&}0Ar literal 0 HcmV?d00001 diff --git a/kcontrol/displayconfig/pics/gamma2.4.gif b/kcontrol/displayconfig/pics/gamma2.4.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7bde1117958d962e287381b4f010e81916f5429 GIT binary patch literal 1883 zcmV-h2c-B%Nk%w1VKD(|0J8u900000kB^T4kB^T4kB^T4kH3!qzmJc<0KboqzW|TF zkG}wqzmEXFkB`5M)j$~<`XsWJk>%MR- z&vb3yc&_h!@BhG{a7Zi~kI1BQ$!t2G(5Q4uty-_xtai)odcWYXcuX#v&*-#z&2GEj z@VIMDijE{;H0tAzll$Vy7n46lNoS&K%2Lz*~ zq^G8-sH>{2tgosS00gtOw70goxVyT&yuZ3R0mH<_#>dFX%FD?V3eV8d($mz{*4Nb( z1KZr)-rwNi;^W~I4(I6U>g(+7?(gk64fFK%_V@Vt`uq750{;L53LHqVpuvL$DI8eH zu%W|;5F<*Q7?A>iix@L%+{m$`$B+IUg)tjRvgAl-*ix!onNl0MmoQ_#GzYJy&6_pl z@!QF>=T3hJg9;rQR3XKqNRuA52(qcur%gqgoJy4>N|so&s&px{t5=vbaf%&lQ>V|f zXn6u9%C@agqe|n-MamSa-MdbuR^7{&*j25714HBbwXk7sVaY09jLvM@$B^l*bxXN2 zK)7==Yi3v%ujkJg_4XY-^{?R5SP36q-8C`e*J2$5riLC$03wQPwppTz z60k_)oOH%$qXaqT8Pbj;5$WfjLRxhsHc%F7sFPbwNe-8cHmW69Uxq2^Ib+^)=A~z* zNl8#{cIqaaq#RY}sCC{+i=L>4#wRm?whE}A63BPxtcE5kL4c0t+9;$FOzLZ;_FyXP zhMKPF>9KDXwW6q`{x&P4si{UQ-Z8FLJ0z?G$V%(BP1;HTuDXVsC9eedIw`RA46E*i z#d3=5yCQ-rr?d372yL{ePHT*{{Qiiow%i6B>tJ$M3R=VkBDn8KaojMK??4!y)`(3r${wMC#=+1fA-;V7&qreAG*6_p=i@KVs zBafo;4>4bA)p$PtTlCTsN&Pg|AIf_;+dJC5_pwd5Q}|{woi4Ak87zO?8(g{gCp`c01AxUF-=-u+!1J{(R5U{%jhx58ysT;&5A@Ug zq(Q+#S@0Ve%wXs?$ieS%z$p4?hS8{E1+iDMEGA5YT=bzA{|Ckl z4G|z@G?5t@g2p9w$7*W~&J&^7o<_RIk&T379Qi}Z{#25ZSH$9iHpw7PZgPuxbVt&t zLmlg2=ad7{4tG}h5bq>1Jc}fbERSIvU+2Nz6$gk(J1F zh$~;|k-N>3G_|~?G!>A`U0So3zKq8YgUQW$46~T0RAn+*xlCqq#F@|ROEjlx%W7Iv zm)OkaI)K^D$9xl<*AeG9xl>MaY6P9>+{-%Ic^r4Xb2;&pXFBLvPqf?Eo;u>EJ`JiPJ_L%Qdg7=?O{ynW1dFD+;;BxJsw-{;jH>$Ls#eXaF9N~Uu6p&W zU=6ES$4b_+n)R$`O{-eh%GS2J^{sG?D-AM&gNw=nrgH7WMcQYBz3%m{c+IOG{tDRk zopXU3K_mtUi>FfwmJf_=tYiO5*;>G~vbS)o1tM$N$L^uBmkkYOCmUM6B6hQZ&1_^n zTL;4WwX>srt!ZV;+0-I-wXB^3W@%em(#{sPfn}_4ZJS#<(ABV=)vRol7aQ8)iZ-~! VEv|H@OWo>P_qy24t_LCj06Y28#@PS> literal 0 HcmV?d00001 diff --git a/kcontrol/displayconfig/pics/gamma2.4.png b/kcontrol/displayconfig/pics/gamma2.4.png new file mode 100644 index 0000000000000000000000000000000000000000..88bc3239554dcce883935a0af087b87fa1136678 GIT binary patch literal 489 zcmeAS@N?(olHy`uVBq!ia0y~yU^E1>Gg+8{w5eE^6 z{WG`|EEpm?os-ypoYZ;RAP8H2+xV%Ds^zgEcoUZSX1dx^33RhqlC-Ku`O?^Q()7XNy; zdCjc3`+lx?_w!6i-P6Tdc8zH!izUxyxNVNwTzq=R&E};U-%@V6Y>qyBcgM|t-3v3y zl6Ty5+05;HGbd4FmaTM#oAIoRJy1O;%)htOcDH@H`)wvrPsWW;<+p427k~^lp7r%g z4%5|}ELQU!Onm}OUvmSUy2jt&ceU}#clLMwC1qraIluj3cw%~-v2i4?p^fU1J%42a zKAk^y_Nzopr02rd!RR910 literal 0 HcmV?d00001