summaryrefslogtreecommitdiffstats
path: root/src/MachBuntButton.cpp
diff options
context:
space:
mode:
authorMavridis Philippe <mavridisf@gmail.com>2022-10-15 19:06:14 +0300
committerMavridis Philippe <mavridisf@gmail.com>2022-10-15 19:06:14 +0300
commit47d22fa476f71a0e29649c2342fe11b04f079386 (patch)
tree7becd4dfe5cb5a67ca14e600b5afb4a5e4c8baf4 /src/MachBuntButton.cpp
downloadtwin-style-machbunt-47d22fa476f71a0e29649c2342fe11b04f079386.tar.gz
twin-style-machbunt-47d22fa476f71a0e29649c2342fe11b04f079386.zip
Initial commit (imported from Pling)
Signed-off-by: Mavridis Philippe <mavridisf@gmail.com>
Diffstat (limited to 'src/MachBuntButton.cpp')
-rw-r--r--src/MachBuntButton.cpp228
1 files changed, 228 insertions, 0 deletions
diff --git a/src/MachBuntButton.cpp b/src/MachBuntButton.cpp
new file mode 100644
index 0000000..82f1b14
--- /dev/null
+++ b/src/MachBuntButton.cpp
@@ -0,0 +1,228 @@
+/*
+ * $Id: MachBuntButton.cpp,v 1.34 2004/03/23 15:34:45 llunak Exp $
+ *
+ */
+
+#include "MachBunt.h"
+#include <kpixmapeffect.h>
+#include <kimageeffect.h>
+#include <kiconeffect.h>
+#include <kdrawutil.h>
+#include <klocale.h>
+
+#include <qlayout.h>
+#include <qdrawutil.h>
+#include <qtooltip.h>
+#include <qdatetime.h>
+#include <qbitmap.h>
+#include <qimage.h>
+#include <qcursor.h>
+
+namespace SuSEMachBunt {
+
+// the titlebar buttons
+extern bool pixmaps_created;
+
+QPixmap *defaultPixmap;
+QColor *btnForeground;
+
+MachBuntButton::MachBuntButton(MachBunt * c, const char *name,
+ int _button, QPixmap bgI, QPixmap bgA,
+ bool isMini,
+ const QString &tip)
+ : QButton (c->widget(), name), position( ButtonMiddle ), client( c )
+{
+ setTipText(tip);
+ setMouseTracking( true );
+ setCursor( arrowCursor );
+
+ // Eliminate background flicker
+ setBackgroundMode( QWidget::NoBackground );
+
+ menuBtn = _button == BtnMenu;
+ miniBtn = isMini;
+ button = _button;
+ state = 0;
+ pressed = 0;
+ bg[0] = bgI;
+ bg[1] = bgA;
+
+ // Use larger button for the menu, or mini-buttons for toolwindows.
+ if ( isMini ) {
+ setFixedSize(12, 12);
+ resize(12, 12);
+ } else{
+ setFixedSize(PIX_HEIGHT, PIX_HEIGHT);
+ resize(PIX_HEIGHT, PIX_HEIGHT);
+ }
+}
+
+MachBuntButton::~MachBuntButton()
+{
+};
+
+QSize MachBuntButton::sizeHint() const
+{
+ if ( miniBtn )
+ return(QSize(12, 12));
+ else
+ return(QSize(PIX_HEIGHT, PIX_HEIGHT));
+}
+
+
+void MachBuntButton::reset(unsigned long changes)
+{
+ repaint(false);
+ if (!menuBtn){
+ emit ( shapeMe(0) );
+ state=0;
+ pressed = 0;
+ }
+}
+
+
+void MachBuntButton::setBitmap(const unsigned char *bitmap)
+{
+ repaint( false );
+}
+
+
+void MachBuntButton::setPixmap( const QPixmap &_p )
+{
+ QPixmap p;
+
+ if ( _p.isNull() )
+ p = *defaultPixmap;
+ else
+ p = _p;
+
+ if ( miniBtn ){
+ menuPixmap.convertFromImage( p.convertToImage().smoothScale(8,8) );
+ }else
+ menuPixmap = p;
+
+
+ for ( int m=0; m<2; m++ )
+ for ( int M=0; M<3; M++ )
+ for ( int a=0; a<2; a++ )
+ if (menuBtn)
+ menuButtonPixmap[button][m][M][a].resize(0,0);
+ else
+ buttonPixmap[button][m][M][a].resize(0,0);
+
+ repaint( false );
+}
+
+void MachBuntButton::enterEvent( QEvent *e )
+{
+ if (pressed){
+ state = 2;
+ emit ( shapeMe(this->x()) );
+ }else
+ state = 1;
+ repaint();
+ QButton::enterEvent(e);
+}
+
+void MachBuntButton::leaveEvent( QEvent *e )
+{
+ if (pressed)
+ emit ( shapeMe(0) );
+ state = 0;
+ repaint();
+ QButton::leaveEvent(e);
+}
+
+void MachBuntButton::setPosition( ButtonPos pos )
+{
+ position = pos;
+}
+
+bool MachBuntButton::resizePosition( QPoint pos )
+{
+ if( pos.y() < BUTTON_RESIZE_SIZE )
+ return true;
+ if( position == ButtonLeft && pos.x() < BUTTON_RESIZE_SIZE )
+ return true;
+ if( position == ButtonRight && pos.x() > width() - 1 - BUTTON_RESIZE_SIZE )
+ return true;
+ return false;
+}
+
+void MachBuntButton::mouseMoveEvent( QMouseEvent* e )
+{
+ if( resizePosition( e->pos()))
+ {
+ e->ignore();
+ unsetCursor(); // use cursor set according to mousePosition()
+ return;
+ }
+ if ( pressed == 1 )
+ emit( mousePressedMove(e) );
+ e->ignore(); // so that dragging works, even when moving more inside the button
+ setCursor( arrowCursor );
+}
+
+void MachBuntButton::mousePressEvent( QMouseEvent* e )
+{
+ if( resizePosition( e->pos()))
+ {
+ e->ignore();
+ return;
+ }
+ if (!menuBtn){
+ state = 2;
+ pressed = 1;
+ emit ( shapeMe(this->x()) );
+ }
+
+ last_button = e->button();
+ QMouseEvent me ( e->type(), e->pos(), e->globalPos(),
+ LeftButton, e->state() );
+ QButton::mousePressEvent( &me );
+}
+
+void MachBuntButton::mouseReleaseEvent( QMouseEvent* e )
+{
+ if (!menuBtn){
+ emit ( shapeMe(0) );
+ if (state==2)
+ state=1;
+ pressed = 0;
+ }
+ if( resizePosition( e->pos()))
+ {
+ e->ignore();
+ return;
+ }
+ last_button = e->button();
+ QMouseEvent me ( e->type(), e->pos(), e->globalPos(),
+ LeftButton, e->state() );
+ QButton::mouseReleaseEvent( &me );
+}
+
+void MachBuntButton::drawButton(QPainter *p)
+{
+ bool a = client->isActive();
+ QPixmap *P;
+ if (menuBtn)
+ P = &menuButtonPixmap[button][a][state][miniBtn];
+ else
+ P = &buttonPixmap[button][a][state][miniBtn];
+
+ if ( P->isNull() )
+ *P = create_buttonPixmap( miniBtn ? 12 : PIX_HEIGHT, miniBtn ? 12 : PIX_HEIGHT, menuPixmap, bg[a], a, state );
+
+ p->drawPixmap( 0, 0, *P );
+}
+
+void MachBuntButton::setTipText(const QString &tip) {
+ if(KDecoration::options()->showTooltips()) {
+ QToolTip::remove(this );
+ QToolTip::add(this, tip );
+ }
+}
+
+}
+
+// vim: ts=4