summaryrefslogtreecommitdiffstats
path: root/kwin/clients/test
diff options
context:
space:
mode:
Diffstat (limited to 'kwin/clients/test')
-rw-r--r--kwin/clients/test/Makefile.am15
-rw-r--r--kwin/clients/test/test.cpp343
-rw-r--r--kwin/clients/test/test.desktop67
-rw-r--r--kwin/clients/test/test.h49
4 files changed, 474 insertions, 0 deletions
diff --git a/kwin/clients/test/Makefile.am b/kwin/clients/test/Makefile.am
new file mode 100644
index 000000000..a5a3fcf67
--- /dev/null
+++ b/kwin/clients/test/Makefile.am
@@ -0,0 +1,15 @@
+INCLUDES = -I$(srcdir)/../../lib $(all_includes)
+
+kde_module_LTLIBRARIES = kwin3_test.la
+
+kwin3_test_la_SOURCES = test.cpp
+kwin3_test_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) -module
+kwin3_test_la_LIBADD = $(LIB_KDEUI) ../../lib/libkdecorations.la
+#kwin_keramik_la_LDFLAGS = $(all_libraries) -avoid-version -module $(KDE_RPATH) $(KDE_MT_LDFLAGS)
+
+METASOURCES = AUTO
+
+kwin_test_lnkdir = $(kde_datadir)/kwin
+kwin_test_lnk_DATA = test.desktop
+
+EXTRA_DIST = $(kwin_test_lnk_DATA)
diff --git a/kwin/clients/test/test.cpp b/kwin/clients/test/test.cpp
new file mode 100644
index 000000000..abac77e64
--- /dev/null
+++ b/kwin/clients/test/test.cpp
@@ -0,0 +1,343 @@
+#include "test.h"
+
+#include <qtooltip.h>
+#include <kglobal.h>
+#include <kdebug.h>
+
+namespace KWinTest
+{
+
+Decoration::Decoration( KDecorationBridge* bridge, KDecorationFactory* factory )
+ : KDecoration( bridge, factory ),
+ button( NULL )
+ {
+ }
+
+void Decoration::init()
+ {
+ createMainWidget();
+ widget()->setEraseColor( red );
+ widget()->installEventFilter( this );
+ if( isCloseable())
+ {
+ button = new QPushButton( widget());
+ button->show();
+ button->setCursor( arrowCursor );
+ button->move( 0, 0 );
+ connect( button, SIGNAL( clicked()), SLOT( closeWindow()));
+ QToolTip::add( button, "Zelva Mana" );
+ }
+ }
+
+Decoration::MousePosition Decoration::mousePosition( const QPoint& p ) const
+ {
+ const int range = 16;
+ const int border = 4;
+
+ MousePosition m = Nowhere;
+
+ int width = widget()->width();
+ int height = widget()->height();
+ if ( ( p.x() > border && p.x() < width - border )
+ && ( p.y() > border && p.y() < height - border ) )
+ return Center;
+
+ if ( p.y() <= range && p.x() <= range)
+ m = TopLeft2;
+ else if ( p.y() >= height-range && p.x() >= width-range)
+ m = BottomRight2;
+ else if ( p.y() >= height-range && p.x() <= range)
+ m = BottomLeft2;
+ else if ( p.y() <= range && p.x() >= width-range)
+ m = TopRight2;
+ else if ( p.y() <= border )
+ m = Top;
+ else if ( p.y() >= height-border )
+ m = Bottom;
+ else if ( p.x() <= border )
+ m = Left;
+ else if ( p.x() >= width-border )
+ m = Right;
+ else
+ m = Center;
+ return m;
+ }
+
+void Decoration::borders( int& left, int& right, int& top, int& bottom ) const
+ {
+ if( options()->preferredBorderSize( factory()) == BorderTiny )
+ {
+ left = right = bottom = 1;
+ top = 5;
+ }
+ else
+ {
+ left = right = options()->preferredBorderSize( factory()) * 5;
+ top = options()->preferredBorderSize( factory()) * 10;
+ bottom = options()->preferredBorderSize( factory()) * 2;
+ }
+ if( isShade())
+ bottom = 0;
+ if( ( maximizeMode() & MaximizeHorizontal ) && !options()->moveResizeMaximizedWindows())
+ left = right = 0;
+ if( ( maximizeMode() & MaximizeVertical ) && !options()->moveResizeMaximizedWindows())
+ bottom = 0;
+ }
+
+void Decoration::reset( unsigned long )
+ {
+ }
+
+void Decoration::resize( const QSize& s )
+ {
+ widget()->resize( s );
+ }
+
+QSize Decoration::minimumSize() const
+ {
+ return QSize( 100, 50 );
+ }
+
+bool Decoration::eventFilter( QObject* o, QEvent* e )
+ {
+ if( o == widget())
+ {
+ switch( e->type())
+ {
+ case QEvent::MouseButtonPress:
+ { // FRAME
+ processMousePressEvent( static_cast< QMouseEvent* >( e ));
+ return true;
+ }
+ case QEvent::Show:
+ break;
+ case QEvent::Hide:
+ break;
+ default:
+ break;
+ }
+ }
+ return false;
+ }
+
+}
+#include <qapplication.h>
+#include <qpainter.h>
+#include <X11/Xlib.h>
+#include <math.h>
+#include <unistd.h>
+namespace KWinTest
+{
+
+// taken from riscos
+bool Decoration::animateMinimize(bool iconify)
+{
+ int style = 1;
+ switch (style) {
+
+ case 1:
+ {
+ // Double twisting double back, with pike ;)
+
+ if (!iconify) // No animation for restore.
+ return true;
+
+ // Go away quick.
+ helperShowHide( false );
+ qApp->syncX();
+
+ QRect r = iconGeometry();
+
+ if (!r.isValid())
+ return true;
+
+ // Algorithm taken from Window Maker (http://www.windowmaker.org)
+
+ int sx = geometry().x();
+ int sy = geometry().y();
+ int sw = width();
+ int sh = height();
+ int dx = r.x();
+ int dy = r.y();
+ int dw = r.width();
+ int dh = r.height();
+
+ double steps = 12;
+
+ double xstep = double((dx-sx)/steps);
+ double ystep = double((dy-sy)/steps);
+ double wstep = double((dw-sw)/steps);
+ double hstep = double((dh-sh)/steps);
+
+ double cx = sx;
+ double cy = sy;
+ double cw = sw;
+ double ch = sh;
+
+ double finalAngle = 3.14159265358979323846;
+
+ double delta = finalAngle / steps;
+
+ QPainter p( workspaceWidget());
+ p.setRasterOp(Qt::NotROP);
+
+ for (double angle = 0; ; angle += delta) {
+
+ if (angle > finalAngle)
+ angle = finalAngle;
+
+ double dx = (cw / 10) - ((cw / 5) * sin(angle));
+ double dch = (ch / 2) * cos(angle);
+ double midy = cy + (ch / 2);
+
+ QPoint p1(int(cx + dx), int(midy - dch));
+ QPoint p2(int(cx + cw - dx), p1.y());
+ QPoint p3(int(cx + dw + dx), int(midy + dch));
+ QPoint p4(int(cx - dx), p3.y());
+
+ grabXServer();
+
+ p.drawLine(p1, p2);
+ p.drawLine(p2, p3);
+ p.drawLine(p3, p4);
+ p.drawLine(p4, p1);
+
+ p.flush();
+
+ usleep(500);
+
+ p.drawLine(p1, p2);
+ p.drawLine(p2, p3);
+ p.drawLine(p3, p4);
+ p.drawLine(p4, p1);
+
+ ungrabXServer();
+
+// FRAME qApp->processEvents(); // FRAME ???
+
+ cx += xstep;
+ cy += ystep;
+ cw += wstep;
+ ch += hstep;
+
+ if (angle >= finalAngle)
+ break;
+ }
+ }
+ break;
+
+ case 2:
+ {
+ // KVirc style ? Maybe. For qwertz.
+
+ if (!iconify) // No animation for restore.
+ return true;
+
+ // Go away quick.
+ helperShowHide( false );
+
+ qApp->syncX();
+
+ int stepCount = 12;
+
+ QRect r(geometry());
+
+ int dx = r.width() / (stepCount * 2);
+ int dy = r.height() / (stepCount * 2);
+
+ QPainter p( workspaceWidget());
+ p.setRasterOp(Qt::NotROP);
+
+ for (int step = 0; step < stepCount; step++) {
+
+ r.moveBy(dx, dy);
+ r.setWidth(r.width() - 2 * dx);
+ r.setHeight(r.height() - 2 * dy);
+
+ grabXServer();
+
+ p.drawRect(r);
+ p.flush();
+ usleep(200);
+ p.drawRect(r);
+
+ ungrabXServer();
+
+// FRAME qApp->processEvents();
+ }
+ }
+ break;
+
+
+ default:
+ {
+ QRect icongeom = iconGeometry();
+
+ if (!icongeom.isValid())
+ return true;
+
+ QRect wingeom = geometry();
+
+ QPainter p( workspaceWidget());
+
+ p.setRasterOp(Qt::NotROP);
+
+#if 0
+ if (iconify)
+ p.setClipRegion(
+ QRegion( workspaceWidget()->rect()) - wingeom
+ );
+#endif
+
+ grabXServer();
+
+ p.drawLine(wingeom.bottomRight(), icongeom.bottomRight());
+ p.drawLine(wingeom.bottomLeft(), icongeom.bottomLeft());
+ p.drawLine(wingeom.topLeft(), icongeom.topLeft());
+ p.drawLine(wingeom.topRight(), icongeom.topRight());
+
+ p.flush();
+
+ qApp->syncX();
+
+ usleep(30000);
+
+ p.drawLine(wingeom.bottomRight(), icongeom.bottomRight());
+ p.drawLine(wingeom.bottomLeft(), icongeom.bottomLeft());
+ p.drawLine(wingeom.topLeft(), icongeom.topLeft());
+ p.drawLine(wingeom.topRight(), icongeom.topRight());
+
+ ungrabXServer();
+ }
+ break;
+ }
+ return true;
+}
+
+KDecoration* Factory::createDecoration( KDecorationBridge* bridge )
+ {
+ NET::WindowType type = windowType( SUPPORTED_WINDOW_TYPES_MASK, bridge );
+ if( type == NET::Dialog )
+ ;
+ return new Decoration( bridge, this );
+ }
+
+bool Factory::reset( unsigned long changed )
+ {
+ resetDecorations( changed );
+ return false;
+ }
+
+} // namespace
+
+extern "C"
+{
+
+KDE_EXPORT KDecorationFactory *create_factory()
+ {
+ return new KWinTest::Factory();
+ }
+
+}
+
+#include "test.moc"
diff --git a/kwin/clients/test/test.desktop b/kwin/clients/test/test.desktop
new file mode 100644
index 000000000..ed340f573
--- /dev/null
+++ b/kwin/clients/test/test.desktop
@@ -0,0 +1,67 @@
+[Desktop Entry]
+Name=KWin test
+Name[af]=KWin toets
+Name[ar]=اختبار KWin
+Name[az]=KWin sınağı
+Name[be]=Тэст KWin
+Name[bn]=Kwin পরীক্ষা
+Name[ca]=Test de KWin
+Name[csb]=Test KWin
+Name[cy]=arbrawf KWin
+Name[da]=KWin-test
+Name[de]=KWin-Test
+Name[el]=KWin τεστ
+Name[eo]=Testo de KDE-fenestroadministrilo
+Name[es]=Prueba de KWin
+Name[eu]=KWin froga
+Name[fa]=آزمون KWin
+Name[fi]=KWin-testi
+Name[fr]=Test de KWin
+Name[ga]=Tástáil KWim
+Name[gl]=Proba de KWin
+Name[he]=ניסיון KWin
+Name[hi]=के-विन जांच
+Name[hr]=KWina proba
+Name[hu]=KWin-teszt
+Name[is]=KWin prófun
+Name[it]=Prova KWin
+Name[ja]=KWin テスト
+Name[ka]=KWin შემოწმება
+Name[kk]=KWin сынауы
+Name[km]=សាកល្បង KWin
+Name[ko]=KWin 테스트
+Name[lt]=KWin patikrinimas
+Name[lv]=KWin tests
+Name[mk]=Тест за KWin
+Name[mn]=KWin шалгалт
+Name[ms]=Ujian KWin
+Name[nds]=KWin-Test
+Name[ne]=के विन परीक्षण
+Name[nn]=KWin-test
+Name[pa]=KWin ਜਾਂਚ
+Name[pl]=Test KWin
+Name[pt]=Teste do KWin
+Name[pt_BR]=Teste do KWin
+Name[ro]=Test KWin
+Name[ru]=Проверка KWin
+Name[rw]= Isuzuma rya KWin
+Name[se]=KWin-geahččaleapmi
+Name[sk]=Test KWin
+Name[sl]=Preizkus KWin
+Name[sr]=Проба KWin-а
+Name[sr@Latn]=Proba KWin-a
+Name[sv]=Kwin-test
+Name[ta]=KWin சோதனை
+Name[te]=కెవిన్ పరిక్ష
+Name[tg]=Тафтиши KWin
+Name[th]=ทดสอบ KWin
+Name[tr]=KWin Testi
+Name[tt]=KWin sınaw
+Name[uk]=Тест KWin
+Name[uz]=KWin sinash
+Name[uz@cyrillic]=KWin синаш
+Name[vi]=Thử KWin
+Name[wa]=Saye KPurnea
+Name[zh_CN]=KWin 测试
+Name[zh_TW]=KWin 測試
+X-KDE-Library=kwin3_test
diff --git a/kwin/clients/test/test.h b/kwin/clients/test/test.h
new file mode 100644
index 000000000..56e21dbc0
--- /dev/null
+++ b/kwin/clients/test/test.h
@@ -0,0 +1,49 @@
+#ifndef KWIN_TEST
+#define KWIN_TEST
+
+#include <kdecoration.h>
+#include <kdecorationfactory.h>
+#include <qpushbutton.h>
+
+namespace KWinTest
+{
+
+const int SUPPORTED_WINDOW_TYPES_MASK = NET::NormalMask | NET::DesktopMask | NET::DockMask
+ | NET::ToolbarMask | NET::MenuMask | NET::DialogMask /*| NET::OverrideMask*/ | NET::TopMenuMask
+ | NET::UtilityMask | NET::SplashMask;
+
+class Decoration
+ : public KDecoration
+ {
+ Q_OBJECT
+ public:
+ Decoration( KDecorationBridge* bridge, KDecorationFactory* factory );
+ virtual void init();
+ virtual MousePosition mousePosition( const QPoint& p ) const;
+ virtual void borders( int& left, int& right, int& top, int& bottom ) const;
+ virtual void resize( const QSize& s );
+ virtual QSize minimumSize() const;
+ virtual void activeChange() {};
+ virtual void captionChange() {};
+ virtual void maximizeChange() {};
+ virtual void desktopChange() {};
+ virtual void shadeChange() {};
+ virtual void iconChange() {};
+ virtual bool eventFilter( QObject* o, QEvent* e );
+ virtual void reset( unsigned long changed );
+ virtual bool animateMinimize( bool minimize );
+ private:
+ QPushButton* button;
+ };
+
+class Factory
+ : public KDecorationFactory
+ {
+ public:
+ virtual KDecoration* createDecoration( KDecorationBridge* );
+ virtual bool reset( unsigned long changed );
+ };
+
+} // namespace
+
+#endif