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

📄 display.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2005 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.** ** 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.** ** A copy of the GNU GPL license version 2 is included in this package as ** LICENSE.GPL.**** 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.**** In addition, as a special exception Trolltech gives permission to link** the code of this program with Qtopia applications copyrighted, developed** and distributed by Trolltech under the terms of the Qtopia Personal Use** License Agreement. You must comply with the GNU General Public License** in all respects for all of the code used other than the applications** licensed under the Qtopia Personal Use License Agreement. If you modify** this file, you may extend this exception to your version of the file,** but you are not obligated to do so. If you do not wish to do so, delete** this exception statement from your version.** ** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include <qtopia/global.h>#include <qtopia/calc/display.h>#include <qtopia/calc/engine.h>#include <qpixmap.h>#include <qwhatsthis.h>// Lcd display classMyLcdDisplay::MyLcdDisplay(QWidget *p,const char *n,WFlags f)    :QScrollView(p,n,f) {    QWhatsThis::add( this, tr("Displays the current input or result") );    lcdPixmap = 0;    lcdPainter = 0;    setHScrollBarMode(QScrollView::AlwaysOff);    setVScrollBarMode(QScrollView::AlwaysOff);    setFont( QFont( "helvetica", 24, QFont::Bold ) );    if ( !Global::mousePreferred() ) {        setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::MinimumExpanding));        setFrameStyle(NoFrame);        viewport()->setBackgroundMode(PaletteBase);    } else { //pda or touchscreen        setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Fixed));    }}MyLcdDisplay::~MyLcdDisplay() {    delete lcdPixmap;    delete lcdPainter;}QSize MyLcdDisplay::sizeHint() const{    if (!Global::mousePreferred())        return QScrollView::sizeHint();    else        return QSize(-1,fontMetrics().lineSpacing()+2*frameWidth());}void MyLcdDisplay::readStack() {    bool stateOk = systemEngine->checkState();    if (!lcdPixmap)	lcdPixmap = new QPixmap(visibleWidth(),2000);    if (!lcdPainter)	lcdPainter = new QPainter();    lcdPixmap->fill();    lcdPainter->begin(lcdPixmap,this);    lcdPainter->setPen(Qt::black);    verticalOffset=0; // top margin    int horizontalOffset = 10; // right margin    if (!stateOk) {        lcdPainter->setFont(QFont( "helvetica", 10, QFont::Bold ) );	lcdPainter->drawText(5,5,visibleWidth() - horizontalOffset,20,Qt::AlignRight,systemEngine->errorString);	verticalOffset=25;    } else {        if (Global::mousePreferred()) {            QPixmap *tmp;            if (systemEngine->dStack.isEmpty())                return;            int myoffset = 10;            tmp = systemEngine->dStack.top()->draw();            int drawPoint = QMAX(visibleWidth() - tmp->width(),0);            int srcStart = QMAX(tmp->width() - visibleWidth(),0);            lcdPainter->drawPixmap(drawPoint - myoffset,verticalOffset,*tmp,srcStart);            verticalOffset += tmp->height();        }#ifdef QTOPIA_PHONE        else {            niStack = new QStack<QString>();            ndStack = new QStack<Data>();            while (!systemEngine->iStack.isEmpty())                niStack->push(systemEngine->iStack.pop());            while (!systemEngine->dStack.isEmpty())                ndStack->push(systemEngine->dStack.pop());            dataLeft = 1;            while (!niStack->isEmpty() || !ndStack->isEmpty()) {                horizontalOffset = 10;                horizontalOffset = drawNextItem(horizontalOffset,TRUE);            }            delete niStack;            delete ndStack;        }#endif    }    if (!Global::mousePreferred())        resizeContents(visibleWidth(),verticalOffset);    updateContents(0,0,visibleWidth(),verticalOffset);    lcdPainter->end();    if (!Global::mousePreferred())        ensureVisible(visibleWidth(),verticalOffset);}#ifdef QTOPIA_PHONEint MyLcdDisplay::drawNextItem(int hoffset,bool newline) {    QPixmap *tmp;    int myoffset = hoffset;    if (!niStack->isEmpty() && *(niStack->top()) == "Open brace impl") { // No tr	Instruction *tmpi = systemEngine->resolve(*(niStack->top()));	tmp = tmpi->draw();	systemEngine->iStack.push(niStack->pop());	myoffset += drawNextItem(hoffset,FALSE);    } else if (dataLeft && !ndStack->isEmpty()) {	tmp = ndStack->top()->draw();	systemEngine->dStack.push(ndStack->pop());	dataLeft--;    } else if (!niStack->isEmpty()) {	Instruction *tmpi = systemEngine->resolve(*(niStack->top()));	tmp = tmpi->draw();	dataLeft = tmpi->argCount - 1;	systemEngine->iStack.push(niStack->pop());	if (tmpi->name != "EvaluateLine") // No tr	    myoffset += drawNextItem(hoffset,FALSE);    } else	return 0;    int drawPoint = QMAX(visibleWidth() - tmp->width(),0);    int srcStart = QMAX(tmp->width() - visibleWidth(),0);    lcdPainter->drawPixmap(drawPoint - myoffset,verticalOffset,*tmp,srcStart);    if (newline)	verticalOffset += tmp->height();    return myoffset + tmp->width();}#endifvoid MyLcdDisplay::drawContents(QPainter *p,int x,int y, int w, int h) {    if (lcdPixmap)	p->drawPixmap(x,y,*lcdPixmap,x,y,w,h);}

⌨️ 快捷键说明

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