/******************************************************************** KWin - the KDE window manager This file is part of the KDE project. Copyright (C) 2009 Nikhil Marathe 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 of the License, 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. You should have received a copy of the GNU General Public License along with this program. If not, see . *********************************************************************/ #include "spiral.h" #include "client.h" #include "tile.h" namespace KWin { Spiral::Spiral( Workspace *w ) : TilingLayout( w ) { } Spiral::~Spiral() { } void Spiral::arrange( QRect wgeom ) { QList tiled( tiles() ); QMutableListIterator it(tiled); while( it.hasNext() ) { Tile *t = it.next(); if( t->ignoreGeometry() ) it.remove(); } int n = tiled.length(); int i = 1; foreach( Tile *t, tiled ) { if( t->floating() ) continue; if( i < n ) { if( i % 2 == 0 ) wgeom.setHeight( wgeom.height() / 2 ); else wgeom.setWidth( wgeom.width() / 2 ); } if( i % 4 == 0 ) wgeom.moveLeft( wgeom.x() - wgeom.width() ); else if( i % 2 == 0 || ( i % 4 == 3 && i < n ) ) wgeom.moveLeft( wgeom.x() + wgeom.width() ); if( i % 4 == 1 && i != 1 ) wgeom.moveTop( wgeom.y() - wgeom.height() ); else if( i % 2 == 1 && i != 1 || ( i % 4 == 0 && i < n ) ) wgeom.moveTop( wgeom.y() + wgeom.height() ); t->setGeometry( wgeom ); t->commit(); i++; } } }