diff options
Diffstat (limited to 'tderandr/libtderandr.cpp')
| -rw-r--r-- | tderandr/libtderandr.cpp | 90 |
1 files changed, 47 insertions, 43 deletions
diff --git a/tderandr/libtderandr.cpp b/tderandr/libtderandr.cpp index 50c7a1673..94828e434 100644 --- a/tderandr/libtderandr.cpp +++ b/tderandr/libtderandr.cpp @@ -31,6 +31,8 @@ #include <tdemessagebox.h> #include <tdeapplication.h> +#include <kdebug.h> + #include <stdlib.h> #include <unistd.h> #include <cmath> @@ -78,14 +80,14 @@ TQString capitalizeString(TQString in) { } TQString KRandrSimpleAPI::getIccFileName(TQString profileName, TQString screenName, TQString kde_confdir) { - KSimpleConfig *t_config = NULL; - KSimpleConfig *t_systemconfig = NULL; + TDESimpleConfig *t_config = NULL; + TDESimpleConfig *t_systemconfig = NULL; int t_numberOfProfiles; TQStringList t_cfgProfiles; TQString retval; if ((profileName != NULL) && (profileName != "")) { - t_config = new KSimpleConfig( TQString::fromLatin1( "kiccconfigrc" )); + t_config = new TDESimpleConfig( TQString::fromLatin1( "kiccconfigrc" )); t_config->setGroup(NULL); if (t_config->readBoolEntry("EnableICC", false) == true) { t_config->setGroup(profileName); @@ -97,7 +99,7 @@ TQString KRandrSimpleAPI::getIccFileName(TQString profileName, TQString screenNa delete t_config; } else { - t_systemconfig = new KSimpleConfig( kde_confdir + TQString("/kicc/kiccconfigrc") ); + t_systemconfig = new TDESimpleConfig( kde_confdir + TQString("/kicc/kiccconfigrc") ); t_systemconfig->setGroup(NULL); if (t_systemconfig->readBoolEntry("EnableICC", false) == true) { retval = t_systemconfig->readEntry("ICCFile"); @@ -264,12 +266,12 @@ TQString KRandrSimpleAPI::applyIccConfiguration(TQString profileName, TQString k Display *randr_display; ScreenInfo *randr_screen_info; XRROutputInfo *output_info; - KSimpleConfig *t_config; + TDESimpleConfig *t_config; int screenNumber = 0; TQString errorstr = ""; - t_config = new KSimpleConfig( TQString::fromLatin1( "kiccconfigrc" )); + t_config = new TDESimpleConfig( TQString::fromLatin1( "kiccconfigrc" )); // Find all screens if (isValid() == true) { @@ -371,9 +373,9 @@ TQByteArray KRandrSimpleAPI::getEDID(int card, TQString displayname) { TQString KRandrSimpleAPI::getCurrentProfile () { TQString profileName; - KSimpleConfig *t_config; + TDESimpleConfig *t_config; - t_config = new KSimpleConfig( TQString::fromLatin1( "kiccconfigrc" )); + t_config = new TDESimpleConfig( TQString::fromLatin1( "kiccconfigrc" )); profileName = t_config->readEntry("CurrentProfile"); delete t_config; return profileName; @@ -457,7 +459,7 @@ void KRandrSimpleAPI::saveDisplayConfiguration(bool enable, bool applyonstart, T filename = "displayglobals"; filename.prepend(kde_confdir.append("/")); - KSimpleConfig* display_config = new KSimpleConfig( filename ); + TDESimpleConfig* display_config = new TDESimpleConfig( filename ); display_config->setGroup("General"); display_config->writeEntry("EnableDisplayControl", enable); display_config->writeEntry("ApplySettingsOnStart", applyonstart); @@ -471,7 +473,7 @@ void KRandrSimpleAPI::saveDisplayConfiguration(bool enable, bool applyonstart, T } filename.prepend(kde_confdir.append("/displayconfig/")); - display_config = new KSimpleConfig( filename ); + display_config = new TDESimpleConfig( filename ); i=0; SingleScreenData *screendata; @@ -537,7 +539,7 @@ TQPoint KRandrSimpleAPI::applyDisplayConfiguration(TQString profilename, TQStrin TQPtrList<SingleScreenData> screenInfoArray; screenInfoArray = loadDisplayConfiguration(profilename, kde_confdir); if (screenInfoArray.count() > 0) { - applyDisplayConfiguration(screenInfoArray, FALSE, kde_confdir); + applyDisplayConfiguration(screenInfoArray, false, kde_confdir); } destroyScreenInformationObject(screenInfoArray); screenInfoArray = readCurrentDisplayConfiguration(); @@ -559,7 +561,7 @@ TQPtrList<SingleScreenData> KRandrSimpleAPI::loadDisplayConfiguration(TQString p } filename.prepend(kde_confdir.append("/displayconfig/")); - KSimpleConfig* display_config = new KSimpleConfig( filename ); + TDESimpleConfig* display_config = new TDESimpleConfig( filename ); TQStringList grouplist = display_config->groupList(); SingleScreenData *screendata; @@ -644,11 +646,11 @@ bool KRandrSimpleAPI::applyDisplayConfiguration(TQPtrList<SingleScreenData> scre SingleScreenData *screendata; TQPtrList<SingleScreenData> oldconfig; - if (test == TRUE) { + if (test) { oldconfig = readCurrentDisplayConfiguration(); } - if (isValid() == true) { + if (isValid()) { #ifdef USE_XRANDR_PROGRAM // Assemble the command string for xrandr TQString command; @@ -701,7 +703,7 @@ bool KRandrSimpleAPI::applyDisplayConfiguration(TQPtrList<SingleScreenData> scre if(xrandr_command_output.startsWith("xrandr: Failed to get size of gamma for output")) { KMessageBox::sorry(0, xrandr_command_output, i18n("Setting gamma failed.")); } else if (xrandr_command_output != "") { - applyDisplayConfiguration(oldconfig, FALSE, kde_confdir); + applyDisplayConfiguration(oldconfig, false, kde_confdir); accepted = false; destroyScreenInformationObject(oldconfig); KMessageBox::sorry(0, xrandr_command_output, i18n("XRandR encountered a problem")); @@ -802,10 +804,10 @@ bool KRandrSimpleAPI::applyDisplayConfiguration(TQPtrList<SingleScreenData> scre applySystemWideIccConfiguration(kde_confdir); applyIccConfiguration(current_icc_profile, kde_confdir); - if (test == TRUE) { + if (test) { int ret = showTestConfigurationDialog(); if (!ret) { - applyDisplayConfiguration(oldconfig, FALSE, kde_confdir); + applyDisplayConfiguration(oldconfig, false, kde_confdir); accepted = false; } destroyScreenInformationObject(oldconfig); @@ -960,7 +962,7 @@ HotPlugRulesList KRandrSimpleAPI::getHotplugRules(TQString kde_confdir) { filename = "displayglobals"; filename.prepend(kde_confdir.append("/")); - KSimpleConfig* display_config = new KSimpleConfig( filename ); + TDESimpleConfig* display_config = new TDESimpleConfig( filename ); TQStringList grouplist = display_config->groupList(); for ( TQStringList::Iterator it = grouplist.begin(); it != grouplist.end(); ++it ) { @@ -985,7 +987,7 @@ void KRandrSimpleAPI::saveHotplugRules(HotPlugRulesList rules, TQString kde_conf filename = "displayglobals"; filename.prepend(kde_confdir.append("/")); - KSimpleConfig* display_config = new KSimpleConfig( filename ); + TDESimpleConfig* display_config = new TDESimpleConfig( filename ); TQStringList grouplist = display_config->groupList(); for ( TQStringList::Iterator it = grouplist.begin(); it != grouplist.end(); ++it ) { if (!(*it).startsWith("Hotplug-Rule")) { @@ -1009,7 +1011,7 @@ void KRandrSimpleAPI::saveHotplugRules(HotPlugRulesList rules, TQString kde_conf bool KRandrSimpleAPI::getDisplayConfigurationEnabled(TQString kde_confdir) { TQString filename = "displayglobals"; filename.prepend(kde_confdir.append("/")); - KSimpleConfig* display_config = new KSimpleConfig( filename ); + TDESimpleConfig* display_config = new TDESimpleConfig( filename ); display_config->setGroup("General"); bool enabled = display_config->readBoolEntry("EnableDisplayControl", false); delete display_config; @@ -1020,7 +1022,7 @@ bool KRandrSimpleAPI::getDisplayConfigurationEnabled(TQString kde_confdir) { bool KRandrSimpleAPI::getDisplayConfigurationStartupAutoApplyEnabled(TQString kde_confdir) { TQString filename = "displayglobals"; filename.prepend(kde_confdir.append("/")); - KSimpleConfig* display_config = new KSimpleConfig( filename ); + TDESimpleConfig* display_config = new TDESimpleConfig( filename ); display_config->setGroup("General"); bool applyonstart = display_config->readBoolEntry("ApplySettingsOnStart", false); delete display_config; @@ -1031,7 +1033,7 @@ bool KRandrSimpleAPI::getDisplayConfigurationStartupAutoApplyEnabled(TQString kd TQString KRandrSimpleAPI::getDisplayConfigurationStartupAutoApplyName(TQString kde_confdir) { TQString filename = "displayglobals"; filename.prepend(kde_confdir.append("/")); - KSimpleConfig* display_config = new KSimpleConfig( filename ); + TDESimpleConfig* display_config = new TDESimpleConfig( filename ); display_config->setGroup("General"); TQString profilename = display_config->readEntry("StartupProfileName", ""); delete display_config; @@ -1095,7 +1097,6 @@ void KRandrSimpleAPI::applyHotplugRules(TQString kde_confdir) { } void KRandrSimpleAPI::applyDisplayGamma(TQPtrList<SingleScreenData> screenInfoArray) { - int i; Display *randr_display; XRROutputInfo *output_info; ScreenInfo *randr_screen_info; @@ -1106,37 +1107,35 @@ void KRandrSimpleAPI::applyDisplayGamma(TQPtrList<SingleScreenData> screenInfoAr if (isValid() == true) { randr_display = tqt_xdisplay(); randr_screen_info = read_screen_info(randr_display); - for (i = 0; i < screenInfoArray.count(); i++) { + for (int i = 0; i < screenInfoArray.count(); i++) { screendata = screenInfoArray.at(i); output_info = randr_screen_info->outputs[i]->info; CrtcInfo *current_crtc = randr_screen_info->outputs[i]->cur_crtc; if (!current_crtc) { continue; } - // vvvvvvvvv This chunk of code is borrowed from xrandr vvvvvvvvvv + // vvvvvvvvv This chunk of code is based on code from the function set_gamma() of xrandr vvvvvvvvvv int size = XRRGetCrtcGammaSize(randr_display, current_crtc->id); - if (!size) { + if (size <= 0 || size > 65536) { + kdWarning() << "Gamma correction table has wrong size." << endl; continue; } gamma = XRRAllocGamma(size); if (!gamma) { + kdWarning() << "Gamma allocation failed." << endl; continue; } - for (i = 0; i < size; i++) { - if (screendata->gamma_red == 1.0) - gamma->red[i] = i << 8; - else - gamma->red[i] = (pow((double)i/(double)(size-1), (double)screendata->gamma_red) * (double)(size-1)*256); - - if (screendata->gamma_green == 1.0) - gamma->green[i] = i << 8; - else - gamma->green[i] = (pow((double)i/(double)(size-1), (double)screendata->gamma_green) * (double)(size-1)*256); - - if (screendata->gamma_blue == 1.0) - gamma->blue[i] = i << 8; - else - gamma->blue[i] = (pow((double)i/(double)(size-1), (double)screendata->gamma_blue) * (double)(size-1)*256); + for (int j = 0; j < size; j++) { + if (size == 1) { + gamma->red[j] = 0.0; + gamma->green[j] = 0.0; + gamma->blue[j] = 0.0; + } + else { + gamma->red[j] = fmin(pow((double)j / (double)(size - 1), screendata->gamma_red), 1.0) * 65535.0; + gamma->green[j] = fmin(pow((double)j / (double)(size - 1), screendata->gamma_green), 1.0) * 65535.0; + gamma->blue[j] = fmin(pow((double)j / (double)(size - 1), screendata->gamma_blue), 1.0) * 65535.0; + } } XRRSetCrtcGamma(randr_display, current_crtc->id, gamma); free(gamma); @@ -1380,8 +1379,13 @@ TQPtrList<SingleScreenData> KRandrSimpleAPI::readCurrentDisplayConfiguration() { //int slot = 127; int slot = 7; int size = XRRGetCrtcGammaSize(randr_display, current_crtc->id); - if(size>0) { - XRRCrtcGamma *gammastruct = XRRGetCrtcGamma (randr_display, current_crtc->id); + XRRCrtcGamma *gammastruct = XRRGetCrtcGamma (randr_display, current_crtc->id); + if (size == 1) { + screendata->gamma_red = 0.0; + screendata->gamma_green = 0.0; + screendata->gamma_blue = 0.0; + } + else if (size > 1) { screendata->gamma_red = log(gammastruct->red[slot]/((size-1.0)*256.0))/log(slot/(size-1.0)); screendata->gamma_green = log(gammastruct->green[slot]/((size-1.0)*256.0))/log(slot/(size-1.0)); screendata->gamma_blue = log(gammastruct->blue[slot]/((size-1.0)*256.0))/log(slot/(size-1.0)); |
