qsteprint.cpp

来自「porting scintilla to qt」· C++ 代码 · 共 167 行

CPP
167
字号
#include <qprinter.h>#include <qstack.h>#include <qpainter.h>#include <QAbstractScrollArea>#include <qpoint.h>#include <ctype.h>#include <stdlib.h>#include <QScrollBar>#include <QMouseEvent>#include "SciLexer.h"#include "qsteprint.h"#include "qsteeditor.h"QStePrint::QStePrint(QSteEditor *editor,QPrinter *qprinter,QWidget *parent):QAbstractScrollArea(parent),m_editor(editor),m_printer(qprinter){	initialize();}QStePrint::~QStePrint(){}void QStePrint::zoomIn(int degree){}void QStePrint::zoomOut(int degree){}void QStePrint::focusInEvent(QFocusEvent *event){}void QStePrint::focusOutEvent(QFocusEvent *event){}bool QStePrint::focusNextPrevChild(bool next){}void QStePrint::keyPressEvent(QKeyEvent *event){}void QStePrint::inputMethodEvent(QInputMethodEvent *event){}void QStePrint::mouseDoubleClickEvent(QMouseEvent *event){}void QStePrint::mouseMoveEvent(QMouseEvent *e){    if (mousePressPos.isNull()) {        e->ignore();        return;    }    horizontalScrollBar()->setValue(scrollBarValuesOnMousePress.x() - e->pos().x() + mousePressPos.x());    verticalScrollBar()->setValue(scrollBarValuesOnMousePress.y() - e->pos().y() + mousePressPos.y());    horizontalScrollBar()->update();    verticalScrollBar()->update();    e->accept();}void QStePrint::mousePressEvent(QMouseEvent *e){    mousePressPos = e->pos();    scrollBarValuesOnMousePress.rx() = horizontalScrollBar()->value();    scrollBarValuesOnMousePress.ry() = verticalScrollBar()->value();    e->accept();}void QStePrint::mouseReleaseEvent(QMouseEvent *e){    mousePressPos = QPoint();    e->accept();}void QStePrint::paintEvent(QPaintEvent *event){	if(m_editor == NULL || m_printer == NULL)		return;	QPrinter *printer = m_printer;	int mag = 0;	int wrap = SC_WRAP_WORD;    // Setup the printing area from parameter in printer    QRect def_area; 	//int right = printer->paperRect().right() - printer->pageRect().right();	//int bottom = printer->paperRect().bottom() - printer->pageRect().bottom();	int left= printer->paperRect().left() - printer->pageRect().left();  	int top= printer->paperRect().top() - printer->pageRect().top();	def_area.setY(10);	def_area.setX(20);	def_area.setWidth(printer->width() - left * 2);	def_area.setHeight(printer->height() - top * 2);    // Get the page range.    int pgfrom, pgto;    pgfrom = printer->fromPage();    pgto = printer->toPage();    // Find the position range.    long startpos, endpos;    endpos = m_editor->sendMsgToSci(SCI_GETLENGTH);    startpos = 0;	QPainter painter(viewport());	bool reverse = (printer->pageOrder() == QPrinter::LastPageFirst);	bool neednewpage = false;    m_editor->sendMsgToSci(SCI_SETPRINTMAGNIFICATION,0);	m_editor->sendMsgToSci(SCI_SETPRINTWRAPMODE,wrap);	for(int i = 1;i <= printer->numCopies();i++){		QStack<long> pagestarts;		int currpage = 1;		long pos = startpos;		while(pos < endpos){			if(pgto > 0 && pgto < currpage)				break;			bool render = false;			if(pgfrom == 0 || pgfrom <= currpage){				if(reverse){					pagestarts.push(pos);				}else{					render = true;					if(neednewpage){						if(!printer->newPage())							return;					}else{						neednewpage = true;					}				}			}				QRect area = def_area;//			printer->formatPage(painter,render,area,currpage);			pos = m_editor->sendMsgToSci(SCI_FORMATRANGE,render,&painter,area,pos,endpos);			currpage++;		}		if(!reverse)			continue;		while(!pagestarts.isEmpty()){			--currpage;			long epos = pos;			pos = pagestarts.pop();			if(neednewpage){				if(!printer->newPage()){					return;				}			}else{				neednewpage = true;			}			QRect area = def_area;//			printer->formatPage(painter,true,area,currpage);			m_editor->sendMsgToSci(SCI_FORMATRANGE,true,&painter,area,pos,epos);		}	}}void QStePrint::resizeEvent(QResizeEvent *event){}void QStePrint::scrollContentsBy(int dx,int dy){}void QStePrint::initialize(){    verticalScrollBar()->setSingleStep(20);    horizontalScrollBar()->setSingleStep(20);    viewport()->setBackgroundRole(QPalette::Dark);	verticalScrollBar()->setValue(10);	horizontalScrollBar()->setValue(10);	verticalScrollBar()->setMinimum(10);	horizontalScrollBar()->setMinimum(0);	verticalScrollBar()->setMaximum(1000);	horizontalScrollBar()->setMaximum(10000);}

⌨️ 快捷键说明

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