Allow desktop effects to access the new DesktopLayout class. Replaced
all code that used calcDesktopLayout() so the function could be removed. Minor changes to the DesktopLayout class itself. svn path=/trunk/KDE/kdebase/workspace/; revision=925930
This commit is contained in:
parent
4681129e4b
commit
dd28e15a1b
12 changed files with 238 additions and 152 deletions
|
@ -59,20 +59,21 @@ void DesktopLayout::setNETDesktopLayout( Qt::Orientation orientation, int width,
|
|||
height = ( m_count + width - 1 ) / width;
|
||||
|
||||
// Set private variables
|
||||
m_gridSize = QSize( width, height );
|
||||
delete[] m_grid;
|
||||
m_grid = new int[width * height];
|
||||
m_gridSize = QSize( width, height );
|
||||
int size = width * height;
|
||||
m_grid = new int[size];
|
||||
|
||||
// Populate grid
|
||||
int desktop = 1;
|
||||
if( orientation == Qt::Horizontal )
|
||||
for( int y = 0; y < height; y++ )
|
||||
for( int x = 0; x < width; x++ )
|
||||
m_grid[y * height + x] = (desktop <= m_count ? desktop++ : 0);
|
||||
m_grid[y * width + x] = (desktop <= m_count ? desktop++ : 0);
|
||||
else
|
||||
for( int x = 0; x < width; x++ )
|
||||
for( int y = 0; y < height; y++ )
|
||||
m_grid[y * height + x] = (desktop <= m_count ? desktop++ : 0);
|
||||
m_grid[y * width + x] = (desktop <= m_count ? desktop++ : 0);
|
||||
}
|
||||
|
||||
QPoint DesktopLayout::desktopGridCoords( int id ) const
|
||||
|
|
|
@ -46,6 +46,10 @@ class DesktopLayout
|
|||
*/
|
||||
void setNumberOfDesktops( int count );
|
||||
|
||||
/**
|
||||
* @returns The size of desktop layout in grid units.
|
||||
*/
|
||||
QSize gridSize() const;
|
||||
/**
|
||||
* @returns The width of desktop layout in grid units.
|
||||
*/
|
||||
|
@ -146,6 +150,11 @@ inline int DesktopLayout::numberOfDesktops() const
|
|||
return m_count;
|
||||
}
|
||||
|
||||
inline QSize DesktopLayout::gridSize() const
|
||||
{
|
||||
return m_gridSize;
|
||||
}
|
||||
|
||||
inline int DesktopLayout::gridWidth() const
|
||||
{
|
||||
return m_gridSize.width();
|
||||
|
@ -180,7 +189,7 @@ inline void DesktopLayout::setCurrentDesktop( int current )
|
|||
|
||||
inline int DesktopLayout::desktopAtCoords( QPoint coords ) const
|
||||
{
|
||||
return m_grid[coords.y() * m_gridSize.height() + coords.x()];
|
||||
return m_grid[coords.y() * m_gridSize.width() + coords.x()];
|
||||
}
|
||||
|
||||
inline bool DesktopLayout::isDynamic() const
|
||||
|
|
100
effects.cpp
100
effects.cpp
|
@ -446,41 +446,91 @@ void EffectsHandlerImpl::setCurrentDesktop( int desktop )
|
|||
Workspace::self()->setCurrentDesktop( desktop );
|
||||
}
|
||||
|
||||
QSize EffectsHandlerImpl::desktopGridSize() const
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->gridSize();
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::desktopGridWidth() const
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->gridWidth();
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::desktopGridHeight() const
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->gridHeight();
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::workspaceWidth() const
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->width();
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::workspaceHeight() const
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->height();
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::desktopAtCoords( QPoint coords ) const
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->desktopAtCoords( coords );
|
||||
}
|
||||
|
||||
QPoint EffectsHandlerImpl::desktopGridCoords( int id ) const
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->desktopGridCoords( id );
|
||||
}
|
||||
|
||||
QPoint EffectsHandlerImpl::desktopCoords( int id ) const
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->desktopCoords( id );
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::desktopAbove( int desktop, bool wrap ) const
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->desktopAbove( desktop, wrap );
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::desktopToRight( int desktop, bool wrap ) const
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->desktopToRight( desktop, wrap );
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::desktopBelow( int desktop, bool wrap ) const
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->desktopBelow( desktop, wrap );
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::desktopToLeft( int desktop, bool wrap ) const
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->desktopToLeft( desktop, wrap );
|
||||
}
|
||||
|
||||
bool EffectsHandlerImpl::desktopLayoutIsDynamic() const
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->isDynamic();
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::addDesktop( QPoint coords )
|
||||
{
|
||||
return Workspace::self()->getDesktopLayout()->addDesktop( coords );
|
||||
}
|
||||
|
||||
void EffectsHandlerImpl::deleteDesktop( int id )
|
||||
{
|
||||
Workspace::self()->getDesktopLayout()->deleteDesktop( id );
|
||||
}
|
||||
|
||||
QString EffectsHandlerImpl::desktopName( int desktop ) const
|
||||
{
|
||||
return Workspace::self()->desktopName( desktop );
|
||||
}
|
||||
|
||||
void EffectsHandlerImpl::calcDesktopLayout(int* x, int* y, Qt::Orientation* orientation) const
|
||||
{
|
||||
Workspace::self()->calcDesktopLayout( x, y, orientation );
|
||||
}
|
||||
|
||||
bool EffectsHandlerImpl::optionRollOverDesktops() const
|
||||
{
|
||||
return options->rollOverDesktops;
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::desktopToLeft( int desktop, bool wrap ) const
|
||||
{
|
||||
return Workspace::self()->desktopToLeft( desktop, wrap );
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::desktopToRight( int desktop, bool wrap ) const
|
||||
{
|
||||
return Workspace::self()->desktopToRight( desktop, wrap );
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::desktopUp( int desktop, bool wrap ) const
|
||||
{
|
||||
return Workspace::self()->desktopUp( desktop, wrap );
|
||||
}
|
||||
|
||||
int EffectsHandlerImpl::desktopDown( int desktop, bool wrap ) const
|
||||
{
|
||||
return Workspace::self()->desktopDown( desktop, wrap );
|
||||
}
|
||||
|
||||
double EffectsHandlerImpl::animationTimeFactor() const
|
||||
{
|
||||
return options->animationTimeFactor();
|
||||
|
|
24
effects.h
24
effects.h
|
@ -23,6 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
#include "kwineffects.h"
|
||||
|
||||
#include "desktoplayout.h"
|
||||
#include "scene.h"
|
||||
|
||||
#include <QStack>
|
||||
|
@ -59,7 +60,24 @@ class EffectsHandlerImpl : public EffectsHandler
|
|||
virtual int currentDesktop() const;
|
||||
virtual int numberOfDesktops() const;
|
||||
virtual void setCurrentDesktop( int desktop );
|
||||
virtual QSize desktopGridSize() const;
|
||||
virtual int desktopGridWidth() const;
|
||||
virtual int desktopGridHeight() const;
|
||||
virtual int workspaceWidth() const;
|
||||
virtual int workspaceHeight() const;
|
||||
virtual int desktopAtCoords( QPoint coords ) const;
|
||||
virtual QPoint desktopGridCoords( int id ) const;
|
||||
virtual QPoint desktopCoords( int id ) const;
|
||||
virtual int desktopAbove( int desktop = 0, bool wrap = true ) const;
|
||||
virtual int desktopToRight( int desktop = 0, bool wrap = true ) const;
|
||||
virtual int desktopBelow( int desktop = 0, bool wrap = true ) const;
|
||||
virtual int desktopToLeft( int desktop = 0, bool wrap = true ) const;
|
||||
virtual bool desktopLayoutIsDynamic() const;
|
||||
virtual int addDesktop( QPoint coords );
|
||||
virtual void deleteDesktop( int id );
|
||||
virtual QString desktopName( int desktop ) const;
|
||||
virtual bool optionRollOverDesktops() const;
|
||||
|
||||
virtual int displayWidth() const;
|
||||
virtual int displayHeight() const;
|
||||
virtual QPoint cursorPos() const;
|
||||
|
@ -98,12 +116,6 @@ class EffectsHandlerImpl : public EffectsHandler
|
|||
virtual QRect clientArea( clientAreaOption, int screen, int desktop ) const;
|
||||
virtual QRect clientArea( clientAreaOption, const EffectWindow* c ) const;
|
||||
virtual QRect clientArea( clientAreaOption, const QPoint& p, int desktop ) const;
|
||||
virtual void calcDesktopLayout(int* x, int* y, Qt::Orientation* orientation) const;
|
||||
virtual bool optionRollOverDesktops() const;
|
||||
virtual int desktopToLeft( int desktop, bool wrap ) const;
|
||||
virtual int desktopToRight( int desktop, bool wrap ) const;
|
||||
virtual int desktopUp( int desktop, bool wrap ) const;
|
||||
virtual int desktopDown( int desktop, bool wrap ) const;
|
||||
virtual double animationTimeFactor() const;
|
||||
virtual WindowQuadType newWindowQuadType();
|
||||
|
||||
|
|
|
@ -148,7 +148,7 @@ void CubeSlideEffect::paintSlideCube(int mask, QRegion region, ScreenPaintData&
|
|||
case Upwards:
|
||||
firstFaceRot.axis = RotationData::XAxis;
|
||||
secondFaceRot.axis = RotationData::XAxis;
|
||||
secondDesktop = effects->desktopUp( front_desktop, true);
|
||||
secondDesktop = effects->desktopAbove( front_desktop, true);
|
||||
firstFaceRot.angle = -90.0f*timeLine.value();
|
||||
secondFaceRot.angle = 90.0f*(1.0f - timeLine.value());
|
||||
point = rect.height()/2*tan(45.0f*M_PI/180.0f);
|
||||
|
@ -156,7 +156,7 @@ void CubeSlideEffect::paintSlideCube(int mask, QRegion region, ScreenPaintData&
|
|||
case Downwards:
|
||||
firstFaceRot.axis = RotationData::XAxis;
|
||||
secondFaceRot.axis = RotationData::XAxis;
|
||||
secondDesktop = effects->desktopDown( front_desktop, true );
|
||||
secondDesktop = effects->desktopBelow( front_desktop, true );
|
||||
firstFaceRot.angle = 90.0f*timeLine.value();
|
||||
secondFaceRot.angle = -90.0f*(1.0f - timeLine.value());
|
||||
point = rect.height()/2*tan(45.0f*M_PI/180.0f);
|
||||
|
@ -233,10 +233,10 @@ void CubeSlideEffect::postPaintScreen()
|
|||
front_desktop = effects->desktopToRight( front_desktop, true );
|
||||
break;
|
||||
case Upwards:
|
||||
front_desktop = effects->desktopUp( front_desktop, true );
|
||||
front_desktop = effects->desktopAbove( front_desktop, true );
|
||||
break;
|
||||
case Downwards:
|
||||
front_desktop = effects->desktopDown( front_desktop, true );
|
||||
front_desktop = effects->desktopBelow( front_desktop, true );
|
||||
break;
|
||||
}
|
||||
timeLine.setProgress( 0.0 );
|
||||
|
@ -265,47 +265,43 @@ void CubeSlideEffect::desktopChanged( int old )
|
|||
slideRotations.enqueue( direction );
|
||||
}
|
||||
// calculate distance in respect to pager
|
||||
int x, y;
|
||||
Qt::Orientation orientation;
|
||||
effects->calcDesktopLayout( &x, &y, &orientation );
|
||||
int x_distance = (( effects->currentDesktop() - 1 ) % x ) - (( old - 1 ) % x );
|
||||
if( qAbs( x_distance ) > x/2 )
|
||||
QPoint diff = effects->desktopGridCoords( effects->currentDesktop() ) - effects->desktopGridCoords( old );
|
||||
if( qAbs( diff.x() ) > effects->desktopGridWidth()/2 )
|
||||
{
|
||||
int sign = -1 * (x_distance/qAbs( x_distance ));
|
||||
x_distance = sign * ( x - qAbs( x_distance ));
|
||||
int sign = -1 * (diff.x()/qAbs( diff.x() ));
|
||||
diff.setX( sign * ( effects->desktopGridWidth() - qAbs( diff.x() )));
|
||||
}
|
||||
if( x_distance > 0 )
|
||||
if( diff.x() > 0 )
|
||||
{
|
||||
for( int i=0; i<x_distance; i++ )
|
||||
for( int i=0; i<diff.x(); i++ )
|
||||
{
|
||||
slideRotations.enqueue( Right );
|
||||
}
|
||||
}
|
||||
else if( x_distance < 0 )
|
||||
else if( diff.x() < 0 )
|
||||
{
|
||||
x_distance *= -1;
|
||||
for( int i=0; i<x_distance; i++ )
|
||||
diff.setX( -diff.x() );
|
||||
for( int i=0; i<diff.x(); i++ )
|
||||
{
|
||||
slideRotations.enqueue( Left );
|
||||
}
|
||||
}
|
||||
int y_distance = (( effects->currentDesktop() -1 ) / x ) - (( old - 1 ) / x );
|
||||
if( qAbs( y_distance ) > y/2 )
|
||||
if( qAbs( diff.y() ) > effects->desktopGridHeight()/2 )
|
||||
{
|
||||
int sign = -1 * (y_distance/qAbs( y_distance ));
|
||||
y_distance = sign * ( y - qAbs( y_distance ));
|
||||
int sign = -1 * (diff.y()/qAbs( diff.y() ));
|
||||
diff.setY( sign * ( effects->desktopGridHeight() - qAbs( diff.y() )));
|
||||
}
|
||||
if( y_distance > 0 )
|
||||
if( diff.y() > 0 )
|
||||
{
|
||||
for( int i=0; i<y_distance; i++ )
|
||||
for( int i=0; i<diff.y(); i++ )
|
||||
{
|
||||
slideRotations.enqueue( Downwards );
|
||||
}
|
||||
}
|
||||
if( y_distance < 0 )
|
||||
if( diff.y() < 0 )
|
||||
{
|
||||
y_distance *= -1;
|
||||
for( int i=0; i<y_distance; i++ )
|
||||
diff.setY( -diff.y() );
|
||||
for( int i=0; i<diff.y(); i++ )
|
||||
{
|
||||
slideRotations.enqueue( Upwards );
|
||||
}
|
||||
|
|
|
@ -37,6 +37,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
namespace KWin
|
||||
{
|
||||
|
||||
// WARNING, TODO: This effect relies on the desktop layout being EWMH-compliant.
|
||||
|
||||
KWIN_EFFECT( desktopgrid, DesktopGridEffect )
|
||||
|
||||
DesktopGridEffect::DesktopGridEffect()
|
||||
|
@ -755,7 +757,8 @@ void DesktopGridEffect::setup()
|
|||
{
|
||||
default:
|
||||
case LayoutPager:
|
||||
effects->calcDesktopLayout( &gridSize.rwidth(), &gridSize.rheight(), &orientation );
|
||||
orientation = Qt::Horizontal;
|
||||
gridSize = effects->desktopGridSize();
|
||||
break;
|
||||
case LayoutAutomatic:
|
||||
y = sqrt( numDesktops ) + 0.5;
|
||||
|
@ -767,7 +770,7 @@ void DesktopGridEffect::setup()
|
|||
gridSize.setHeight( y );
|
||||
break;
|
||||
case LayoutCustom:
|
||||
effects->calcDesktopLayout( &gridSize.rwidth(), &gridSize.rheight(), &orientation );
|
||||
orientation = Qt::Horizontal;
|
||||
gridSize.setWidth( ceil( effects->numberOfDesktops() / double( customLayoutRows )));
|
||||
gridSize.setHeight( customLayoutRows );
|
||||
break;
|
||||
|
|
|
@ -162,26 +162,8 @@ void HighlightWindowEffect::propertyNotify( EffectWindow* w, long a )
|
|||
thumbRect = m_highlightedWindow->geometry();
|
||||
|
||||
// Determine position of desktop relative to the current one
|
||||
QSize grid;
|
||||
Qt::Orientation orientation;
|
||||
effects->calcDesktopLayout( &grid.rwidth(), &grid.rheight(), &orientation );
|
||||
QPoint currentDesktop;
|
||||
QPoint targetDesktop;
|
||||
if( orientation == Qt::Horizontal )
|
||||
{
|
||||
currentDesktop.setX(( effects->currentDesktop() - 1 ) % grid.width() + 1 );
|
||||
currentDesktop.setY(( effects->currentDesktop() - 1 ) / grid.width() + 1 );
|
||||
targetDesktop.setX(( m_highlightedWindow->desktop() - 1 ) % grid.width() + 1 );
|
||||
targetDesktop.setY(( m_highlightedWindow->desktop() - 1 ) / grid.width() + 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
currentDesktop.setX(( effects->currentDesktop() - 1 ) / grid.height() + 1 );
|
||||
currentDesktop.setY(( effects->currentDesktop() - 1 ) % grid.height() + 1 );
|
||||
targetDesktop.setX(( m_highlightedWindow->desktop() - 1 ) / grid.height() + 1 );
|
||||
targetDesktop.setY(( m_highlightedWindow->desktop() - 1 ) % grid.height() + 1 );
|
||||
}
|
||||
QPoint direction = targetDesktop - currentDesktop;
|
||||
QPoint direction = effects->desktopGridCoords( m_highlightedWindow->desktop() ) -
|
||||
effects->desktopGridCoords( effects->currentDesktop() );
|
||||
|
||||
// Draw a line from the center of the current desktop to the center of the target desktop.
|
||||
QPointF desktopLine( 0, 0, direction.x() * screenArea.width(), direction.y() * screenArea.height() );
|
||||
|
|
|
@ -92,17 +92,14 @@ void SlideEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
|||
of it, the destination is computed from the current desktop. Positions of desktops
|
||||
are done using their topleft corner.
|
||||
*/
|
||||
QPoint destPos = desktopRect( effects->currentDesktop(), false ).topLeft();
|
||||
QPoint destPos = desktopRect( effects->currentDesktop() ).topLeft();
|
||||
QPoint diffPos = destPos - slide_start_pos;
|
||||
int w = 0;
|
||||
int h = 0;
|
||||
if( effects->optionRollOverDesktops())
|
||||
{
|
||||
int x, y;
|
||||
Qt::Orientation orientation;
|
||||
effects->calcDesktopLayout( &x, &y, &orientation );
|
||||
w = x * displayWidth();
|
||||
h = y * displayHeight();
|
||||
w = effects->workspaceWidth();
|
||||
h = effects->workspaceHeight();
|
||||
// wrap around if shorter
|
||||
if( diffPos.x() > 0 && diffPos.x() > w / 2 )
|
||||
diffPos.setX( diffPos.x() - w );
|
||||
|
@ -128,7 +125,7 @@ void SlideEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
|||
desktop <= effects->numberOfDesktops();
|
||||
++desktop )
|
||||
{
|
||||
QRect rect = desktopRect( desktop, false );
|
||||
QRect rect = desktopRect( desktop );
|
||||
if( currentRegion.contains( rect )) // part of the desktop needs painting
|
||||
{
|
||||
painting_desktop = desktop;
|
||||
|
@ -176,27 +173,10 @@ void SlideEffect::postPaintScreen()
|
|||
}
|
||||
|
||||
// Gives a position of the given desktop when all desktops are arranged in a grid
|
||||
QRect SlideEffect::desktopRect( int desktop, bool scaled ) const
|
||||
QRect SlideEffect::desktopRect( int desktop ) const
|
||||
{
|
||||
int x, y;
|
||||
Qt::Orientation orientation;
|
||||
effects->calcDesktopLayout( &x, &y, &orientation );
|
||||
--desktop; // make it start with 0
|
||||
QRect rect;
|
||||
if( orientation == Qt::Horizontal )
|
||||
rect = QRect(( desktop % x ) * displayWidth(), ( desktop / x ) * displayHeight(),
|
||||
displayWidth(), displayHeight());
|
||||
else
|
||||
rect = QRect(( desktop / y ) * displayWidth(), ( desktop % y ) * displayHeight(),
|
||||
displayWidth(), displayHeight());
|
||||
if( !scaled )
|
||||
return rect;
|
||||
QRect current = desktopRect( effects->currentDesktop(), false );
|
||||
double progress = mTimeLine.value();
|
||||
rect = QRect( qRound( interpolate( rect.x() - current.x(), rect.x() / double( x ), progress )),
|
||||
qRound( interpolate( rect.y() - current.y(), rect.y() / double( y ), progress )),
|
||||
qRound( interpolate( rect.width(), displayWidth() / double( x ), progress )),
|
||||
qRound( interpolate( rect.height(), displayHeight() / double( y ), progress )));
|
||||
QRect rect( 0, 0, displayWidth(), displayHeight() );
|
||||
rect.translate( effects->desktopCoords( desktop ));
|
||||
return rect;
|
||||
}
|
||||
|
||||
|
@ -207,16 +187,13 @@ void SlideEffect::desktopChanged( int old )
|
|||
|
||||
if( slide ) // old slide still in progress
|
||||
{
|
||||
QPoint diffPos = desktopRect( old, false ).topLeft() - slide_start_pos;
|
||||
QPoint diffPos = desktopRect( old ).topLeft() - slide_start_pos;
|
||||
int w = 0;
|
||||
int h = 0;
|
||||
if( effects->optionRollOverDesktops())
|
||||
{
|
||||
int x, y;
|
||||
Qt::Orientation orientation;
|
||||
effects->calcDesktopLayout( &x, &y, &orientation );
|
||||
w = x * displayWidth();
|
||||
h = y * displayHeight();
|
||||
w = effects->workspaceWidth();
|
||||
h = effects->workspaceHeight();
|
||||
// wrap around if shorter
|
||||
if( diffPos.x() > 0 && diffPos.x() > w / 2 )
|
||||
diffPos.setX( diffPos.x() - w );
|
||||
|
@ -236,7 +213,7 @@ void SlideEffect::desktopChanged( int old )
|
|||
currentRegion |= ( currentRegion & QRect( w, 0, w, h )).translated( -w, 0 );
|
||||
currentRegion |= ( currentRegion & QRect( 0, h, w, h )).translated( 0, -h );
|
||||
}
|
||||
QRect rect = desktopRect( effects->currentDesktop(), false );
|
||||
QRect rect = desktopRect( effects->currentDesktop() );
|
||||
if( currentRegion.contains( rect ))
|
||||
{ // current position is in new current desktop (e.g. quickly changing back),
|
||||
// don't do full progress
|
||||
|
@ -265,7 +242,7 @@ void SlideEffect::desktopChanged( int old )
|
|||
if( effects->activeFullScreenEffect() && effects->activeFullScreenEffect() != this )
|
||||
return;
|
||||
mTimeLine.setProgress(0);
|
||||
slide_start_pos = desktopRect( old, false ).topLeft();
|
||||
slide_start_pos = desktopRect( old ).topLeft();
|
||||
slide = true;
|
||||
effects->setActiveFullScreenEffect( this );
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ class SlideEffect
|
|||
virtual void paintWindow( EffectWindow* w, int mask, QRegion region, WindowPaintData& data );
|
||||
virtual void desktopChanged( int old );
|
||||
private:
|
||||
QRect desktopRect( int desktop, bool scaled ) const;
|
||||
QRect desktopRect( int desktop ) const;
|
||||
TimeLine mTimeLine;
|
||||
int painting_desktop;
|
||||
bool slide;
|
||||
|
|
|
@ -164,7 +164,7 @@ X-KDE-Library=kwin4_effect_cooleffect
|
|||
|
||||
#define KWIN_EFFECT_API_MAKE_VERSION( major, minor ) (( major ) << 8 | ( minor ))
|
||||
#define KWIN_EFFECT_API_VERSION_MAJOR 0
|
||||
#define KWIN_EFFECT_API_VERSION_MINOR 60
|
||||
#define KWIN_EFFECT_API_VERSION_MINOR 61
|
||||
#define KWIN_EFFECT_API_VERSION KWIN_EFFECT_API_MAKE_VERSION( \
|
||||
KWIN_EFFECT_API_VERSION_MAJOR, KWIN_EFFECT_API_VERSION_MINOR )
|
||||
|
||||
|
@ -547,23 +547,96 @@ class KWIN_EXPORT EffectsHandler
|
|||
virtual EffectWindow* activeWindow() const = 0 ;
|
||||
virtual void moveWindow( EffectWindow* w, const QPoint& pos ) = 0;
|
||||
virtual void windowToDesktop( EffectWindow* w, int desktop ) = 0;
|
||||
//
|
||||
|
||||
// Desktops
|
||||
/**
|
||||
* @returns The ID of the current desktop.
|
||||
*/
|
||||
virtual int currentDesktop() const = 0;
|
||||
/**
|
||||
* @returns Total number of desktops currently in existance.
|
||||
*/
|
||||
virtual int numberOfDesktops() const = 0;
|
||||
/**
|
||||
* Set the current desktop to @a desktop.
|
||||
*/
|
||||
virtual void setCurrentDesktop( int desktop ) = 0;
|
||||
/**
|
||||
* @returns The size of desktop layout in grid units.
|
||||
*/
|
||||
virtual QSize desktopGridSize() const = 0;
|
||||
/**
|
||||
* @returns The width of desktop layout in grid units.
|
||||
*/
|
||||
virtual int desktopGridWidth() const = 0;
|
||||
/**
|
||||
* @returns The height of desktop layout in grid units.
|
||||
*/
|
||||
virtual int desktopGridHeight() const = 0;
|
||||
/**
|
||||
* @returns The width of desktop layout in pixels.
|
||||
*/
|
||||
virtual int workspaceWidth() const = 0;
|
||||
/**
|
||||
* @returns The height of desktop layout in pixels.
|
||||
*/
|
||||
virtual int workspaceHeight() const = 0;
|
||||
/**
|
||||
* @returns The ID of the desktop at the point @a coords or 0 if no desktop exists at that
|
||||
* point. @a coords is to be in grid units.
|
||||
*/
|
||||
virtual int desktopAtCoords( QPoint coords ) const = 0;
|
||||
/**
|
||||
* @returns The coords of desktop @a id in grid units.
|
||||
*/
|
||||
virtual QPoint desktopGridCoords( int id ) const = 0;
|
||||
/**
|
||||
* @returns The coords of the top-left corner of desktop @a id in pixels.
|
||||
*/
|
||||
virtual QPoint desktopCoords( int id ) const = 0;
|
||||
/**
|
||||
* @returns The ID of the desktop above desktop @a id. Wraps around to the bottom of
|
||||
* the layout if @a wrap is set. If @a id is not set use the current one.
|
||||
*/
|
||||
virtual int desktopAbove( int desktop = 0, bool wrap = true ) const = 0;
|
||||
/**
|
||||
* @returns The ID of the desktop to the right of desktop @a id. Wraps around to the
|
||||
* left of the layout if @a wrap is set. If @a id is not set use the current one.
|
||||
*/
|
||||
virtual int desktopToRight( int desktop = 0, bool wrap = true ) const = 0;
|
||||
/**
|
||||
* @returns The ID of the desktop below desktop @a id. Wraps around to the top of the
|
||||
* layout if @a wrap is set. If @a id is not set use the current one.
|
||||
*/
|
||||
virtual int desktopBelow( int desktop = 0, bool wrap = true ) const = 0;
|
||||
/**
|
||||
* @returns The ID of the desktop to the left of desktop @a id. Wraps around to the
|
||||
* right of the layout if @a wrap is set. If @a id is not set use the current one.
|
||||
*/
|
||||
virtual int desktopToLeft( int desktop = 0, bool wrap = true ) const = 0;
|
||||
/**
|
||||
* @returns Whether or not the desktop layout is allowed to be modified by the user.
|
||||
*/
|
||||
virtual bool desktopLayoutIsDynamic() const = 0;
|
||||
/**
|
||||
* Create new desktop at the point @a coords
|
||||
* @returns The ID of the created desktop
|
||||
*/
|
||||
virtual int addDesktop( QPoint coords ) = 0;
|
||||
/**
|
||||
* Deletes the desktop with the ID @a id. All desktops with an ID greater than the one that
|
||||
* was deleted will have their IDs' decremented.
|
||||
*/
|
||||
virtual void deleteDesktop( int id ) = 0;
|
||||
virtual QString desktopName( int desktop ) const = 0;
|
||||
virtual bool optionRollOverDesktops() const = 0;
|
||||
|
||||
virtual int activeScreen() const = 0; // Xinerama
|
||||
virtual int numScreens() const = 0; // Xinerama
|
||||
virtual int screenNumber( const QPoint& pos ) const = 0; // Xinerama
|
||||
virtual QRect clientArea( clientAreaOption, int screen, int desktop ) const = 0;
|
||||
virtual QRect clientArea( clientAreaOption, const EffectWindow* c ) const = 0;
|
||||
virtual QRect clientArea( clientAreaOption, const QPoint& p, int desktop ) const = 0;
|
||||
virtual void calcDesktopLayout(int* x, int* y, Qt::Orientation* orientation) const = 0;
|
||||
virtual bool optionRollOverDesktops() const = 0;
|
||||
virtual int desktopToLeft( int desktop, bool wrap ) const = 0;
|
||||
virtual int desktopToRight( int desktop, bool wrap ) const = 0;
|
||||
virtual int desktopUp( int desktop, bool wrap ) const = 0;
|
||||
virtual int desktopDown( int desktop, bool wrap ) const = 0;
|
||||
/**
|
||||
* Factor by which animation speed in the effect should be modified (multiplied).
|
||||
* If configurable in the effect itself, the option should have also 'default'
|
||||
|
|
|
@ -124,7 +124,6 @@ Workspace::Workspace( bool restore )
|
|||
, global_shortcuts_disabled_for_client( false )
|
||||
, workspaceInit( true )
|
||||
, startup( 0 )
|
||||
, layoutOrientation( Qt::Vertical )
|
||||
, managing_topmenus( false )
|
||||
, topmenu_selection( NULL )
|
||||
, topmenu_watcher( NULL )
|
||||
|
@ -1607,32 +1606,12 @@ void Workspace::updateDesktopLayout()
|
|||
int height = rootInfo->desktopLayoutColumnsRows().height();
|
||||
if( width == 0 && height == 0 ) // Not given, set default layout
|
||||
height = 2;
|
||||
layoutOrientation = rootInfo->desktopLayoutOrientation() == NET::OrientationHorizontal ?
|
||||
Qt::Horizontal : Qt::Vertical;
|
||||
desktopLayout.setNETDesktopLayout(
|
||||
layoutOrientation, width, height,
|
||||
0 //rootInfo->desktopLayoutCorner() // Not really worth implementing right now.
|
||||
rootInfo->desktopLayoutOrientation() == NET::OrientationHorizontal ? Qt::Horizontal : Qt::Vertical,
|
||||
width, height, 0 //rootInfo->desktopLayoutCorner() // Not really worth implementing right now.
|
||||
);
|
||||
}
|
||||
|
||||
void Workspace::calcDesktopLayout( int* xp, int* yp, Qt::Orientation* orientation ) const
|
||||
{ // TODO: Deprecated, use desktopLayout instead
|
||||
int x = desktopLayout.gridWidth(); // <= 0 means compute it from the other and total number of desktops
|
||||
int y = desktopLayout.gridHeight();
|
||||
if(( x <= 0 ) && ( y > 0 ))
|
||||
x = ( numberOfDesktops() + y - 1 ) / y;
|
||||
else if(( y <= 0) && ( x > 0 ))
|
||||
y = ( numberOfDesktops() + x - 1 ) / x;
|
||||
|
||||
if( x <= 0 )
|
||||
x = 1;
|
||||
if( y <= 0 )
|
||||
y = 1;
|
||||
*xp = x;
|
||||
*yp = y;
|
||||
*orientation = layoutOrientation;
|
||||
}
|
||||
|
||||
void Workspace::killWindowId( Window window_to_kill )
|
||||
{
|
||||
if( window_to_kill == None )
|
||||
|
|
|
@ -167,7 +167,7 @@ class Workspace : public QObject, public KDecorationDefines
|
|||
*/
|
||||
int numberOfDesktops() const;
|
||||
void setNumberOfDesktops( int n );
|
||||
void calcDesktopLayout( int* x, int* y, Qt::Orientation* orientation ) const;
|
||||
DesktopLayout* getDesktopLayout();
|
||||
int desktopToRight( int desktop, bool wrap ) const;
|
||||
int desktopToLeft( int desktop, bool wrap ) const;
|
||||
int desktopUp( int desktop, bool wrap ) const;
|
||||
|
@ -747,7 +747,6 @@ class Workspace : public QObject, public KDecorationDefines
|
|||
int electric_reserved[ELECTRIC_COUNT]; // Corners/edges used by something
|
||||
|
||||
DesktopLayout desktopLayout;
|
||||
Qt::Orientation layoutOrientation; // TODO: Deprecated, remove when calcDesktopLayout() is.
|
||||
|
||||
Placement* initPositioning;
|
||||
|
||||
|
@ -861,6 +860,11 @@ inline int Workspace::numberOfDesktops() const
|
|||
return desktopLayout.numberOfDesktops();
|
||||
}
|
||||
|
||||
inline DesktopLayout* Workspace::getDesktopLayout()
|
||||
{
|
||||
return &desktopLayout;
|
||||
}
|
||||
|
||||
inline int Workspace::desktopToRight( int desktop, bool wrap ) const
|
||||
{
|
||||
return desktopLayout.desktopToRight( desktop, wrap );
|
||||
|
|
Loading…
Reference in a new issue