diff options
Diffstat (limited to 'kcontrol/joystick/poswidget.cpp')
| -rw-r--r-- | kcontrol/joystick/poswidget.cpp | 138 | 
1 files changed, 138 insertions, 0 deletions
| diff --git a/kcontrol/joystick/poswidget.cpp b/kcontrol/joystick/poswidget.cpp new file mode 100644 index 000000000..54e619d7a --- /dev/null +++ b/kcontrol/joystick/poswidget.cpp @@ -0,0 +1,138 @@ +/*************************************************************************** + *   Copyright (C) 2003 by Martin Koller                                   * + *   m.koller@surfeu.at                                                    * + *   This file is part of the KDE Control Center Module for Joysticks      * + *                                                                         * + *   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 "poswidget.h" + +#include <qpainter.h> + +#define XY_WIDTH 220 +#define MARK_WIDTH 10 + +//----------------------------------------------------------------- + +PosWidget::PosWidget(QWidget *parent, const char *name) +  : QWidget(parent, name, WRepaintNoErase), x(0), y(0), trace(false) +{ +  setMinimumSize(XY_WIDTH, XY_WIDTH); +  setMaximumSize(XY_WIDTH, XY_WIDTH); +  setPaletteBackgroundColor(Qt::white); +} + +//----------------------------------------------------------------- + +void PosWidget::paintEvent(QPaintEvent *) +{ +  QPainter paint(this); + +  paint.drawRect(0, 0, width(), height()); +  paint.setPen(Qt::gray); + +  // draw a center grid +  paint.drawLine(XY_WIDTH/2, 1, +                 XY_WIDTH/2, XY_WIDTH - 2); + +  paint.drawLine(1,            XY_WIDTH/2, +                 XY_WIDTH - 2, XY_WIDTH/2); + +  // draw the current position marker +  paint.setPen(Qt::blue); + +  paint.drawLine(x - MARK_WIDTH/2, y - MARK_WIDTH/2, +                 x + MARK_WIDTH/2, y + MARK_WIDTH/2); + +  paint.drawLine(x - MARK_WIDTH/2, y + MARK_WIDTH/2, +                 x + MARK_WIDTH/2, y - MARK_WIDTH/2); +} + +//----------------------------------------------------------------- + +void PosWidget::changeX(int newX) +{ +  // transform coordinates from joystick to widget coordinates +  newX = int((newX/65535.0)*XY_WIDTH + XY_WIDTH/2); + +  if ( x == newX ) return;  // avoid unnecessary redraw + +  eraseOld(); + +  x = newX; +} + +//----------------------------------------------------------------- + +void PosWidget::changeY(int newY) +{ +  // transform coordinates from joystick to widget coordinates +  newY = int((newY/65535.0)*XY_WIDTH + XY_WIDTH/2); + +  if ( y == newY ) return;  // avoid unnecessary redraw + +  eraseOld(); + +  y = newY; +} + +//----------------------------------------------------------------- + +void PosWidget::showTrace(bool t) +{ +  trace = t; + +  if ( !trace ) +  { +    erase(); +    update(); +  } +} + +//----------------------------------------------------------------- + +void PosWidget::eraseOld() +{ +  QPainter paint(this); + +  //paint.eraseRect(x - MARK_WIDTH/2, y - MARK_WIDTH/2, MARK_WIDTH + 1, MARK_WIDTH + 1); + +  // erase previous cross (don't use eraseRect() so that trace flags will be not destroyed so much) +  paint.setPen(Qt::white); + +  paint.drawLine(x - MARK_WIDTH/2, y - MARK_WIDTH/2, +                 x + MARK_WIDTH/2, y + MARK_WIDTH/2); + +  paint.drawLine(x - MARK_WIDTH/2, y + MARK_WIDTH/2, +                 x + MARK_WIDTH/2, y - MARK_WIDTH/2); + +  if ( trace )  // show previous position with a smaller black cross +  { +    paint.setPen(Qt::black); + +    paint.drawLine(x - 2, y - 2, +                   x + 2, y + 2); + +    paint.drawLine(x - 2, y + 2, +                   x + 2, y - 2); +  } + +  update(); +} + +//----------------------------------------------------------------- + +#include "poswidget.moc" | 
