Drop the multi screen mode where the cube is scaled on one screen. So there is only the span cube on all screens option. The mode is dropped for the following reasons:
* it looks strange * it changes the projection matrix which makes the code ugly * it never worked with cylinder or sphere * it was broken in trunk anyway svn path=/trunk/KDE/kdebase/workspace/; revision=940977icc-effect-5.14.5
parent
6af875f8f9
commit
7fc3bbf39d
|
@ -75,7 +75,6 @@ CubeEffect::CubeEffect()
|
|||
, stop( false )
|
||||
, reflectionPainting( false )
|
||||
, activeScreen( 0 )
|
||||
, bigCube( false )
|
||||
, bottomCap( false )
|
||||
, closeOnMouseRelease( false )
|
||||
, zoom( 0.0 )
|
||||
|
@ -125,7 +124,6 @@ void CubeEffect::loadConfig( QString config )
|
|||
reflection = conf.readEntry( "Reflection", true );
|
||||
rotationDuration = animationTime( conf, "RotationDuration", 500 );
|
||||
backgroundColor = conf.readEntry( "BackgroundColor", QColor( Qt::black ) );
|
||||
bigCube = conf.readEntry( "BigCube", false );
|
||||
capColor = conf.readEntry( "CapColor", KColorScheme( QPalette::Active, KColorScheme::Window ).background().color() );
|
||||
paintCaps = conf.readEntry( "Caps", true );
|
||||
closeOnMouseRelease = conf.readEntry( "CloseOnMouseRelease", false );
|
||||
|
@ -255,7 +253,7 @@ bool CubeEffect::loadShader()
|
|||
cylinderShader->setUniform( "winTexture", 0 );
|
||||
cylinderShader->setUniform( "opacity", cubeOpacity );
|
||||
QRect rect = effects->clientArea( FullScreenArea, activeScreen, effects->currentDesktop());
|
||||
if( effects->numScreens() > 1 && bigCube )
|
||||
if( effects->numScreens() > 1 )
|
||||
rect = effects->clientArea( FullArea, activeScreen, effects->currentDesktop() );
|
||||
cylinderShader->setUniform( "width", (float)rect.width() );
|
||||
cylinderShader->unbind();
|
||||
|
@ -272,7 +270,7 @@ bool CubeEffect::loadShader()
|
|||
sphereShader->setUniform( "winTexture", 0 );
|
||||
sphereShader->setUniform( "opacity", cubeOpacity );
|
||||
QRect rect = effects->clientArea( FullScreenArea, activeScreen, effects->currentDesktop());
|
||||
if( effects->numScreens() > 1 && bigCube )
|
||||
if( effects->numScreens() > 1 )
|
||||
rect = effects->clientArea( FullArea, activeScreen, effects->currentDesktop() );
|
||||
sphereShader->setUniform( "width", (float)rect.width() );
|
||||
sphereShader->setUniform( "height", (float)rect.height() );
|
||||
|
@ -326,7 +324,7 @@ void CubeEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
|||
}
|
||||
|
||||
QRect rect = effects->clientArea( FullScreenArea, activeScreen, effects->currentDesktop());
|
||||
if( effects->numScreens() > 1 && bigCube )
|
||||
if( effects->numScreens() > 1 )
|
||||
rect = effects->clientArea( FullArea, activeScreen, effects->currentDesktop() );
|
||||
QRect fullRect = effects->clientArea( FullArea, activeScreen, effects->currentDesktop() );
|
||||
|
||||
|
@ -349,61 +347,6 @@ void CubeEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
|||
glEnable( GL_BLEND );
|
||||
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
|
||||
|
||||
if( effects->numScreens() > 1 && !bigCube )
|
||||
{
|
||||
windowsOnOtherScreens.clear();
|
||||
// unfortunatelly we have to change the projection matrix in dual screen mode
|
||||
glMatrixMode( GL_PROJECTION );
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
float fovy = 60.0f;
|
||||
float aspect = 1.0f;
|
||||
float zNear = 0.1f;
|
||||
float zFar = 100.0f;
|
||||
float ymax = zNear * tan( fovy * M_PI / 360.0f );
|
||||
float ymin = -ymax;
|
||||
float xmin = ymin * aspect;
|
||||
float xmax = ymax * aspect;
|
||||
float xTranslate = 0.0;
|
||||
float yTranslate = 0.0;
|
||||
float xminFactor = 1.0;
|
||||
float xmaxFactor = 1.0;
|
||||
float yminFactor = 1.0;
|
||||
float ymaxFactor = 1.0;
|
||||
if( rect.x() == 0 && rect.width() != fullRect.width() )
|
||||
{
|
||||
// horizontal layout: left screen
|
||||
xminFactor = (float)rect.width()/(float)fullRect.width();
|
||||
xmaxFactor = ((float)fullRect.width()-(float)rect.width()*0.5f)/((float)fullRect.width()*0.5f);
|
||||
xTranslate = (float)fullRect.width()*0.5f-(float)rect.width()*0.5f;
|
||||
}
|
||||
if( rect.x() != 0 && rect.width() != fullRect.width() )
|
||||
{
|
||||
// horizontal layout: right screen
|
||||
xminFactor = ((float)fullRect.width()-(float)rect.width()*0.5f)/((float)fullRect.width()*0.5f);
|
||||
xmaxFactor = (float)rect.width()/(float)fullRect.width();
|
||||
xTranslate = (float)fullRect.width()*0.5f-(float)rect.width()*0.5f;
|
||||
}
|
||||
if( rect.y() == 0 && rect.height() != fullRect.height() )
|
||||
{
|
||||
// vertical layout: top screen
|
||||
yminFactor = ((float)fullRect.height()-(float)rect.height()*0.5f)/((float)fullRect.height()*0.5f);
|
||||
ymaxFactor = (float)rect.height()/(float)fullRect.height();
|
||||
yTranslate = (float)fullRect.height()*0.5f-(float)rect.height()*0.5f;
|
||||
}
|
||||
if( rect.y() != 0 && rect.height() != fullRect.height() )
|
||||
{
|
||||
// vertical layout: bottom screen
|
||||
yminFactor = (float)rect.height()/(float)fullRect.height();
|
||||
ymaxFactor = ((float)fullRect.height()-(float)rect.height()*0.5f)/((float)fullRect.height()*0.5f);
|
||||
yTranslate = (float)fullRect.height()*0.5f-(float)rect.height()*0.5f;
|
||||
}
|
||||
glFrustum( xmin*xminFactor, xmax*xmaxFactor, ymin*yminFactor, ymax*ymaxFactor, zNear, zFar );
|
||||
glMatrixMode( GL_MODELVIEW );
|
||||
glPushMatrix();
|
||||
glTranslatef( xTranslate, yTranslate, 0.0 );
|
||||
}
|
||||
|
||||
// some veriables needed for painting the caps
|
||||
float cubeAngle = (float)((float)(effects->numberOfDesktops() - 2 )/(float)effects->numberOfDesktops() * 180.0f);
|
||||
float point = rect.width()/2*tan(cubeAngle*0.5f*M_PI/180.0f);
|
||||
|
@ -502,11 +445,6 @@ void CubeEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
|||
|
||||
glPopMatrix();
|
||||
glPushMatrix();
|
||||
if( effects->numScreens() > 1 && rect.x() != fullRect.x() && !bigCube )
|
||||
{
|
||||
// have to change the reflection area in horizontal layout and right screen
|
||||
glTranslatef( -rect.x(), 0.0, 0.0 );
|
||||
}
|
||||
glTranslatef( rect.x() + rect.width()*0.5f, 0.0, 0.0 );
|
||||
float vertices[] = {
|
||||
-rect.width()*0.5f, rect.height(), 0.0,
|
||||
|
@ -632,15 +570,6 @@ void CubeEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
|||
}
|
||||
glDisable( GL_CULL_FACE );
|
||||
|
||||
if( effects->numScreens() > 1 && !bigCube )
|
||||
{
|
||||
glPopMatrix();
|
||||
// revert change of projection matrix
|
||||
glMatrixMode( GL_PROJECTION );
|
||||
glPopMatrix();
|
||||
glMatrixMode( GL_MODELVIEW );
|
||||
}
|
||||
|
||||
glDisable( GL_BLEND );
|
||||
glPopAttrib();
|
||||
|
||||
|
@ -659,18 +588,6 @@ void CubeEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
|||
desktopNameFrame.setText( effects->desktopName( frontDesktop ) );
|
||||
desktopNameFrame.render( region, opacity );
|
||||
}
|
||||
if( effects->numScreens() > 1 && !bigCube )
|
||||
{
|
||||
foreach( EffectWindow* w, windowsOnOtherScreens )
|
||||
{
|
||||
WindowPaintData wData( w );
|
||||
if( start && !w->isDesktop() && !w->isDock() )
|
||||
wData.opacity *= (1.0 - timeLine.value());
|
||||
if( stop && !w->isDesktop() && !w->isDock() )
|
||||
wData.opacity *= timeLine.value();
|
||||
effects->paintWindow( w, 0, QRegion( w->x(), w->y(), w->width(), w->height() ), wData );
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -681,36 +598,8 @@ void CubeEffect::paintScreen( int mask, QRegion region, ScreenPaintData& data )
|
|||
void CubeEffect::rotateCube()
|
||||
{
|
||||
QRect rect = effects->clientArea( FullScreenArea, activeScreen, effects->currentDesktop());
|
||||
if( effects->numScreens() > 1 && bigCube )
|
||||
if( effects->numScreens() > 1 )
|
||||
rect = effects->clientArea( FullArea, activeScreen, effects->currentDesktop() );
|
||||
float xScale = 1.0;
|
||||
float yScale = 1.0;
|
||||
if( effects->numScreens() > 1 && !bigCube )
|
||||
{
|
||||
QRect fullRect = effects->clientArea( FullArea, activeScreen, effects->currentDesktop() );
|
||||
xScale = (float)rect.width()/(float)fullRect.width();
|
||||
yScale = (float)rect.height()/(float)fullRect.height();
|
||||
if( start )
|
||||
{
|
||||
xScale = xScale + (1.0 - xScale) * (1.0 - timeLine.value());
|
||||
yScale = yScale + (1.0 - yScale) * (1.0 - timeLine.value());
|
||||
if( rect.x() > 0 )
|
||||
glTranslatef( -rect.x()*(1.0 - timeLine.value()), 0.0, 0.0 );
|
||||
if( rect.y() > 0 )
|
||||
glTranslatef( 0.0, -rect.y()*(1.0 - timeLine.value()), 0.0 );
|
||||
}
|
||||
if( stop )
|
||||
{
|
||||
xScale = xScale + (1.0 - xScale) * timeLine.value();
|
||||
yScale = yScale + (1.0 - yScale) * timeLine.value();
|
||||
if( rect.x() > 0 )
|
||||
glTranslatef( -rect.x()*timeLine.value(), 0.0, 0.0 );
|
||||
if( rect.y() > 0 )
|
||||
glTranslatef( 0.0, -rect.y()*timeLine.value(), 0.0 );
|
||||
}
|
||||
glScalef( xScale, yScale, 1.0 );
|
||||
rect = fullRect;
|
||||
}
|
||||
|
||||
float internalCubeAngle = 360.0f / effects->numberOfDesktops();
|
||||
float zTranslate = zPosition + zoom;
|
||||
|
@ -840,7 +729,7 @@ void CubeEffect::rotateCube()
|
|||
void CubeEffect::paintCube( int mask, QRegion region, ScreenPaintData& data )
|
||||
{
|
||||
QRect rect = effects->clientArea( FullScreenArea, activeScreen, effects->currentDesktop());
|
||||
if( effects->numScreens() > 1 && bigCube )
|
||||
if( effects->numScreens() > 1 )
|
||||
rect = effects->clientArea( FullArea, activeScreen, effects->currentDesktop() );
|
||||
float internalCubeAngle = 360.0f / effects->numberOfDesktops();
|
||||
cube_painting = true;
|
||||
|
@ -910,7 +799,7 @@ void CubeEffect::paintCap()
|
|||
void CubeEffect::paintCubeCap()
|
||||
{
|
||||
QRect rect = effects->clientArea( FullScreenArea, activeScreen, effects->currentDesktop());
|
||||
if( effects->numScreens() > 1 && bigCube )
|
||||
if( effects->numScreens() > 1 )
|
||||
rect = effects->clientArea( FullArea, activeScreen, effects->currentDesktop() );
|
||||
float cubeAngle = (float)((float)(effects->numberOfDesktops() - 2 )/(float)effects->numberOfDesktops() * 180.0f);
|
||||
float z = rect.width()/2*tan(cubeAngle*0.5f*M_PI/180.0f);
|
||||
|
@ -1026,7 +915,7 @@ void CubeEffect::paintCubeCap()
|
|||
void CubeEffect::paintCylinderCap()
|
||||
{
|
||||
QRect rect = effects->clientArea( FullScreenArea, activeScreen, effects->currentDesktop());
|
||||
if( effects->numScreens() > 1 && bigCube )
|
||||
if( effects->numScreens() > 1 )
|
||||
rect = effects->clientArea( FullArea, activeScreen, effects->currentDesktop() );
|
||||
float cubeAngle = (float)((float)(effects->numberOfDesktops() - 2 )/(float)effects->numberOfDesktops() * 180.0f);
|
||||
|
||||
|
@ -1066,7 +955,7 @@ void CubeEffect::paintCylinderCap()
|
|||
void CubeEffect::paintSphereCap()
|
||||
{
|
||||
QRect rect = effects->clientArea( FullScreenArea, activeScreen, effects->currentDesktop());
|
||||
if( effects->numScreens() > 1 && bigCube )
|
||||
if( effects->numScreens() > 1 )
|
||||
rect = effects->clientArea( FullArea, activeScreen, effects->currentDesktop() );
|
||||
float cubeAngle = (float)((float)(effects->numberOfDesktops() - 2 )/(float)effects->numberOfDesktops() * 180.0f);
|
||||
float zTexture = rect.width()/2*tan(45.0f*M_PI/180.0f);
|
||||
|
@ -1177,7 +1066,6 @@ void CubeEffect::postPaintScreen()
|
|||
effects->ungrabKeyboard();
|
||||
keyboard_grab = false;
|
||||
effects->destroyInputWindow( input );
|
||||
windowsOnOtherScreens.clear();
|
||||
|
||||
effects->setActiveFullScreenEffect( 0 );
|
||||
|
||||
|
@ -1293,15 +1181,6 @@ void CubeEffect::prePaintWindow( EffectWindow* w, WindowPrePaintData& data, int
|
|||
else
|
||||
data.quads = data.quads.makeGrid( 250 );
|
||||
}
|
||||
if( ( w->isDesktop() || w->isDock() ) && w->screen() != activeScreen && w->isOnDesktop( effects->currentDesktop() ) )
|
||||
{
|
||||
windowsOnOtherScreens.append( w );
|
||||
}
|
||||
if( (start || stop) && w->screen() != activeScreen && w->isOnDesktop( effects->currentDesktop() )
|
||||
&& !w->isDesktop() && !w->isDock() )
|
||||
{
|
||||
windowsOnOtherScreens.append( w );
|
||||
}
|
||||
if( w->isOnDesktop( painting_desktop ))
|
||||
{
|
||||
QRect rect = effects->clientArea( FullArea, activeScreen, painting_desktop );
|
||||
|
@ -2025,7 +1904,7 @@ void CubeEffect::setActive( bool active )
|
|||
double eqn[4] = {0.0, 1.0, 0.0, 0.0};
|
||||
glPushMatrix();
|
||||
QRect rect = effects->clientArea( FullScreenArea, activeScreen, effects->currentDesktop());
|
||||
if( effects->numScreens() > 1 && bigCube )
|
||||
if( effects->numScreens() > 1 )
|
||||
rect = effects->clientArea( FullArea, activeScreen, effects->currentDesktop() );
|
||||
glTranslatef( 0.0, rect.height(), 0.0 );
|
||||
glClipPlane( GL_CLIP_PLANE0, eqn );
|
||||
|
@ -2065,7 +1944,7 @@ void CubeEffect::mouseChanged( const QPoint& pos, const QPoint& oldpos, Qt::Mous
|
|||
if( stop )
|
||||
return;
|
||||
QRect rect = effects->clientArea( FullScreenArea, activeScreen, effects->currentDesktop());
|
||||
if( effects->numScreens() > 1 && bigCube )
|
||||
if( effects->numScreens() > 1 )
|
||||
rect = effects->clientArea( FullArea, activeScreen, effects->currentDesktop() );
|
||||
if( buttons.testFlag( Qt::LeftButton ) )
|
||||
{
|
||||
|
|
|
@ -128,9 +128,7 @@ class CubeEffect
|
|||
bool stop;
|
||||
bool reflectionPainting;
|
||||
int rotationDuration;
|
||||
QList<EffectWindow*> windowsOnOtherScreens;
|
||||
int activeScreen;
|
||||
bool bigCube;
|
||||
bool bottomCap;
|
||||
bool closeOnMouseRelease;
|
||||
float zoom;
|
||||
|
|
|
@ -82,7 +82,6 @@ CubeEffectConfig::CubeEffectConfig(QWidget* parent, const QVariantList& args) :
|
|||
connect(m_ui->displayDesktopNameBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
|
||||
connect(m_ui->reflectionBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
|
||||
connect(m_ui->backgroundColorButton, SIGNAL(changed(QColor)), this, SLOT(changed()));
|
||||
connect(m_ui->bigCubeBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
|
||||
connect(m_ui->cubeCapsBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
|
||||
connect(m_ui->cubeCapsBox, SIGNAL(stateChanged(int)), this, SLOT(capsSelectionChanged()));
|
||||
connect(m_ui->capsImageBox, SIGNAL(stateChanged(int)), this, SLOT(changed()));
|
||||
|
@ -114,7 +113,6 @@ void CubeEffectConfig::load()
|
|||
QColor capColor = conf.readEntry( "CapColor", KColorScheme( QPalette::Active, KColorScheme::Window ).background().color() );
|
||||
bool texturedCaps = conf.readEntry( "TexturedCaps", true );
|
||||
bool caps = conf.readEntry( "Caps", true );
|
||||
bool bigCube = conf.readEntry( "BigCube", false );
|
||||
bool closeOnMouseRelease = conf.readEntry( "CloseOnMouseRelease", false );
|
||||
bool walkThroughDesktop = conf.readEntry( "TabBox", false );
|
||||
m_ui->zPositionSlider->setValue( conf.readEntry( "ZPosition", 100 ) );
|
||||
|
@ -160,14 +158,6 @@ void CubeEffectConfig::load()
|
|||
{
|
||||
m_ui->capsImageBox->setCheckState( Qt::Unchecked );
|
||||
}
|
||||
if( bigCube )
|
||||
{
|
||||
m_ui->bigCubeBox->setCheckState( Qt::Checked );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_ui->bigCubeBox->setCheckState( Qt::Unchecked );
|
||||
}
|
||||
if( closeOnMouseRelease )
|
||||
{
|
||||
m_ui->closeOnMouseReleaseBox->setCheckState( Qt::Checked );
|
||||
|
@ -207,7 +197,6 @@ void CubeEffectConfig::save()
|
|||
conf.writeEntry( "Caps", m_ui->cubeCapsBox->checkState() == Qt::Checked ? true : false );
|
||||
conf.writeEntry( "CapColor", m_ui->capColorButton->color() );
|
||||
conf.writeEntry( "TexturedCaps", m_ui->capsImageBox->checkState() == Qt::Checked ? true : false );
|
||||
conf.writeEntry( "BigCube", m_ui->bigCubeBox->checkState() == Qt::Checked ? true : false );
|
||||
conf.writeEntry( "CloseOnMouseRelease", m_ui->closeOnMouseReleaseBox->checkState() == Qt::Checked ? true : false );
|
||||
conf.writeEntry( "Wallpaper", m_ui->wallpaperRequester->url().path() );
|
||||
conf.writeEntry( "ZPosition", m_ui->zPositionSlider->value() );
|
||||
|
@ -237,7 +226,6 @@ void CubeEffectConfig::defaults()
|
|||
m_ui->cubeCapsBox->setCheckState( Qt::Checked );
|
||||
m_ui->capColorButton->setColor( KColorScheme( QPalette::Active, KColorScheme::Window ).background().color() );
|
||||
m_ui->capsImageBox->setCheckState( Qt::Checked );
|
||||
m_ui->bigCubeBox->setCheckState( Qt::Unchecked );
|
||||
m_ui->closeOnMouseReleaseBox->setCheckState( Qt::Unchecked );
|
||||
m_ui->wallpaperRequester->setPath( "" );
|
||||
m_ui->zPositionSlider->setValue( 100 );
|
||||
|
|
|
@ -407,17 +407,6 @@
|
|||
<string>Additional Options</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout" >
|
||||
<item>
|
||||
<widget class="QCheckBox" name="bigCubeBox" >
|
||||
<property name="toolTip" >
|
||||
<string>If enabled span the cube across all screens on a multiscreen setup, otherwise
|
||||
the cube will only be displayed on a single screen</string>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>Span cube on all screens in multi screen setup</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="closeOnMouseReleaseBox" >
|
||||
<property name="toolTip" >
|
||||
|
@ -534,7 +523,6 @@ otherwise it will remain active</string>
|
|||
<tabstop>cubeCapsBox</tabstop>
|
||||
<tabstop>capColorButton</tabstop>
|
||||
<tabstop>capsImageBox</tabstop>
|
||||
<tabstop>bigCubeBox</tabstop>
|
||||
<tabstop>closeOnMouseReleaseBox</tabstop>
|
||||
<tabstop>walkThroughDesktopBox</tabstop>
|
||||
<tabstop>invertKeysBox</tabstop>
|
||||
|
|
Loading…
Reference in New Issue