[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-devel
Subject: widget for pixel graphic apps (pixie, kis,...) for free ;-) (was: suggestion for pixel-based graphic
From: aleXXX <alexander.neundorf () rz ! tu-ilmenau ! de>
Date: 2000-03-07 9:17:50
[Download RAW message or body]
Hi,
some time ago I made the suggestion for a small display which shows the area
around the mouse pointer heavily zoomed.
Yesterday in the evening I hacked it together, you can do with it whatever you
want, no restriction in any way.
It is still qt 1.44, but the changes should be minimal.
Bye
Alex
--
If they say it's necessary to be disciplined and trained
To transform their new ideas into history and pain
Simply say no
Just let them feel you disagree
["mag.cpp" (text/x-c++)]
#include "mag.h"
#include <qevent.h>
#include <qpainter.h>
#include <qpixmap.h>
#include <qapplication.h>
WidgetMagnifier::WidgetMagnifier(int zoomLevel, int pixels, QWidget *magnifiedWidget, \
QWidget *parent, const char *name) :QWidget(parent,name)
,magnifiedOne(magnifiedWidget)
,centerX(0)
,centerY(0)
,globalCenterX(0)
,globalCenterY(0)
,copyX(-1)
,copyY(-1)
,offsetX(0)
,offsetY(0)
,zoom(zoomLevel)
,noPix(pixels)
,mouseInside(FALSE)
{
magnifiedOne->installEventFilter(this);
magnifiedOne->setMouseTracking(TRUE);
resize(zoom*noPix,zoom*noPix);
setFixedSize(size());
};
void WidgetMagnifier::paintEvent(QPaintEvent *e)
{
QPainter paint( this );
paint.setRasterOp(CopyROP);
if (mouseInside)
{
// paint.fillRect(0,0,width(),height(),QColor(white));
if (!pm.isNull())
{
paint.drawPixmap(0,0, pm,offsetX,offsetY,copyX,copyY);
};
paint.setPen(QColor(white));
paint.setRasterOp(XorROP);
for (int i=0; i<noPix; i++)
{
paint.drawLine(i*zoom,0,i*zoom,noPix*zoom-1);
paint.drawLine(0,i*zoom,noPix*zoom-1,i*zoom);
};
paint.drawLine(0,noPix*zoom-1,noPix*zoom-1,noPix*zoom-1);
paint.drawLine(noPix*zoom-1,0,noPix*zoom-1,noPix*zoom-1);
paint.setPen(QPen(QColor(white),3));
paint.drawLine((noPix/2-1)*zoom,noPix/2*zoom+zoom/2,noPix/2*zoom,noPix/2*zoom+zoom/2);
paint.drawLine((noPix/2+1)*zoom,noPix/2*zoom+zoom/2,(noPix/2+2)*zoom,noPix/2*zoom+zoom/2);
paint.drawLine(noPix/2*zoom+zoom/2,(noPix/2-1)*zoom,noPix/2*zoom+zoom/2,noPix/2*zoom);
paint.drawLine(noPix/2*zoom+zoom/2,(noPix/2+1)*zoom,noPix/2*zoom+zoom/2,(noPix/2+2)*zoom);
}
else
{
paint.fillRect(0,0,width(),height(),QColor(lightGray));
paint.setPen(QColor(black));
paint.drawLine(0,0,width(),height());
paint.drawLine(0,height(),width(),0);
paint.drawRect(0,0,width(),height());
};
};
bool WidgetMagnifier::eventFilter(QObject *o, QEvent *e)
{
if ((o==magnifiedOne) && ((e->type()==Event_MouseMove) || \
(e->type()==Event_Enter))) {
mouseInside=TRUE;
QMouseEvent *m=(QMouseEvent *) e;
centerX=m->x();
centerY=m->y();
globalCenterX=m->globalX();
globalCenterY=m->globalY();
pm = QPixmap::grabWindow( \
QApplication::desktop()->winId(),globalCenterX-noPix/2,globalCenterY-noPix/2,noPix,noPix);
QWMatrix wm; // after getting it, scale it
wm.scale(zoom,zoom);
pm = pm.xForm( wm );
repaint(FALSE);
}
else if ((o==magnifiedOne) && (e->type()==Event_Leave))
{
mouseInside=FALSE;
repaint(FALSE);
};
return FALSE;
};
#include "mag.moc.cpp"
["mag.h" (text/x-c++)]
#ifndef MAG_H
#define MAG_H
#include <qwidget.h>
#include <qpixmap.h>
class QEvent;
class QPaintEvent;
class WidgetMagnifier:public QWidget
{
Q_OBJECT
public:
//pixels should really be an odd number, so that there is a center pixel
WidgetMagnifier(int zoomLevel, int pixels, QWidget *magnifiedWidget, QWidget \
*parent=0, const char *name=0); virtual ~WidgetMagnifier() {};
int zoomLevel() {return zoom;};
int pixels() {return noPix;};
protected:
QWidget *magnifiedOne;
virtual void paintEvent(QPaintEvent *e);
virtual bool eventFilter(QObject *o, QEvent *e);
int centerX,centerY,globalCenterX,globalCenterY,copyX,copyY,offsetX,offsetY, \
zoom, noPix; QPixmap pm; // pixmap, magnified
bool mouseInside;
};
#endif
["main.cpp" (text/x-c)]
#include<qapplication.h>
#include <qwidget.h>
#include <qpushbutton.h>
#include "mag.h"
int main(int argc, char **argv)
{
QApplication a(argc,argv);
QWidget w(0);
QPushButton pb("hallo welt",&w);
WidgetMagnifier wm(10,9,&pb,&w);
pb.setGeometry(20,20,100,30);
wm.move(20,100);
w.resize(150,200);
w.show();
a.setMainWidget(&w);
return a.exec();
return 0;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic