Migrate effects from displayWidth()/displayHeight() to virtualScreenSize()/virtualScreenGeometry()
Rational behind this change is that displayWidth and displayHeight are X specific API calls in kwinglobals. For the future it's easier to only rely on functionality which goes through the EffectsHandler API which allows easier adjustments in KWin core. displayWidth() and displayHeight() are only used to get the size or the complete rect of all screens. This is also provided by: effects->virtualScreenGeometry() or effects->virtualScreenSize() REVIEW: 116021
This commit is contained in:
parent
b9e894bc4b
commit
3f0ff9b8d5
17 changed files with 107 additions and 101 deletions
|
@ -184,7 +184,8 @@ bool ContrastEffect::supported()
|
|||
int maxTexSize;
|
||||
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize);
|
||||
|
||||
if (displayWidth() > maxTexSize || displayHeight() > maxTexSize)
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
if (screenSize.width() > maxTexSize || screenSize.height() > maxTexSize)
|
||||
supported = false;
|
||||
}
|
||||
return supported;
|
||||
|
@ -278,7 +279,7 @@ void ContrastEffect::prePaintWindow(EffectWindow* w, WindowPrePaintData& data, i
|
|||
}
|
||||
|
||||
// in case this window has regions to be blurred
|
||||
const QRect screen(0, 0, displayWidth(), displayHeight());
|
||||
const QRect screen = effects->virtualScreenGeometry();
|
||||
const QRegion contrastArea = contrastRegion(w).translated(w->pos()) & screen;
|
||||
|
||||
// we are not caching the window
|
||||
|
@ -328,7 +329,7 @@ bool ContrastEffect::shouldContrast(const EffectWindow *w, int mask, const Windo
|
|||
|
||||
void ContrastEffect::drawWindow(EffectWindow *w, int mask, QRegion region, WindowPaintData &data)
|
||||
{
|
||||
const QRect screen(0, 0, displayWidth(), displayHeight());
|
||||
const QRect screen = effects->virtualScreenGeometry();
|
||||
if (shouldContrast(w, mask, data)) {
|
||||
QRegion shape = region & contrastRegion(w).translated(w->pos()) & screen;
|
||||
|
||||
|
|
|
@ -222,7 +222,8 @@ void ContrastShader::init()
|
|||
opacityLocation = shader->uniformLocation("opacity");
|
||||
|
||||
QMatrix4x4 modelViewProjection;
|
||||
modelViewProjection.ortho(0, displayWidth(), displayHeight(), 0, 0, 65535);
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
modelViewProjection.ortho(0, screenSize.width(), screenSize.height(), 0, 0, 65535);
|
||||
ShaderManager::instance()->pushShader(shader);
|
||||
shader->setUniform(colorMatrixLocation, QMatrix4x4());
|
||||
shader->setUniform(textureMatrixLocation, QMatrix4x4());
|
||||
|
|
|
@ -35,7 +35,7 @@ BlurEffect::BlurEffect()
|
|||
|
||||
// Offscreen texture that's used as the target for the horizontal blur pass
|
||||
// and the source for the vertical pass.
|
||||
tex = GLTexture(displayWidth(), displayHeight());
|
||||
tex = GLTexture(effects->virtualScreenSize());
|
||||
tex.setFilter(GL_LINEAR);
|
||||
tex.setWrapMode(GL_CLAMP_TO_EDGE);
|
||||
|
||||
|
@ -134,7 +134,7 @@ void BlurEffect::slotPropertyNotify(EffectWindow *w, long atom)
|
|||
updateBlurRegion(w);
|
||||
CacheEntry it = windows.find(w);
|
||||
if (it != windows.end()) {
|
||||
const QRect screen(0, 0, displayWidth(), displayHeight());
|
||||
const QRect screen = effects->virtualScreenGeometry();
|
||||
it->damagedRegion = expand(blurRegion(w).translated(w->pos())) & screen;
|
||||
}
|
||||
}
|
||||
|
@ -167,7 +167,8 @@ bool BlurEffect::supported()
|
|||
int maxTexSize;
|
||||
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize);
|
||||
|
||||
if (displayWidth() > maxTexSize || displayHeight() > maxTexSize)
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
if (screenSize.width() > maxTexSize || screenSize.height() > maxTexSize)
|
||||
supported = false;
|
||||
}
|
||||
return supported;
|
||||
|
@ -298,7 +299,7 @@ void BlurEffect::prePaintWindow(EffectWindow* w, WindowPrePaintData& data, int t
|
|||
}
|
||||
|
||||
// in case this window has regions to be blurred
|
||||
const QRect screen(0, 0, displayWidth(), displayHeight());
|
||||
const QRect screen = effects->virtualScreenGeometry();
|
||||
const QRegion blurArea = blurRegion(w).translated(w->pos()) & screen;
|
||||
const QRegion expandedBlur = expand(blurArea) & screen;
|
||||
|
||||
|
@ -397,7 +398,7 @@ bool BlurEffect::shouldBlur(const EffectWindow *w, int mask, const WindowPaintDa
|
|||
|
||||
void BlurEffect::drawWindow(EffectWindow *w, int mask, QRegion region, WindowPaintData &data)
|
||||
{
|
||||
const QRect screen(0, 0, displayWidth(), displayHeight());
|
||||
const QRect screen = effects->virtualScreenGeometry();
|
||||
if (shouldBlur(w, mask, data)) {
|
||||
QRegion shape = region & blurRegion(w).translated(w->pos()) & screen;
|
||||
|
||||
|
@ -423,7 +424,7 @@ void BlurEffect::drawWindow(EffectWindow *w, int mask, QRegion region, WindowPai
|
|||
|
||||
void BlurEffect::paintEffectFrame(EffectFrame *frame, QRegion region, double opacity, double frameOpacity)
|
||||
{
|
||||
const QRect screen(0, 0, displayWidth(), displayHeight());
|
||||
const QRect screen = effects->virtualScreenGeometry();
|
||||
bool valid = target->valid() && shader && shader->isValid();
|
||||
QRegion shape = frame->geometry().adjusted(-5, -5, 5, 5) & screen;
|
||||
if (valid && !shape.isEmpty() && region.intersects(shape.boundingRect()) && frame->style() != EffectFrameNone) {
|
||||
|
@ -522,7 +523,7 @@ void BlurEffect::doBlur(const QRegion& shape, const QRect& screen, const float o
|
|||
|
||||
void BlurEffect::doCachedBlur(EffectWindow *w, const QRegion& region, const float opacity)
|
||||
{
|
||||
const QRect screen(0, 0, displayWidth(), displayHeight());
|
||||
const QRect screen = effects->virtualScreenGeometry();
|
||||
const QRegion blurredRegion = blurRegion(w).translated(w->pos()) & screen;
|
||||
const QRegion expanded = expand(blurredRegion) & screen;
|
||||
const QRect r = expanded.boundingRect();
|
||||
|
@ -670,7 +671,8 @@ void BlurEffect::doCachedBlur(EffectWindow *w, const QRegion& region, const floa
|
|||
}
|
||||
|
||||
modelViewProjectionMatrix.setToIdentity();
|
||||
modelViewProjectionMatrix.ortho(0, displayWidth(), displayHeight(), 0, 0, 65535);
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
modelViewProjectionMatrix.ortho(0, screenSize.width(), screenSize.height(), 0, 0, 65535);
|
||||
loadMatrix(modelViewProjectionMatrix);
|
||||
shader->setModelViewProjectionMatrix(modelViewProjectionMatrix);
|
||||
|
||||
|
|
|
@ -323,7 +323,8 @@ void GLSLBlurShader::init()
|
|||
mvpMatrixLocation = shader->uniformLocation("modelViewProjectionMatrix");
|
||||
|
||||
QMatrix4x4 modelViewProjection;
|
||||
modelViewProjection.ortho(0, displayWidth(), displayHeight(), 0, 0, 65535);
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
modelViewProjection.ortho(0, screenSize.width(), screenSize.height(), 0, 0, 65535);
|
||||
ShaderManager::instance()->pushShader(shader);
|
||||
shader->setUniform(textureMatrixLocation, QMatrix4x4());
|
||||
shader->setUniform(mvpMatrixLocation, modelViewProjection);
|
||||
|
|
|
@ -545,16 +545,17 @@ void CoverSwitchEffect::slotTabBoxAdded(int mode)
|
|||
|
||||
// Calculation of correct area
|
||||
area = effects->clientArea(FullScreenArea, activeScreen, effects->currentDesktop());
|
||||
scaleFactor = (zPosition + 1100) * 2.0 * tan(60.0 * M_PI / 360.0f) / displayWidth();
|
||||
if (displayWidth() - area.width() != 0) {
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
scaleFactor = (zPosition + 1100) * 2.0 * tan(60.0 * M_PI / 360.0f) / screenSize.width();
|
||||
if (screenSize.width() - area.width() != 0) {
|
||||
// one of the screens is smaller than the other (horizontal)
|
||||
if (area.width() < displayWidth() - area.width())
|
||||
scaleFactor *= (float)area.width() / (float)(displayWidth() - area.width());
|
||||
else if (area.width() != displayWidth() - area.width()) {
|
||||
if (area.width() < screenSize.width() - area.width())
|
||||
scaleFactor *= (float)area.width() / (float)(screenSize.width() - area.width());
|
||||
else if (area.width() != screenSize.width() - area.width()) {
|
||||
// vertical layout with different width
|
||||
// but we don't want to catch screens with same width and different height
|
||||
if (displayHeight() != area.height())
|
||||
scaleFactor *= (float)area.width() / (float)(displayWidth());
|
||||
if (screenSize.height() != area.height())
|
||||
scaleFactor *= (float)area.width() / (float)(screenSize.width());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -778,10 +779,11 @@ void CoverSwitchEffect::paintFrontWindow(EffectWindow* frontWindow, int width, i
|
|||
}
|
||||
if (animation) {
|
||||
float distance = 0.0;
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
if (direction == Right) {
|
||||
// move to right
|
||||
distance = -frontWindow->geometry().width() * 0.5f + area.width() * 0.5f +
|
||||
(((float)displayWidth() * 0.5 * scaleFactor) - (float)area.width() * 0.5f) / rightWindows;
|
||||
(((float)screenSize.width() * 0.5 * scaleFactor) - (float)area.width() * 0.5f) / rightWindows;
|
||||
data.translate(distance * timeLine.currentValue());
|
||||
data.setRotationAxis(Qt::YAxis);
|
||||
data.setRotationAngle(-angle * timeLine.currentValue());
|
||||
|
@ -789,7 +791,7 @@ void CoverSwitchEffect::paintFrontWindow(EffectWindow* frontWindow, int width, i
|
|||
} else {
|
||||
// move to left
|
||||
distance = frontWindow->geometry().width() * 0.5f - area.width() * 0.5f +
|
||||
((float)width * 0.5f - ((float)displayWidth() * 0.5 * scaleFactor)) / leftWindows;
|
||||
((float)width * 0.5f - ((float)screenSize.width() * 0.5 * scaleFactor)) / leftWindows;
|
||||
float factor = 1.0;
|
||||
if (specialHandlingForward)
|
||||
factor = 2.0;
|
||||
|
@ -816,9 +818,10 @@ void CoverSwitchEffect::paintWindows(const EffectWindowList& windows, bool left,
|
|||
rotateFactor = -1;
|
||||
}
|
||||
|
||||
float xTranslate = -((float)(width) * 0.5f - ((float)displayWidth() * 0.5 * scaleFactor));
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
float xTranslate = -((float)(width) * 0.5f - ((float)screenSize.width() * 0.5 * scaleFactor));
|
||||
if (!left)
|
||||
xTranslate = ((float)displayWidth() * 0.5 * scaleFactor) - (float)width * 0.5f;
|
||||
xTranslate = ((float)screenSize.width() * 0.5 * scaleFactor) - (float)width * 0.5f;
|
||||
// handling for additional window from other side
|
||||
// has to appear on this side after half of the time
|
||||
if (animation && timeLine.currentValue() >= 0.5 && additionalWindow != NULL) {
|
||||
|
|
|
@ -332,7 +332,8 @@ bool CubeEffect::loadShader()
|
|||
QMatrix4x4 modelview;
|
||||
float scaleFactor = 1.1 * tan(fovy * M_PI / 360.0f) / ymax;
|
||||
modelview.translate(xmin * scaleFactor, ymax * scaleFactor, -1.1);
|
||||
modelview.scale((xmax - xmin)*scaleFactor / displayWidth(), -(ymax - ymin)*scaleFactor / displayHeight(), 0.001);
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
modelview.scale((xmax - xmin)*scaleFactor / screenSize.width(), -(ymax - ymin)*scaleFactor / screenSize.height(), 0.001);
|
||||
cylinderShader->setUniform(GLShader::ModelViewMatrix, modelview);
|
||||
const QMatrix4x4 identity;
|
||||
cylinderShader->setUniform(GLShader::ScreenTransformation, identity);
|
||||
|
@ -361,7 +362,8 @@ bool CubeEffect::loadShader()
|
|||
QMatrix4x4 modelview;
|
||||
float scaleFactor = 1.1 * tan(fovy * M_PI / 360.0f) / ymax;
|
||||
modelview.translate(xmin * scaleFactor, ymax * scaleFactor, -1.1);
|
||||
modelview.scale((xmax - xmin)*scaleFactor / displayWidth(), -(ymax - ymin)*scaleFactor / displayHeight(), 0.001);
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
modelview.scale((xmax - xmin)*scaleFactor / screenSize.width(), -(ymax - ymin)*scaleFactor / screenSize.height(), 0.001);
|
||||
sphereShader->setUniform(GLShader::ModelViewMatrix, modelview);
|
||||
const QMatrix4x4 identity;
|
||||
sphereShader->setUniform(GLShader::ScreenTransformation, identity);
|
||||
|
@ -1985,7 +1987,7 @@ void CubeEffect::windowInputMouseEvent(QEvent* e)
|
|||
if (deltaX == 0) {
|
||||
if (pos.x() == 0)
|
||||
deltaDegrees = 5.0f;
|
||||
if (pos.x() == displayWidth() - 1)
|
||||
if (pos.x() == rect.width() - 1)
|
||||
deltaDegrees = -5.0f;
|
||||
}
|
||||
if (invertMouse)
|
||||
|
|
|
@ -524,25 +524,26 @@ void CubeSlideEffect::slotWindowStepUserMovedResized(EffectWindow* w)
|
|||
return;
|
||||
if (w->isUserResize())
|
||||
return;
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
const QPoint cursor = effects->cursorPos();
|
||||
const int horizontal = displayWidth() * 0.1;
|
||||
const int vertical = displayHeight() * 0.1;
|
||||
const QRect leftRect(0, displayHeight() * 0.1, horizontal, displayHeight() * 0.8);
|
||||
const QRect rightRect(displayWidth() - horizontal, displayHeight() * 0.1, horizontal, displayHeight() * 0.8);
|
||||
const QRect topRect(horizontal, 0, displayWidth() * 0.8, vertical);
|
||||
const QRect bottomRect(horizontal, displayHeight() - vertical, displayWidth() - horizontal * 2, vertical);
|
||||
const int horizontal = screenSize.width() * 0.1;
|
||||
const int vertical = screenSize.height() * 0.1;
|
||||
const QRect leftRect(0, screenSize.height() * 0.1, horizontal, screenSize.height() * 0.8);
|
||||
const QRect rightRect(screenSize.width() - horizontal, screenSize.height() * 0.1, horizontal, screenSize.height() * 0.8);
|
||||
const QRect topRect(horizontal, 0, screenSize.width() * 0.8, vertical);
|
||||
const QRect bottomRect(horizontal, screenSize.height() - vertical, screenSize.width() - horizontal * 2, vertical);
|
||||
if (leftRect.contains(cursor)) {
|
||||
if (effects->desktopToLeft(effects->currentDesktop()) != effects->currentDesktop())
|
||||
windowMovingChanged(0.3 *(float)(horizontal - cursor.x()) / (float)horizontal, Left);
|
||||
} else if (rightRect.contains(cursor)) {
|
||||
if (effects->desktopToRight(effects->currentDesktop()) != effects->currentDesktop())
|
||||
windowMovingChanged(0.3 *(float)(cursor.x() - displayWidth() + horizontal) / (float)horizontal, Right);
|
||||
windowMovingChanged(0.3 *(float)(cursor.x() - screenSize.width() + horizontal) / (float)horizontal, Right);
|
||||
} else if (topRect.contains(cursor)) {
|
||||
if (effects->desktopAbove(effects->currentDesktop()) != effects->currentDesktop())
|
||||
windowMovingChanged(0.3 *(float)(vertical - cursor.y()) / (float)vertical, Upwards);
|
||||
} else if (bottomRect.contains(cursor)) {
|
||||
if (effects->desktopBelow(effects->currentDesktop()) != effects->currentDesktop())
|
||||
windowMovingChanged(0.3 *(float)(cursor.y() - displayHeight() + vertical) / (float)vertical, Downwards);
|
||||
windowMovingChanged(0.3 *(float)(cursor.y() - screenSize.height() + vertical) / (float)vertical, Downwards);
|
||||
} else {
|
||||
// not in one of the areas
|
||||
windowMoving = false;
|
||||
|
|
|
@ -116,7 +116,7 @@ void LogoutEffect::prePaintScreen(ScreenPrePaintData& data, int time)
|
|||
// TODO: It seems that it is not possible to create a GLRenderTarget that has
|
||||
// a different size than the display right now. Most likely a KWin core bug.
|
||||
// Create texture and render target
|
||||
blurTexture = new GLTexture(displayWidth(), displayHeight());
|
||||
blurTexture = new GLTexture(effects->virtualScreenSize());
|
||||
blurTexture->setFilter(GL_LINEAR_MIPMAP_LINEAR);
|
||||
blurTexture->setWrapMode(GL_CLAMP_TO_EDGE);
|
||||
|
||||
|
@ -401,7 +401,7 @@ void LogoutEffect::renderBlurTexture()
|
|||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
blurTexture->bind();
|
||||
blurTexture->render(infiniteRegion(), QRect(0, 0, displayWidth(), displayHeight()));
|
||||
blurTexture->render(infiniteRegion(), effects->virtualScreenGeometry());
|
||||
blurTexture->unbind();
|
||||
glDisable(GL_BLEND);
|
||||
checkGLError("Render blur texture");
|
||||
|
@ -413,7 +413,7 @@ void LogoutEffect::renderBlurTextureLegacy()
|
|||
glPushAttrib(GL_CURRENT_BIT | GL_ENABLE_BIT | GL_TEXTURE_BIT);
|
||||
// Unmodified base image
|
||||
blurTexture->bind();
|
||||
blurTexture->render(infiniteRegion(), QRect(0, 0, displayWidth(), displayHeight()));
|
||||
blurTexture->render(infiniteRegion(), effects->virtualScreenGeometry());
|
||||
|
||||
// Blurred image
|
||||
GLfloat bias[1];
|
||||
|
@ -424,7 +424,7 @@ void LogoutEffect::renderBlurTextureLegacy()
|
|||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glColor4f(1.0f, 1.0f, 1.0f, progress * 0.4);
|
||||
|
||||
blurTexture->render(infiniteRegion(), QRect(0, 0, displayWidth(), displayHeight()));
|
||||
blurTexture->render(infiniteRegion(), effects->virtualScreenGeometry());
|
||||
|
||||
glTexEnvf(GL_TEXTURE_FILTER_CONTROL, GL_TEXTURE_LOD_BIAS, bias[0]);
|
||||
blurTexture->unbind();
|
||||
|
|
|
@ -94,8 +94,9 @@ bool LookingGlassEffect::loadData()
|
|||
// If NPOT textures are not supported, use nearest power-of-two sized
|
||||
// texture. It wastes memory, but it's possible to support systems without
|
||||
// NPOT textures that way
|
||||
int texw = displayWidth();
|
||||
int texh = displayHeight();
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
int texw = screenSize.width();
|
||||
int texh = screenSize.height();
|
||||
if (!GLTexture::NPOTTextureSupported()) {
|
||||
qWarning() << "NPOT textures not supported, wasting some memory" ;
|
||||
texw = nearestPowerOfTwo(texw);
|
||||
|
@ -123,7 +124,7 @@ bool LookingGlassEffect::loadData()
|
|||
m_shader = ShaderManager::instance()->loadFragmentShader(ShaderManager::SimpleShader, fragmentshader);
|
||||
if (m_shader->isValid()) {
|
||||
ShaderBinder binder(m_shader);
|
||||
m_shader->setUniform("u_textureSize", QVector2D(displayWidth(), displayHeight()));
|
||||
m_shader->setUniform("u_textureSize", QVector2D(screenSize.width(), screenSize.height()));
|
||||
} else {
|
||||
qCritical() << "The shader failed to load!" << endl;
|
||||
return false;
|
||||
|
@ -132,18 +133,18 @@ bool LookingGlassEffect::loadData()
|
|||
m_vbo = new GLVertexBuffer(GLVertexBuffer::Static);
|
||||
QVector<float> verts;
|
||||
QVector<float> texcoords;
|
||||
texcoords << displayWidth() << 0.0;
|
||||
verts << displayWidth() << 0.0;
|
||||
texcoords << screenSize.width() << 0.0;
|
||||
verts << screenSize.width() << 0.0;
|
||||
texcoords << 0.0 << 0.0;
|
||||
verts << 0.0 << 0.0;
|
||||
texcoords << 0.0 << displayHeight();
|
||||
verts << 0.0 << displayHeight();
|
||||
texcoords << 0.0 << displayHeight();
|
||||
verts << 0.0 << displayHeight();
|
||||
texcoords << displayWidth() << displayHeight();
|
||||
verts << displayWidth() << displayHeight();
|
||||
texcoords << displayWidth() << 0.0;
|
||||
verts << displayWidth() << 0.0;
|
||||
texcoords << 0.0 << screenSize.height();
|
||||
verts << 0.0 << screenSize.height();
|
||||
texcoords << 0.0 << screenSize.height();
|
||||
verts << 0.0 << screenSize.height();
|
||||
texcoords << screenSize.width() << screenSize.height();
|
||||
verts << screenSize.width() << screenSize.height();
|
||||
texcoords << screenSize.width() << 0.0;
|
||||
verts << screenSize.width() << 0.0;
|
||||
m_vbo->setData(6, 2, verts.constData(), texcoords.constData());
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -88,7 +88,7 @@ void MinimizeAnimationEffect::paintWindow(EffectWindow* w, int mask, QRegion reg
|
|||
QRect icon = w->iconGeometry();
|
||||
// If there's no icon geometry, minimize to the center of the screen
|
||||
if (!icon.isValid())
|
||||
icon = QRect(displayWidth() / 2, displayHeight() / 2, 0, 0);
|
||||
icon = QRect(effects->virtualScreenGeometry().center(), QSize(0, 0));
|
||||
|
||||
data *= QVector2D(interpolate(1.0, icon.width() / (double)geo.width(), progress),
|
||||
interpolate(1.0, icon.height() / (double)geo.height(), progress));
|
||||
|
|
|
@ -254,7 +254,7 @@ void ScreenShotEffect::screenshotForWindow(qulonglong winid, int mask)
|
|||
|
||||
QString ScreenShotEffect::screenshotFullscreen()
|
||||
{
|
||||
return blitScreenshot(QRect(0, 0, displayWidth(), displayHeight()));
|
||||
return blitScreenshot(effects->virtualScreenGeometry());
|
||||
}
|
||||
|
||||
QString ScreenShotEffect::screenshotScreen(int screen)
|
||||
|
|
|
@ -68,14 +68,15 @@ void ShowFpsEffect::reconfigure(ReconfigureFlags)
|
|||
alpha = ShowFpsConfig::alpha();
|
||||
x = ShowFpsConfig::x();
|
||||
y = ShowFpsConfig::y();
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
if (x == -10000) // there's no -0 :(
|
||||
x = displayWidth() - 2 * NUM_PAINTS - FPS_WIDTH;
|
||||
x = screenSize.width() - 2 * NUM_PAINTS - FPS_WIDTH;
|
||||
else if (x < 0)
|
||||
x = displayWidth() - 2 * NUM_PAINTS - FPS_WIDTH - x;
|
||||
x = screenSize.width() - 2 * NUM_PAINTS - FPS_WIDTH - x;
|
||||
if (y == -10000)
|
||||
y = displayHeight() - MAX_TIME;
|
||||
y = screenSize.height() - MAX_TIME;
|
||||
else if (y < 0)
|
||||
y = displayHeight() - MAX_TIME - y;
|
||||
y = screenSize.height() - MAX_TIME - y;
|
||||
fps_rect = QRect(x, y, FPS_WIDTH + 2 * NUM_PAINTS, MAX_TIME);
|
||||
m_noBenchmark->setPosition(fps_rect.bottomRight() + QPoint(-6, 6));
|
||||
|
||||
|
@ -94,15 +95,15 @@ void ShowFpsEffect::reconfigure(ReconfigureFlags)
|
|||
textAlign = Qt::AlignTop | Qt::AlignLeft;
|
||||
break;
|
||||
case TOP_RIGHT:
|
||||
fpsTextRect = QRect(displayWidth() - 100, 0, 100, 100);
|
||||
fpsTextRect = QRect(screenSize.width() - 100, 0, 100, 100);
|
||||
textAlign = Qt::AlignTop | Qt::AlignRight;
|
||||
break;
|
||||
case BOTTOM_LEFT:
|
||||
fpsTextRect = QRect(0, displayHeight() - 100, 100, 100);
|
||||
fpsTextRect = QRect(0, screenSize.height() - 100, 100, 100);
|
||||
textAlign = Qt::AlignBottom | Qt::AlignLeft;
|
||||
break;
|
||||
case BOTTOM_RIGHT:
|
||||
fpsTextRect = QRect(displayWidth() - 100, displayHeight() - 100, 100, 100);
|
||||
fpsTextRect = QRect(screenSize.width() - 100, screenSize.height() - 100, 100, 100);
|
||||
textAlign = Qt::AlignBottom | Qt::AlignRight;
|
||||
break;
|
||||
case NOWHERE:
|
||||
|
|
|
@ -117,8 +117,7 @@ void SlideEffect::paintScreen(int mask, QRegion region, ScreenPaintData& data)
|
|||
diffPos.setY(diffPos.y() + h);
|
||||
}
|
||||
QPoint currentPos = slide_start_pos + mTimeLine.currentValue() * diffPos;
|
||||
QSize displaySize(displayWidth(), displayHeight());
|
||||
QRegion currentRegion = QRect(currentPos, displaySize);
|
||||
QRegion currentRegion = QRect(currentPos, effects->virtualScreenSize());
|
||||
if (effects->optionRollOverDesktops()) {
|
||||
currentRegion |= (currentRegion & QRect(-w, 0, w, h)).translated(w, 0);
|
||||
currentRegion |= (currentRegion & QRect(0, -h, w, h)).translated(0, h);
|
||||
|
@ -150,14 +149,15 @@ void SlideEffect::paintScreen(int mask, QRegion region, ScreenPaintData& data)
|
|||
slide_painting_sticky = do_sticky;
|
||||
slide_painting_keep_above = (last_desktop == desktop);
|
||||
slide_painting_diff = rect.topLeft() - currentPos;
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
if (effects->optionRollOverDesktops()) {
|
||||
if (slide_painting_diff.x() > displayWidth())
|
||||
if (slide_painting_diff.x() > screenSize.width())
|
||||
slide_painting_diff.setX(slide_painting_diff.x() - w);
|
||||
if (slide_painting_diff.x() < -displayWidth())
|
||||
if (slide_painting_diff.x() < -screenSize.width())
|
||||
slide_painting_diff.setX(slide_painting_diff.x() + w);
|
||||
if (slide_painting_diff.y() > displayHeight())
|
||||
if (slide_painting_diff.y() > screenSize.height())
|
||||
slide_painting_diff.setY(slide_painting_diff.y() - h);
|
||||
if (slide_painting_diff.y() < -displayHeight())
|
||||
if (slide_painting_diff.y() < -screenSize.height())
|
||||
slide_painting_diff.setY(slide_painting_diff.y() + h);
|
||||
}
|
||||
do_sticky = false; // paint on-all-desktop windows only once
|
||||
|
@ -188,7 +188,7 @@ void SlideEffect::postPaintScreen()
|
|||
// Gives a position of the given desktop when all desktops are arranged in a grid
|
||||
QRect SlideEffect::desktopRect(int desktop) const
|
||||
{
|
||||
QRect rect(0, 0, displayWidth(), displayHeight());
|
||||
QRect rect = effects->virtualScreenGeometry();
|
||||
rect.translate(effects->desktopCoords(desktop));
|
||||
return rect;
|
||||
}
|
||||
|
@ -216,7 +216,8 @@ void SlideEffect::slotDesktopChanged(int old, int current)
|
|||
diffPos.setY(diffPos.y() + h);
|
||||
}
|
||||
QPoint currentPos = slide_start_pos + mTimeLine.currentValue() * diffPos;
|
||||
QRegion currentRegion = QRect(currentPos, QSize(displayWidth(), displayHeight()));
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
QRegion currentRegion = QRect(currentPos, screenSize);
|
||||
if (effects->optionRollOverDesktops()) {
|
||||
currentRegion |= (currentRegion & QRect(-w, 0, w, h)).translated(w, 0);
|
||||
currentRegion |= (currentRegion & QRect(0, -h, w, h)).translated(0, h);
|
||||
|
@ -228,9 +229,9 @@ void SlideEffect::slotDesktopChanged(int old, int current)
|
|||
// current position is in new current desktop (e.g. quickly changing back),
|
||||
// don't do full progress
|
||||
if (abs(currentPos.x() - rect.x()) > abs(currentPos.y() - rect.y()))
|
||||
mTimeLine.setCurrentTime((1.0 - abs(currentPos.x() - rect.x()) / double(displayWidth()))*(qreal)mTimeLine.currentValue());
|
||||
mTimeLine.setCurrentTime((1.0 - abs(currentPos.x() - rect.x()) / double(screenSize.width()))*(qreal)mTimeLine.currentValue());
|
||||
else
|
||||
mTimeLine.setCurrentTime((1.0 - abs(currentPos.y() - rect.y()) / double(displayHeight()))*(qreal)mTimeLine.currentValue());
|
||||
mTimeLine.setCurrentTime((1.0 - abs(currentPos.y() - rect.y()) / double(screenSize.height()))*(qreal)mTimeLine.currentValue());
|
||||
} else // current position is not on current desktop, do full progress
|
||||
mTimeLine.setCurrentTime(0);
|
||||
diffPos = rect.topLeft() - currentPos;
|
||||
|
|
|
@ -285,6 +285,7 @@ void ZoomEffect::paintScreen(int mask, QRegion region, ScreenPaintData& data)
|
|||
{
|
||||
if (zoom != 1.0) {
|
||||
data *= QVector2D(zoom, zoom);
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
|
||||
// mouse-tracking allows navigation of the zoom-area using the mouse.
|
||||
switch(mouseTracking) {
|
||||
|
@ -297,8 +298,8 @@ void ZoomEffect::paintScreen(int mask, QRegion region, ScreenPaintData& data)
|
|||
prevPoint = cursorPoint;
|
||||
// fall through
|
||||
case MouseTrackingDisabled:
|
||||
data.setXTranslation(qMin(0, qMax(int(displayWidth() - displayWidth() * zoom), int(displayWidth() / 2 - prevPoint.x() * zoom))));
|
||||
data.setYTranslation(qMin(0, qMax(int(displayHeight() - displayHeight() * zoom), int(displayHeight() / 2 - prevPoint.y() * zoom))));
|
||||
data.setXTranslation(qMin(0, qMax(int(screenSize.width() - screenSize.width() * zoom), int(screenSize.width() / 2 - prevPoint.x() * zoom))));
|
||||
data.setYTranslation(qMin(0, qMax(int(screenSize.height() - screenSize.height() * zoom), int(screenSize.height() / 2 - prevPoint.y() * zoom))));
|
||||
break;
|
||||
case MouseTrackingPush: {
|
||||
// touching an edge of the screen moves the zoom-area in that direction.
|
||||
|
@ -308,16 +309,16 @@ void ZoomEffect::paintScreen(int mask, QRegion region, ScreenPaintData& data)
|
|||
xMove = yMove = 0;
|
||||
if (x < threshold)
|
||||
xMove = (x - threshold) / zoom;
|
||||
else if (x + threshold > displayWidth())
|
||||
xMove = (x + threshold - displayWidth()) / zoom;
|
||||
else if (x + threshold > screenSize.width())
|
||||
xMove = (x + threshold - screenSize.width()) / zoom;
|
||||
if (y < threshold)
|
||||
yMove = (y - threshold) / zoom;
|
||||
else if (y + threshold > displayHeight())
|
||||
yMove = (y + threshold - displayHeight()) / zoom;
|
||||
else if (y + threshold > screenSize.height())
|
||||
yMove = (y + threshold - screenSize.height()) / zoom;
|
||||
if (xMove)
|
||||
prevPoint.setX(qMax(0, qMin(displayWidth(), prevPoint.x() + xMove)));
|
||||
prevPoint.setX(qMax(0, qMin(screenSize.width(), prevPoint.x() + xMove)));
|
||||
if (yMove)
|
||||
prevPoint.setY(qMax(0, qMin(displayHeight(), prevPoint.y() + yMove)));
|
||||
prevPoint.setY(qMax(0, qMin(screenSize.height(), prevPoint.y() + yMove)));
|
||||
data.setXTranslation(- int(prevPoint.x() * (zoom - 1.0)));
|
||||
data.setYTranslation(- int(prevPoint.y() * (zoom - 1.0)));
|
||||
break;
|
||||
|
@ -444,8 +445,9 @@ void ZoomEffect::actualSize()
|
|||
|
||||
void ZoomEffect::timelineFrameChanged(int /* frame */)
|
||||
{
|
||||
prevPoint.setX(qMax(0, qMin(displayWidth(), prevPoint.x() + xMove)));
|
||||
prevPoint.setY(qMax(0, qMin(displayHeight(), prevPoint.y() + yMove)));
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
prevPoint.setX(qMax(0, qMin(screenSize.width(), prevPoint.x() + xMove)));
|
||||
prevPoint.setY(qMax(0, qMin(screenSize.height(), prevPoint.y() + yMove)));
|
||||
cursorPoint = prevPoint;
|
||||
effects->addRepaintFull();
|
||||
}
|
||||
|
@ -455,17 +457,18 @@ void ZoomEffect::moveZoom(int x, int y)
|
|||
if (timeline.state() == QTimeLine::Running)
|
||||
timeline.stop();
|
||||
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
if (x < 0)
|
||||
xMove = - qMax(1.0, displayWidth() / zoom / moveFactor);
|
||||
xMove = - qMax(1.0, screenSize.width() / zoom / moveFactor);
|
||||
else if (x > 0)
|
||||
xMove = qMax(1.0, displayWidth() / zoom / moveFactor);
|
||||
xMove = qMax(1.0, screenSize.width() / zoom / moveFactor);
|
||||
else
|
||||
xMove = 0;
|
||||
|
||||
if (y < 0)
|
||||
yMove = - qMax(1.0, displayHeight() / zoom / moveFactor);
|
||||
yMove = - qMax(1.0, screenSize.height() / zoom / moveFactor);
|
||||
else if (y > 0)
|
||||
yMove = qMax(1.0, displayHeight() / zoom / moveFactor);
|
||||
yMove = qMax(1.0, screenSize.height() / zoom / moveFactor);
|
||||
else
|
||||
yMove = 0;
|
||||
|
||||
|
@ -499,7 +502,7 @@ void ZoomEffect::moveMouseToFocus()
|
|||
|
||||
void ZoomEffect::moveMouseToCenter()
|
||||
{
|
||||
QRect r(0, 0, displayWidth(), displayHeight());
|
||||
const QRect r = effects->virtualScreenGeometry();
|
||||
QCursor::setPos(r.x() + r.width() / 2, r.y() + r.height() / 2);
|
||||
}
|
||||
|
||||
|
@ -519,7 +522,8 @@ void ZoomEffect::focusChanged(int px, int py, int rx, int ry, int rwidth, int rh
|
|||
{
|
||||
if (zoom == 1.0)
|
||||
return;
|
||||
focusPoint = (px >= 0 && py >= 0) ? QPoint(px, py) : QPoint(rx + qMax(0, (qMin(displayWidth(), rwidth) / 2) - 60), ry + qMax(0, (qMin(displayHeight(), rheight) / 2) - 60));
|
||||
const QSize screenSize = effects->virtualScreenSize();
|
||||
focusPoint = (px >= 0 && py >= 0) ? QPoint(px, py) : QPoint(rx + qMax(0, (qMin(screenSize.width(), rwidth) / 2) - 60), ry + qMax(0, (qMin(screenSize.height(), rheight) / 2) - 60));
|
||||
if (enableFocusTracking) {
|
||||
lastFocusEvent = QTime::currentTime();
|
||||
effects->addRepaintFull();
|
||||
|
|
|
@ -584,16 +584,6 @@ void Effect::setPositionTransformations(WindowPaintData& data, QRect& region, Ef
|
|||
data.setYTranslation(y - w->y());
|
||||
}
|
||||
|
||||
int Effect::displayWidth()
|
||||
{
|
||||
return KWin::displayWidth();
|
||||
}
|
||||
|
||||
int Effect::displayHeight()
|
||||
{
|
||||
return KWin::displayHeight();
|
||||
}
|
||||
|
||||
QPoint Effect::cursorPos()
|
||||
{
|
||||
return effects->cursorPos();
|
||||
|
|
|
@ -528,8 +528,6 @@ public:
|
|||
*/
|
||||
virtual QString debug(const QString ¶meter) const;
|
||||
|
||||
static int displayWidth();
|
||||
static int displayHeight();
|
||||
static QPoint cursorPos();
|
||||
|
||||
/**
|
||||
|
|
|
@ -73,14 +73,14 @@ QScriptValue kwinEffectDisplayWidth(QScriptContext *context, QScriptEngine *engi
|
|||
{
|
||||
Q_UNUSED(context)
|
||||
Q_UNUSED(engine)
|
||||
return Effect::displayWidth();
|
||||
return displayWidth();
|
||||
}
|
||||
|
||||
QScriptValue kwinEffectDisplayHeight(QScriptContext *context, QScriptEngine *engine)
|
||||
{
|
||||
Q_UNUSED(context)
|
||||
Q_UNUSED(engine)
|
||||
return Effect::displayHeight();
|
||||
return displayHeight();
|
||||
}
|
||||
|
||||
QScriptValue kwinScriptGlobalShortcut(QScriptContext *context, QScriptEngine *engine)
|
||||
|
|
Loading…
Reference in a new issue