⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skin.cpp

📁 linux下 minigui用的 qvfb 1.1插件
💻 CPP
字号:
#include <qbitmap.h>#include <qpixmap.h>#include <qtextstream.h>#include <qfile.h>#include <qpainter.h>#include "skin.h"#include "qvfb.h"#include "qvfbview.h"Skin::Skin( QVFb *p, const QString &skinFile, int &viewW, int &viewH ) : QWidget(p){    QFile f( skinFile );    f.open( IO_ReadOnly );    QTextStream ts( &f );    ts >> skinImageUpFileName;    ts >> skinImageDownFileName;    ts >> viewX1;    ts >> viewY1;    ts >> viewW;    ts >> viewH;    ts >> numberOfAreas;//  Debug the skin file parsing//  printf("read: -%s- -%i- -%i- -%i-\n", skinImage.latin1(), viewX1, viewY1, numberOfAreas );    areas = new ButtonAreas[numberOfAreas];    for (int i = 0; i < numberOfAreas; i++) {	ts >> areas[i].name;	ts >> areas[i].keyCode;	ts >> areas[i].x1;	ts >> areas[i].y1;	ts >> areas[i].x2;	ts >> areas[i].y2;//	Debug the skin file parsing//	printf("read: -%s- -%i- -%i- -%i- -%i- -%i-\n", areas[i].name.latin1(),//	    areas[i].keyCode, areas[i].x1, areas[i].y1, areas[i].x2, areas[i].y2 );    }    parent = p;    skinImageUp = new QPixmap( skinImageUpFileName );    skinImageDown = new QPixmap( skinImageDownFileName );//  setPixmap( ipaq );    setFixedSize( skinImageUp->size() );    QBitmap mask = skinImageUp->createHeuristicMask();    int wf = WType_TopLevel | WStyle_NoBorderEx;    parent->reparent( 0, wf, pos(), TRUE );    parent->setMask( mask );    parent->setFixedSize( skinImageUp->size() );    buttonPressed = FALSE;    buttonIndex = 0;}Skin::~Skin( ){}void Skin::setView( QVFbView *v ){    view = v;    view->move( viewX1, viewY1 );}void Skin::paintEvent( QPaintEvent * ){    QPainter p( this );//  printf("read: -%s-\n", skinImageUp.latin1());    if (skinImageUp)	p.drawPixmap( 0, 0, *skinImageUp );    if (buttonPressed == TRUE) {	ButtonAreas *ba = &areas[buttonIndex];	if (skinImageDown)	    p.drawPixmap( ba->x1, ba->y1, *skinImageDown, ba->x1, ba->y1, ba->x2 - ba->x1, ba->y2 - ba->y1 );    }}void Skin::mousePressEvent( QMouseEvent *e ){    if (e->button() == RightButton) {	parent->popupMenu();    } else {	buttonPressed = FALSE;	for (int i = 0; i < numberOfAreas; i++) {	    QPoint p1( areas[i].x1, areas[i].y1 );	    QPoint p2( areas[i].x2, areas[i].y2 );	    QRect r( p1, p2 );	    if ( r.contains( e->pos() ) ) {		buttonPressed = TRUE;		buttonIndex = i;		buttonCode = areas[buttonIndex].keyCode;		QKeyEvent keyEvent( QEvent::KeyPress, buttonCode, 0, 0 );		if (view)		    view->skinKeyPressEvent( &keyEvent );//		Debug message to be sure we are clicking the right areas//		printf("%s clicked\n", areas[i].name);		ButtonAreas *ba = &areas[buttonIndex];		repaint( ba->x1, ba->y1, ba->x2 - ba->x1, ba->y2 - ba->y1, FALSE );		continue;	    }	}	//	This is handy for finding the areas to define rectangles for new skins//	printf("Clicked in %i,%i\n",  e->pos().x(),  e->pos().y());	clickPos = e->pos();    }}void Skin::mouseMoveEvent( QMouseEvent *e ){    if ( buttonPressed == FALSE ) {	QPoint newpos =  e->globalPos() - clickPos;	parent->move( newpos );    }}void Skin::mouseReleaseEvent( QMouseEvent * ){    if ( buttonPressed ) {	QKeyEvent keyEvent( QEvent::KeyRelease, buttonCode, 0, 0 );	if (view)	    view->skinKeyReleaseEvent( &keyEvent );	buttonPressed = FALSE;	ButtonAreas *ba = &areas[buttonIndex];	repaint( ba->x1, ba->y1, ba->x2 - ba->x1, ba->y2 - ba->y1, FALSE );    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -