You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.5 KiB
106 lines
3.5 KiB
/* ============================================================
|
|
*
|
|
* This file is a part of kipi-plugins project
|
|
* http://www.kipi-plugins.org
|
|
*
|
|
* Date : 2007-11-14
|
|
* Description : a kipi plugin to slide images.
|
|
*
|
|
* Copyright (C) 2007 by Valerio Fuoglio <valerio dot fuoglio at gmail dot com>
|
|
*
|
|
* Parts of this code are based on smoothslidesaver by Carsten Weinhold
|
|
* <carsten dot weinhold at gmx dot de>
|
|
*
|
|
* 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, 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.
|
|
*
|
|
* ============================================================ */
|
|
|
|
// TQt includes.
|
|
|
|
#include <tqapplication.h>
|
|
|
|
// X11 includes.
|
|
|
|
#include <X11/Xlib.h>
|
|
#include <X11/extensions/Xrandr.h>
|
|
|
|
// Local includes.
|
|
|
|
#include "screenproperties.h"
|
|
|
|
namespace KIPISlideShowPlugin
|
|
{
|
|
|
|
ScreenProperties::ScreenProperties(TQWidget *mainWidget) {
|
|
|
|
activeScreen = TQApplication::desktop()->screenNumber(mainWidget);
|
|
}
|
|
|
|
unsigned ScreenProperties::suggestFrameRate() {
|
|
|
|
int eventBase, errorBase;
|
|
if ( !XRRQueryExtension(tqt_xdisplay(), &eventBase, &errorBase)) {
|
|
// No information, make a lucky guess on based on that ;)
|
|
return 25;
|
|
}
|
|
|
|
// ask X11 for the refresh rate of the current screen
|
|
XRRScreenConfiguration* config;
|
|
int screenRate;
|
|
|
|
config = XRRGetScreenInfo(tqt_xdisplay(), RootWindow(tqt_xdisplay(),
|
|
activeScreen));
|
|
screenRate = XRRConfigCurrentRate(config);
|
|
XRRFreeScreenConfigInfo(config);
|
|
//tqDebug("monitor refresh rate %d Hz", screenRate);
|
|
|
|
// Find the frame rate, that matches the monitor's refresh rate best.
|
|
// We will choose between 25, 28 and 30 Hz, to get smooth animations.
|
|
// The following frame rate will be chosen according to the monitor's
|
|
// refresh rate:
|
|
//
|
|
// Frame rate: Monitor refresh rate
|
|
// 25 Hz (50), 75, 100 Hz (PAL compliant setups)
|
|
// 28 Hz 85 Hz, 110 Hz (seems to work ok)
|
|
// 30 Hz 60, 90, 120 Hz (NTSC compliant setups)
|
|
//
|
|
// However, this will only work, if the kernel can schedule the
|
|
// screensaver at the right time (a 2.6.x kernel should work fine,
|
|
// because of the high HZ value).
|
|
int candidateRate[3] = { 30, 25, 28 };
|
|
int bestRate = candidateRate[0];
|
|
int smallestError = 1000, i = 0;
|
|
do {
|
|
int r = candidateRate[i];
|
|
int error = TQMIN(screenRate % r, (screenRate + r) % r);
|
|
|
|
if (error < smallestError) {
|
|
smallestError = error;
|
|
bestRate = r;
|
|
}
|
|
} while (++i < 3);
|
|
|
|
//tqDebug("using %d Hz as framerate for effects", bestRate);
|
|
return bestRate;
|
|
}
|
|
|
|
bool ScreenProperties::enableVSync() {
|
|
|
|
// currently only supported on NVidia hardware using the
|
|
// proprietary driver
|
|
|
|
// For NVidia graphics cards: always use sync-to-vblank
|
|
// return (setenv("__GL_SYNC_TO_VBLANK", "1", 1) == 0);
|
|
return false;
|
|
}
|
|
|
|
} // NameSpace KIPISlideShowPlugin
|