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

📄 html.cpp

📁 一种效率高
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	        // KFM Extension	        if ( !cellDown( _ke->state() & ShiftButton ? true : false ) )		{    		  if ( docHeight() < height() ) break;		  int newY = y_offset + 20;		  if ( newY > docHeight() - height() )		    newY = docHeight() - height();		  slotScrollVert( newY );		  emit scrollVert( newY );		}				flushKeys();	    }	    break;	case Key_Next:	    {	      if ( docHeight() < height() ) break;	      int newY = y_offset + height() - 20;	      if ( newY > docHeight() - height() )		newY = docHeight() - height();	      slotScrollVert( newY );	      emit scrollVert( newY );			      flushKeys();	    }	    break;	case Key_Up:	    {	      // KFM Extension	      if ( _ke->state() & AltButton )	      {		emit goUp();              }	      // KFM Extension	      else if ( !cellUp( _ke->state() & ShiftButton ? true : false ) )	      {  		if ( docHeight() < height() ) break;		int newY = y_offset - 20;		if ( newY < 0 )		  newY = 0;		slotScrollVert( newY );		emit scrollVert( newY );	      }	      	      flushKeys();	    }	    break;	case Key_Prior:	    {		if ( docHeight() < height() ) break;		int newY = y_offset - height() + 20;		if ( newY < 0 )		    newY = 0;		slotScrollVert( newY );		emit scrollVert( newY );		flushKeys();	    }	    break;	case Key_Right:	    {	        // KFM Extension	        if ( _ke->state() & AltButton )	        {		  emit goRight();                }		// KFM Extension		else if ( !cellRight( _ke->state() & ShiftButton ? true : false ) )		{  		  if ( docWidth() < width() ) break;		  int newX = x_offset + 20;		  if ( newX > docWidth() - width() )		    newX = docWidth() - width();		  slotScrollHorz( newX );		  emit scrollHorz( newX );		}	      		flushKeys();	    }	    break;	case Key_Left:	    {	      // KFM Extension	      if ( _ke->state() & AltButton )	      {		emit goLeft();	      }	      // KFM Extension	      else if ( !cellLeft( _ke->state() & ShiftButton ? true : false ) )	      {  		if ( docWidth() < width() ) break;		int newX = x_offset - 20;		if ( newX < 0 )		  newX = 0;		slotScrollHorz( newX );		emit scrollHorz( newX );	      }	      	      flushKeys();	    }	    break;	default:            // KFM Extension            if ( _ke->ascii() > 0 )            {                QString saved (currentKeySeq);                flushKeys();                currentKeySeq = saved.copy() + (char) _ke->ascii();                cellSequenceChanged();            } else KDNDWidget::keyPressEvent( _ke );    }}// Little routine from Alessandro Russo to flush extra keypresses from// the event queuevoid KHTMLWidget::flushKeys(){    XEvent ev_return;    Display *dpy = qt_xdisplay();    while ( XCheckTypedEvent( dpy, KeyPress, &ev_return ) );    currentKeySeq = "";}void KHTMLWidget::paintSingleObject( HTMLObject *_obj ){    bool newPainter = FALSE;//    if ( parsing )//	return;        if ( clue == 0 )	return;    if ( painter == 0 )    {	painter = new QPainter;	painter->begin( this );	newPainter = TRUE;    }    int absx, absy;    if ( ( absx = _obj->getAbsX() ) >= 0 )    {	absy = _obj->getAbsY();/*	drawBackground( x_offset, y_offset, absx - x_offset + leftBorder,		absy - y_offset + topBorder,		_obj->getWidth(), _obj->getHeight() );*/	_obj->print( painter, absx - x_offset + leftBorder - _obj->getXPos(),	    absy - y_offset + topBorder - (_obj->getYPos()-_obj->getAscent()) );    }    else    {	int tx = -x_offset + leftBorder;	int ty = -y_offset + topBorder;		clue->print( painter, _obj, x_offset, y_offset,		     width(), height(), tx, ty );    }        if ( newPainter )    {	painter->end();	delete painter;	painter = 0;    }}void KHTMLWidget::paint( HTMLChain *_chain, int x, int y, int w, int h ){    bool newPainter = FALSE;    if ( clue == 0 )	return;    _chain->first();    if ( _chain->current() )    {	if ( painter == 0 )	{	    painter = new QPainter;	    painter->begin( this );	    newPainter = TRUE;	}	int tx = -x_offset + leftBorder;	int ty = -y_offset + topBorder;	bool db = bDrawBackground;	bDrawBackground = true;	drawBackground( x_offset, y_offset, x, y, w, h );	bDrawBackground = db;	_chain->current()->print( painter, _chain, x + x_offset - leftBorder,		y + y_offset - topBorder, w, h, tx, ty );    	if ( newPainter )	{	    painter->end();	    delete painter;	    painter = 0;	}    }}void KHTMLWidget::scheduleUpdate( bool clear ){    if ( clear )	bDrawBackground = true;    if ( !updateTimer.isActive() )    {	bDrawBackground = clear;	updateTimer.start( 100, true );    }}void KHTMLWidget::slotUpdate(){    repaint( false );    // If we aren't parsing anymore then the background should always be    // drawn.    if ( !parsing )	bDrawBackground = true;}void KHTMLWidget::calcAbsolutePos(){    if ( clue )	clue->calcAbsolutePos( 0, 0 );}void KHTMLWidget::getSelected( QStrList &_list ){    if ( clue == 0 )	return;        clue->getSelected( _list );}void KHTMLWidget::getSelectedText( QString &_str ){    if ( clue == 0 )	return;        clue->getSelectedText( _str );}// Print the current document to the printer.// This currently prints the entire document without releasing control// to the event loop.  This isn't a problem for small documents, but// may be annoying for very large documents.  If this is changed in// the future, it should be noted that this widget CANNOT be redrawn// while it is printing as its layout is recalculated to suit the paper// size it is being printed on.//void KHTMLWidget::print(){    float scalers[] = { 1.1, 1.0, 0.9, 0.75, 0.6, 0.4 };    QPrinter printer;    if ( printer.setup( 0 ) )    {	bool newPainter = false;	int pgWidth = 595, pgHeight = 842;	switch ( printer.pageSize() )	{	    case QPrinter::A4:		pgWidth = 595;		pgHeight = 842;		break;	    case QPrinter::B5:		pgWidth = 516;		pgHeight = 729;		break;	    case QPrinter::Letter:		pgWidth = 612;		pgHeight = 792;		break;	    case QPrinter::Legal:		pgWidth = 612;		pgHeight = 1008;		break;	    case QPrinter::Executive:		pgWidth = 540;		pgHeight = 720;		break;            default:	      assert( 0 );	}	if ( printer.orientation() == QPrinter::Landscape )	{	    int tmp = pgWidth;	    pgWidth = pgHeight;	    pgHeight = tmp;	}	pgWidth -= ( 2*PRINTING_MARGIN );	pgHeight -= ( 2*PRINTING_MARGIN );	pgWidth = (int) ((float)pgWidth / scalers[ settings->fontBaseSize ] );	pgHeight = (int) ((float)pgHeight / scalers[ settings->fontBaseSize ] );	int margin = (int)((float)PRINTING_MARGIN /		scalers[ settings->fontBaseSize ] );	QPainter prPainter;	prPainter.begin( &printer );	prPainter.scale( scalers[ settings->fontBaseSize ],		scalers[ settings->fontBaseSize ] );	clue->recalcBaseSize( &prPainter );	clue->reset();	clue->setMaxWidth( pgWidth );	clue->calcSize();	clue->setPos( 0, clue->getAscent() );	calcAbsolutePos();	unsigned numBreaks = 1;	int pos = 0;	QArray<int> breaks( 10 );	breaks[0] = 0;	do	{	    debugM( "Break pos = %d\n", pos );	    pos = clue->findPageBreak( pos + pgHeight );	    if ( pos >= 0 )	    {		breaks[ numBreaks ] =  pos;		numBreaks++;		if ( numBreaks == breaks.size() )		    breaks.resize( numBreaks + 10 );	    }	}	while ( pos > 0 );	for ( unsigned b = 0; b < numBreaks; b++ )	{	    int printHeight;	    if ( b < numBreaks - 1 )		printHeight = breaks[b+1] - breaks[b];	    else		printHeight = pgHeight;	    clue->print( &prPainter, 0, breaks[b], pgWidth, printHeight,	    margin, margin-breaks[b], true );	    if ( b < numBreaks - 1 )	    {		printer.newPage();	    }	}	prPainter.end();	if ( painter == 0 )	{	    painter = new QPainter;	    painter->begin( this );	    newPainter = TRUE;	}	clue->recalcBaseSize( painter );	calcSize();	calcAbsolutePos();	if ( newPainter )	{	    painter->end();	    delete painter;	    painter = 0;	}    }}void KHTMLWidget::setBaseURL( const char *_url){    baseURL = _url;    baseURL.setReference( 0 );    baseURL.setSearchPart( 0 );    QString p = baseURL.httpPath();    if ( p.length() > 0 )    {       int pos = p.findRev( '/' );       if ( pos >= 0 )	 if(p.findRev('.') > pos)	    p.truncate( pos );    }    p += "/";          baseURL.setPath( p );}void KHTMLWidget::begin( const char *_url, int _x_offset, int _y_offset ){    emit documentStarted();        bIsFrameSet = FALSE;    // bIsFrame = FALSE;    bFramesComplete = FALSE;    bInNoframes = false;    framesetStack.clear();    framesetList.clear();    frameList.clear();        freeBlock(); /* Clear the block stack */    if ( bIsTextSelected )    {	bIsTextSelected = false;	emit textSelected( false );    }        if ( frameSet )    {	delete frameSet;	frameSet = 0;    }    x_offset = _x_offset;    y_offset = _y_offset;    // small hack to get positioning of pages working with restore()    if( initialXPos )	x_offset = initialXPos;    if( initialYPos )	y_offset = initialYPos;    emit scrollHorz( x_offset );    emit scrollVert( y_offset );    bgPixmapURL = 0;        stopParser();        reference = 0;        if ( _url != 0 )    {      actualURL = _url;      reference = actualURL.reference();      setBaseURL( _url);      // Set a default title      KURL title(_url);      title.setReference(0);      title.setSearchPart(0);      emit setTitle( title.url().data() );    }    else    {      emit setTitle( "* Unknown *" );    }      baseTarget = "";    if ( stringTok )	delete stringTok;    stringTok = new StringTokenizer;    if ( ht != 0 )	delete ht;    ht = new HTMLTokenizer( this );    ht->begin();    writing = true;}void KHTMLWidget::write( const char *_str){    if ( _str == 0 )	return;        ht->write( _str );    // If the timer has been stopped while waiting for more html,    // start it again.    if ( parsing && timerId == 0 )	timerId = startTimer( TIMER_INTERVAL );}void KHTMLWidget::end(){    writing = false;    if ( ht )	ht->end();}// changes a current font// needed for headings, and whenever the font family change is necesseryvoid KHTMLWidget::selectFont( const char *_fontfamily, int _fontsize, int _weight, bool _italic ){    if ( _fontsize < 0 )	_fontsize = 0;    else if ( _fontsize >= MAXFONTSIZES )	_fontsize = MAXFONTSIZES - 1;    HTMLFont f( _fontfamily, _fontsize, settings->fontSizes, _weight, _italic,            settings->charset);    f.setUnderline( underline );    f.setStrikeOut( strikeOut );    f.setTextColor( *(colorStack.top()) );    const HTMLFont *fp = pFontManager->getFont( f );    font_stack.push( fp );    painter->setFont( *(font_stack.top()) );}void KHTMLWidget::selectFont( int _relative_font_size ){    int fontsize = settings->fontBaseSize + _relative_font_size;    if ( !currentFont() )    {	fontsize = settings->fontBaseSize;	debug( "aarrrgh - no font" );    }    if ( fontsize < 0 )	fontsize = 0;    else if ( fontsize >= MAXFONTSIZES )	fontsize = MAXFONTSIZES - 1;    HTMLFont f( font_stack.top()->family(), fontsize, settings->fontSizes, weight,	italic,  font_stack.top()->charset() );    f.setUnderline( underline );    f.setStrikeOut( strikeOut );    f.setTextColor( *(colorStack.top()) );    const HTMLFont *fp = pFontManager->getFont( f );    font_stack.push( fp );    painter->setFont( *(font_stack.top()) );}void KHTMLWidget::selectFont(){    int fontsize;	    if ( currentFont() )	fontsize = currentFont()->size();    else    {	fontsize = settings->fontBaseSize;	debug( "aarrrgh - no font" );	assert(0);    }    HTMLFont f( font_stack.top()->family(), fontsize, settings->fontSizes, weight,	italic,  font_stack.top()->charset() );    f.setUnderline( underline );

⌨️ 快捷键说明

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