summaryrefslogtreecommitdiffstats
path: root/kghostview/kgvpagedecorator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kghostview/kgvpagedecorator.cpp')
-rw-r--r--kghostview/kgvpagedecorator.cpp106
1 files changed, 106 insertions, 0 deletions
diff --git a/kghostview/kgvpagedecorator.cpp b/kghostview/kgvpagedecorator.cpp
new file mode 100644
index 00000000..e1eccfc7
--- /dev/null
+++ b/kghostview/kgvpagedecorator.cpp
@@ -0,0 +1,106 @@
+/**
+ * Copyright (C) 2001-2002 the KGhostView authors. See file AUTHORS.
+ *
+ * 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, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <qbitmap.h>
+#include <qdrawutil.h>
+#include <qpainter.h>
+#include <qregion.h>
+
+#include "kgvpagedecorator.h"
+
+KGVPageDecorator::KGVPageDecorator( QWidget* parent, const char* name ) :
+ QHBox( parent, name ),
+ _margin( 5 ),
+ _borderWidth( 1 ),
+ _shadowOffset( 2, 2 )
+{
+ setFrameStyle( Box | Plain );
+ setLineWidth( _margin + _borderWidth );
+ setBackgroundMode( NoBackground );
+ setAutoMask( true );
+}
+
+bool KGVPageDecorator::eventFilter( QObject* o, QEvent* e )
+{
+ switch( e->type() ) {
+ case QEvent::MouseButtonPress:
+ case QEvent::MouseButtonRelease:
+ case QEvent::MouseButtonDblClick:
+ case QEvent::MouseMove:
+ return event( e );
+ default:
+ ;
+ }
+ return QHBox::eventFilter( o, e );
+}
+
+void KGVPageDecorator::childEvent( QChildEvent* e )
+{
+ if( e->child()->isWidgetType() && e->inserted() )
+ e->child()->installEventFilter( this );
+}
+
+void KGVPageDecorator::drawFrame( QPainter* p )
+{
+ QRect r( frameRect().topLeft() + QPoint(_margin,_margin),
+ frameRect().bottomRight() - QPoint(_margin,_margin) );
+
+ if( !r.isValid() )
+ return;
+
+ const QColorGroup& cg = colorGroup();
+
+ r.moveCenter( r.center() + _shadowOffset );
+ qDrawPlainRect( p, r, cg.shadow(), _shadowOffset.manhattanLength() );
+
+ r.moveCenter( r.center() - _shadowOffset );
+ qDrawPlainRect( p, r, cg.foreground(), _borderWidth );
+}
+
+void KGVPageDecorator::drawMask( QPainter* p )
+{
+ QRect r( frameRect().topLeft() + QPoint(_margin,_margin),
+ frameRect().bottomRight() - QPoint(_margin,_margin) );
+
+ if( !r.isValid() )
+ return;
+
+ QColorGroup cg( color1, color1, color1, color1, color1, color1, color1,
+ color1, color0 );
+ QBrush brush( cg.foreground() );
+
+ r.moveCenter( r.center() + _shadowOffset );
+ qDrawPlainRect( p, r, cg.foreground(), _shadowOffset.manhattanLength() );
+
+ r.moveCenter( r.center() - _shadowOffset );
+ qDrawPlainRect( p, r, cg.foreground(), _borderWidth, &brush );
+}
+
+void KGVPageDecorator::updateMask()
+{
+ QBitmap bm( size() );
+ bm.fill( color0 );
+ QPainter p( &bm, this );
+ p.setPen( color1 );
+ p.setBrush( color1 );
+ drawMask( &p );
+ p.end();
+ setMask( bm );
+}
+
+// vim:sw=4:sts=4:ts=8:noet