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

📄 preview.cpp

📁 四川麻将程序代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		QFile in(selectedFile);		if (in.open(IO_ReadOnly)){		    in.readLine(magic, MAXPATHLEN);		    if (magic[strlen(magic)-1]=='\n')			magic[strlen(magic)-1]='\0';		    if (strncmp(themeMagicV1_0, magic, strlen(magic)) != 0) {			in.close();			        		KMessageBox::sorry(this,                		i18n("Thats not a valid theme file."));			break;		    }		    in.readLine(tilesetRaw, MAXPATHLEN);		    in.readLine(backRaw, MAXPATHLEN);		    in.readLine(layoutRaw, MAXPATHLEN);		    parseFile(tilesetRaw, tile);		    parseFile(backRaw, back);		    parseFile(layoutRaw, layout);		    in.close();		    themeBack=back;		    themeLayout=layout;		    themeTileset=tile;		}   	    }              break;    }      renderBackground(back);    renderTiles(tile, layout);}void Preview::paintEvent( QPaintEvent*  ){	drawFrame->repaint(false);}void Preview::parseFile(const QString &in, QString &out) {	QString tmp;	QString prefix;	prefix=locate("appdata", "pics/default.tileset");	QFileInfo f(prefix);	prefix=f.dirPath();	// remove any trailing \n	tmp.replace(QRegExp("\n"), QString::null);	tmp.replace(QRegExp(":"), prefix + '/');	out = tmp;}// the user selected ok, or apply. This method passes the changes// across to the game widget and if necessary forces a board redraw// (unnecessary on layout changes since it only effects the next game)void Preview::applyChange(void) {    switch (previewType) {	case background:                 loadBackground(selectedFile, false);	     break;        case tileset:                 loadTileset(selectedFile);             break;        case board:		 loadBoard(selectedFile);             break;	case theme:		if (themeLayout != "" && themeBack != "" && themeTileset !="") {		    loadBackground(themeBack, false);		    loadTileset(themeTileset);		    loadBoard(themeLayout);		}	     break;    }    // don't redraw for a layout change    if (previewType == board  || previewType == theme) {	layoutChange();    } else {        boardRedraw(true);    }    // either way we mark the current value as unchanged    markUnchanged();     }// Render the background to the pixmap. void Preview::renderBackground(const QString &bg) {   QImage img;   QImage tmp;   QPixmap *p;   QPixmap *b;   p = drawFrame->getPreviewPixmap();   back.load(bg, p->width(), p->height());   b = back.getBackground();   bitBlt( p, 0,0,            b,0,0, b->width(), b->height(), CopyROP );    	 }             // This method draws a mini-tiled board with no tiles missing.void Preview::renderTiles(const QString &file, const QString &layout) {    tiles.loadTileset(file, true);    boardLayout.loadBoardLayout(layout);    QPixmap *dest = drawFrame->getPreviewPixmap();    int xOffset = tiles.width()/2;    int yOffset = tiles.height()/2;    short tile = 0;    // we iterate over the depth stacking order. Each sucessive level is    // drawn one indent up and to the right. The indent is the width    // of the 3d relief on the tile left (tile shadow width)    for (int z=0; z<BoardLayout::depth; z++) {        // we draw down the board so the tile below over rights our border        for (int y = 0; y < BoardLayout::height; y++) {            // drawing right to left to prevent border overwrite            for (int x=BoardLayout::width-1; x>=0; x--) {                int sx = x*(tiles.qWidth()  )+xOffset;                int sy = y*(tiles.qHeight()  )+yOffset;                if (boardLayout.getBoardData(z, y, x) != '1') {                    continue;                }                QPixmap *t = tiles.unselectedPixmaps(tile);                // Only one compilcation. Since we render top to bottom , left                // to right situations arise where...:                // there exists a tile one q height above and to the left                // in this situation we would draw our top left border over it                // we simply split the tile draw so the top half is drawn                // minus border                if ((x>1) && (y>0) && boardLayout.getBoardData(z,y-1,x-2)=='1'){                    bitBlt( dest, sx+2, sy,                        t, 2,0, t->width(), t->height()/2, CopyROP );                    bitBlt( dest, sx, sy+t->height()/2,			t, 0,t->height()/2,t->width(),t->height()/2,CopyROP);                } else {                bitBlt( dest, sx, sy,                    t, 0,0, t->width(), t->height(), CopyROP );                }                tile++;                if (tile == 35)                    tile++;                tile = tile % 43;            }        }        xOffset +=tiles.shadowSize();        yOffset -=tiles.shadowSize();    }}         // this really does not belong here. It will be fixed in v1.1 onwardsvoid Preview::saveTheme(void) {    QString back = preferences.background();    QString tile = preferences.tileset();    QString layout = preferences.layout();    QString with = ":";    // we want to replace any path in the default store    // with a +    QRegExp p(locate("data_dir", "/kmahjongg/pics/"));    back.replace(p,with);    tile.replace(p,with);    layout.replace(p,with);    // Get the name of the file to save    KURL url = KFileDialog::getSaveURL(        NULL,        "*.theme",        parentWidget(),        i18n("Save theme." ));    if ( url.isEmpty() )        return;      if( !url.isLocalFile() )   {      KMessageBox::sorry( this, i18n( "Only saving to local files currently supported." ) );      return;   }    // Are we over writing an existin file, or was a directory selected?    QFileInfo f( url.path() );    if( f.isDir() )        return;    if (f.exists()) {        // if it already exists, querie the user for replacement        int res=KMessageBox::warningYesNo(this,                        i18n("A file with that name "                                           "already exists, do you "                                           "wish to overwrite it?"));        if (res != KMessageBox::Yes)                return ;    }    FILE *outFile = fopen( QFile::encodeName(url.path()), "w" );    if (outFile == NULL) {        KMessageBox::sorry(this,                i18n("Could not write to file. Aborting."));        return;    }           fprintf(outFile,"%s\n%s\n%s\n%s\n",		themeMagicV1_0,		tile.utf8().data(),		back.utf8().data(),		layout.utf8().data());    fclose(outFile);}FrameImage::FrameImage (QWidget *parent, const char *name)  : QFrame(parent, name){	rx = -1;	thePixmap = new QPixmap();}void FrameImage::setGeometry(int x, int y, int w, int h) {    QFrame::setGeometry(x,y,w,h);    thePixmap->resize(size());}void FrameImage::paintEvent( QPaintEvent* pa ){    QFrame::paintEvent(pa);    QPainter p(this);    QPen line;    line.setStyle(DotLine);    line.setWidth(2);    line.setColor(yellow);    p.setPen(line);          p.setBackgroundMode(OpaqueMode);    p.setBackgroundColor(black);     int x = pa->rect().left();    int y = pa->rect().top();    int h = pa->rect().height();    int w  = pa->rect().width();    p.drawPixmap(x+frameWidth(),y+frameWidth(),*thePixmap,x+frameWidth(),y+frameWidth(),w-(2*frameWidth()),h-(2*frameWidth()));    if (rx >=0) {	p.drawRect(rx, ry, rw, rh);	p.drawRect(rx+rs, ry, rw-rs, rh-rs);	p.drawLine(rx, ry+rh, rx+rs, ry+rh-rs);	int midX = rx+rs+((rw-rs)/2);	int midY = ry+((rh-rs)/2);	switch (rt) {		case 0:  // delete mode cursor			p.drawLine(rx+rs, ry, rx+rw, ry+rh-rs);			p.drawLine(rx+rw, ry, rx+rs, ry+rh-rs);		break;		case 1: // insert cursor			p.drawLine(midX, ry, midX, ry+rh-rs);			p.drawLine(rx+rs, midY, rx+rw, midY);		break;		case 2: // move mode cursor			p.drawLine(midX, ry, rx+rw, midY);			p.drawLine(rx+rw, midY, midX, ry+rh-rs);			p.drawLine(midX, ry+rh-rs, rx+rs, midY);			p.drawLine(rx+rs, midY, midX, ry);		break;	}    }}           void FrameImage::setRect(int x,int y,int w,int h, int s, int t) {	rx = x;	ry = y;	rw = w;	rh = h;	rt = t;	rs = s;}// Pass on the mouse presed event to our ownervoid FrameImage::mousePressEvent(QMouseEvent *m) {	mousePressed(m);}void FrameImage::mouseMoveEvent(QMouseEvent *e) {	mouseMoved(e);}

⌨️ 快捷键说明

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