void TLFrameSequenceLayout::updateContentSize() { if ( contentsHeight() < number_of_frame_sequences * 24 ) { resizeContents( contentsWidth(), number_of_frame_sequences * 24 ); } else if ( contentsHeight() > number_of_frame_sequences * 24 && contentsHeight() > 90 ) { resizeContents( contentsWidth(), contentsHeight() - 24 ); } updateContents(); updateScrollBars(); parent_widget -> update(); }
void MapView::updateMap( ) { int x, y, i, j; switch (maptype) { case GLOBAL_MAP: if (settings.use_global_map) { compute_probs_of_global_map( global_map ); for (x=0;x<global_map->mapsize.x;x++) { for (y=0;y<global_map->mapsize.y;y++) { if (global_map->mapsum[x][y]>0) { gimage->setPixel( (int) (global_map->mapsize.x-1-x), (int) y, (int) (255-253*global_map->mapprob[x][y]) ); } else { global_map->mapprob[x][y] = settings.global_map_std_val; gimage->setPixel( (int) (global_map->mapsize.x-1-x), (int) y, 0 ); } } } resizeContents( gimage->size().width(), gimage->size().height() ); } break; case LOCAL_MAP: if (settings.use_correction) { for (x=0;x<local_map->mapsize.x;x++) { for (y=0;y<local_map->mapsize.y;y++) { for (i=0;i<scale;i++) { for (j=0;j<scale;j++) { limage->setPixel( (int) (x*scale+i), (int) ((local_map->mapsize.y-y-1)*scale+j), (int) (200.0 * local_map->mapprob[x][y]) ); } } } } resizeContents( limage->size().width(), limage->size().height() ); } break; case SHOW_RAYS: resizeContents( viewport()->size().width(), viewport()->size().height() ); break; } viewport()->repaint( FALSE ); // plot_robot_path(); }
void DrawZone::setZoom(double z) { _zoom=z; imageRect.setHeight(myround(image.height()*_zoom)); imageRect.setWidth(myround(image.width()*_zoom)); zoomedImage=QPixmap(imageRect.width(),imageRect.height()); QPainter p(&zoomedImage); p.scale(z,z); QPixmap pix; pix.convertFromImage(image); // if the picture has transparent areas, // fill them with Gimp like background if (pix.mask()) { QPixmap backPix(32,32); QPainter p2(&backPix); p2.fillRect(0,0,32,32,QColor(156,149,156)); p2.fillRect(0,16,16,16,QColor(98,105,98)); p2.fillRect(16,0,16,16,QColor(98,105,98)); p2.flush(); p.setPen(QPen()); p.fillRect(imageRect.left(),imageRect.top(),imageRect.width(),imageRect.height(),QBrush(QColor("black"),backPix)); } p.drawPixmap(imageRect.left(),imageRect.top(),pix); p.flush(); resizeContents(visibleWidth()>imageRect.width() ? visibleWidth() : imageRect.width(), visibleHeight()>imageRect.height() ? visibleHeight() : imageRect.height()); repaintContents(0,0,contentsWidth(),contentsHeight(),true); }
bool QScrollView::qt_invoke( int _id, QUObject* _o ) { switch ( _id - staticMetaObject()->slotOffset() ) { case 0: resizeContents((int)static_QUType_int.get(_o+1),(int)static_QUType_int.get(_o+2)); break; case 1: scrollBy((int)static_QUType_int.get(_o+1),(int)static_QUType_int.get(_o+2)); break; case 2: setContentsPos((int)static_QUType_int.get(_o+1),(int)static_QUType_int.get(_o+2)); break; case 3: ensureVisible((int)static_QUType_int.get(_o+1),(int)static_QUType_int.get(_o+2)); break; case 4: ensureVisible((int)static_QUType_int.get(_o+1),(int)static_QUType_int.get(_o+2),(int)static_QUType_int.get(_o+3),(int)static_QUType_int.get(_o+4)); break; case 5: center((int)static_QUType_int.get(_o+1),(int)static_QUType_int.get(_o+2)); break; case 6: center((int)static_QUType_int.get(_o+1),(int)static_QUType_int.get(_o+2),(float)(*((float*)static_QUType_ptr.get(_o+3))),(float)(*((float*)static_QUType_ptr.get(_o+4)))); break; case 7: updateScrollBars(); break; case 8: setEnabled((bool)static_QUType_bool.get(_o+1)); break; case 9: hslide((int)static_QUType_int.get(_o+1)); break; case 10: vslide((int)static_QUType_int.get(_o+1)); break; case 11: hbarIsPressed(); break; case 12: hbarIsReleased(); break; case 13: vbarIsPressed(); break; case 14: vbarIsReleased(); break; case 15: doDragAutoScroll(); break; case 16: startDragAutoScroll(); break; case 17: stopDragAutoScroll(); break; default: return QFrame::qt_invoke( _id, _o ); } return TRUE; }
bool AbstractContent::fromXml(QDomElement & contentElement, const QDir & /*baseDir*/) { // restore content properties QDomElement domElement; // Load image size saved in the rect node domElement = contentElement.firstChildElement("rect"); qreal x, y, w, h; x = domElement.firstChildElement("x").text().toDouble(); y = domElement.firstChildElement("y").text().toDouble(); w = domElement.firstChildElement("w").text().toDouble(); h = domElement.firstChildElement("h").text().toDouble(); resizeContents(QRect(x, y, w, h)); // Load position coordinates domElement = contentElement.firstChildElement("pos"); x = domElement.firstChildElement("x").text().toDouble(); y = domElement.firstChildElement("y").text().toDouble(); setPos(x, y); qreal zvalue = contentElement.firstChildElement("zvalue").text().toDouble(); setZValue(zvalue); bool visible = contentElement.firstChildElement("visible").text().toInt(); setVisible(visible); qreal opacity = contentElement.firstChildElement("opacity").text().toDouble(); if (opacity > 0.0 && opacity < 1.0) setContentOpacity(opacity); int fxIdx = contentElement.firstChildElement("fxindex").text().toInt(); if (fxIdx > 0) setFxIndex(fxIdx); bool hasText = contentElement.firstChildElement("frame-text-enabled").text().toInt(); setFrameTextEnabled(hasText); if (hasText) { QString text = contentElement.firstChildElement("frame-text").text(); setFrameText(text); } quint32 frameClass = contentElement.firstChildElement("frame-class").text().toInt(); setFrame(frameClass ? FrameFactory::createFrame(frameClass) : 0); // restore transformation QDomElement te = contentElement.firstChildElement("transformation"); if (!te.isNull()) { m_perspectiveAngles = QPointF(te.attribute("xRot").toDouble(), te.attribute("yRot").toDouble()); #if QT_VERSION < 0x040600 m_rotationAngle = te.attribute("zRot").toDouble(); #else setRotation(te.attribute("zRot").toDouble()); #endif applyTransforms(); } domElement = contentElement.firstChildElement("mirror"); setMirrored(domElement.attribute("state").toInt()); return true; }
void MineField::setCellSize( int cellsize ) { int b = 2; int w2 = cellsize*numCols; int h2 = cellsize*numRows; int w = QMIN( availableRect.width(), w2+b ); int h = QMIN( availableRect.height(), h2+b ); // // Don't rely on the change in cellsize to force a resize, // as it's possible to have the same size cells when going // from a large play area to a small one. // resizeContents(w2, h2); if ( availableRect.height() < h2 && availableRect.width() - w > style().scrollBarExtent().width() ) { w += style().scrollBarExtent().width(); } setGeometry( availableRect.x() + (availableRect.width()-w)/2, availableRect.y() + (availableRect.height()-h)/2, w, h ); cellSize = cellsize; }
void PictureContent::addEffect(const PictureEffect & effect) { if (!m_photo) return; m_photo->addEffect(effect); // adapt picture ratio after cropping if (effect.effect == PictureEffect::Crop) { QRect actualContentRect = contentRect(); if ((actualContentRect.height() + actualContentRect.width()) > 0) { qreal reduceRatio = (qreal)(effect.rect.width()+effect.rect.height())/ (qreal)(actualContentRect.height() +actualContentRect.width()); int newW = (int)((qreal)effect.rect.width()/reduceRatio); int newH = (int)((qreal)effect.rect.height()/reduceRatio); resizeContents(QRect(-newW/2, -newH/2, newW, newH), true); } } else if(effect.effect == PictureEffect::Opacity) setContentOpacity(effect.param); m_cachedPhoto = QPixmap(); update(); GFX_CHANGED(); // notify image change emit contentChanged(); }
void PolicyViewClass::onAddPattern() { bool ok = false; QString text = QInputDialog::getText( tr( "Add Pattern" ), tr( "Pattern name:" ), QLineEdit::Normal, QString::null, &ok, this ); if ( ok && !text.isEmpty() ) { if (document.addPattern(text, picked_x, picked_y)) { PatternWidgetClass* patternWidget = new PatternWidgetClass(this, viewport(), text); addChild(patternWidget, picked_x, picked_y); patternWidget->show(); QRect r = viewport()->childrenRect(); QPoint s = viewportToContents(r.bottomRight()); resizeContents(s.x(), s.y()); ensureVisible(picked_x, picked_y); } else QMessageBox::warning(this, "Add Pattern", "Pattern " + text + " allready exists.\n" + "No pattern added."); } }
/****************************************************************************** * Sets the last column in the list view to extend at least to the right hand * edge of the list view. */ void EventListViewBase::resizeLastColumn() { int lastColumnWidth = mLastColumnHeaderWidth; for (EventListViewItemBase* item = firstChild(); item; item = item->nextSibling()) { int mw = item->lastColumnWidth(); if (mw > lastColumnWidth) lastColumnWidth = mw; } QHeader* head = header(); int x = head->sectionPos(mLastColumn); int availableWidth = visibleWidth() - x; int rightColWidth = 0; int index = head->mapToIndex(mLastColumn); if (index < mLastColumn) { // The last column has been dragged by the user to a different position. // Ensure that the columns now to the right of it are still shown. for (int i = index + 1; i <= mLastColumn; ++i) rightColWidth += columnWidth(head->mapToSection(i)); availableWidth -= rightColWidth; } if (availableWidth < lastColumnWidth) availableWidth = lastColumnWidth; setColumnWidth(mLastColumn, availableWidth); if (contentsWidth() > x + availableWidth + rightColWidth) resizeContents(x + availableWidth + rightColWidth, contentsHeight()); }
void KexiSimplePrintPreviewScrollView::setFullWidth() { viewport()->setUpdatesEnabled(false); double widthMM = KoPageFormat::width( m_window->settings().pageLayout.format, m_window->settings().pageLayout.orientation); double heightMM = KoPageFormat::height( m_window->settings().pageLayout.format, m_window->settings().pageLayout.orientation); // int constantWidth = m_window->width()- KexiSimplePrintPreviewScrollView_MARGIN*6; double constantWidth = width() - KexiSimplePrintPreviewScrollView_MARGIN * 6; double heightForWidth = constantWidth * heightMM / widthMM; // heightForWidth = qMin(kapp->desktop()->height()*4/5, heightForWidth); kDebug() << "1: " << heightForWidth; #if 0 //todo we can use this if we want to fix the height to width of the page heightForWidth = qMin(height(), heightForWidth); kDebug() << "2: " << heightForWidth; #endif constantWidth = heightForWidth * widthMM / heightMM; widget->resize((int)constantWidth, (int)heightForWidth); //keep aspect resizeContents(int(widget->width() + 2*KexiSimplePrintPreviewScrollView_MARGIN), int(widget->height() + 2*KexiSimplePrintPreviewScrollView_MARGIN)); moveChild(widget, (contentsWidth() - widget->width()) / 2, (contentsHeight() - widget->height()) / 2); viewport()->setUpdatesEnabled(true); resize(size() + QSize(1, 1)); //to update pos. widget->enablePainting = true; widget->repaint(); }
void CardView::calcLayout() { // Start in the upper left corner and layout all the // cars using their height and width int maxWidth = 0; int maxHeight = 0; int xPos = 0; int yPos = 0; int cardSpacing = d->mItemSpacing; // delete the old separators d->mSeparatorList.clear(); Q3PtrListIterator<CardViewItem> iter( d->mItemList ); CardViewItem *item = 0; CardViewSeparator *sep = 0; xPos += cardSpacing; for ( iter.toFirst(); iter.current(); ++iter ) { item = *iter; yPos += cardSpacing; if ( yPos + item->height() + cardSpacing >= height() - horizontalScrollBar()->height() ) { maxHeight = qMax( maxHeight, yPos ); // Drawing in this column would be greater than the height // of the scroll view, so move to next column yPos = cardSpacing; xPos += cardSpacing + maxWidth; if ( d->mDrawSeparators ) { // Create a separator since the user asked sep = new CardViewSeparator( this ); sep->mRect.moveTopLeft( QPoint( xPos, yPos + d->mItemMargin ) ); xPos += d->mSepWidth + cardSpacing; d->mSeparatorList.append( sep ); } maxWidth = 0; } item->d->x = xPos; item->d->y = yPos; yPos += item->height(); maxWidth = qMax( maxWidth, d->mItemWidth ); } xPos += maxWidth; resizeContents( xPos + cardSpacing, maxHeight ); // Update the height of all the separators now that we know the // max height of a column Q3PtrListIterator<CardViewSeparator> sepIter( d->mSeparatorList ); for ( sepIter.toFirst(); sepIter.current(); ++sepIter ) (*sepIter)->mRect.setHeight( maxHeight - 2 * cardSpacing - 2 * d->mItemMargin ); d->mLayoutDirty = false; }
void FrameView::adjustViewSize() { ASSERT(m_frame->view() == this); RenderView* root = static_cast<RenderView*>(m_frame->renderer()); if (!root) return; resizeContents(root->overflowWidth(), root->overflowHeight()); }
void AppPage::completed( int width, int height, int x, int y ) { width = ( width == 0 ) ? m_splitter->sizeHint().width() : width; height = ( height == 0 ) ? m_splitter->sizeHint().height() : height; resizeContents( width, height+20 ); // must call this to repaint background //viewport()->resize( width, height ); //ensureVisible( x, y, 0, 0 ); setContentsPos( x, y ); }
void AbstractContent::setFrame(Frame * frame) { delete m_frame; m_frame = frame; if (m_frame) FrameFactory::setDefaultPictureClass(m_frame->frameClass()); resizeContents(m_contentsRect); layoutChildren(); update(); GFX_CHANGED(); }
void QVFbView::setZoom( double z ) { if ( zm != z ) { zm = z; setDirty(QRect(0,0,hdr->width,hdr->height)); resizeContents( int(hdr->width*z), int(hdr->height*z) ); updateGeometry(); qApp->sendPostedEvents(); topLevelWidget()->adjustSize(); drawScreen(); } }
void AbstractContent::setFrame(Frame * frame) { delete m_frame; m_frame = frame; FrameFactory::setDefaultPictureClass(frameClass()); if (!m_frame && m_frameTextItem) m_frameTextItem->hide(); resizeContents(m_contentRect); layoutChildren(); update(); GFX_CHANGED(); }
RoutingDrawWidget::RoutingDrawWidget(RoutingWidget *parent, const char *name, WFlags f) : QScrollView(parent, name, f) { setFocusPolicy(QWidget::StrongFocus); resizeContents(4000,3000); this->viewport()->setEraseColor(QColor(255,255,255)); resizeItem = NULL; mode = None; //enable tooltips new RoutingToolTip(this); }
void KexiSimplePrintPreviewScrollView::resizeEvent(QResizeEvent *re) { Q3ScrollView::resizeEvent(re); // kDebug() << re->size().width() << " " << re->size().height(); // kDebug() << contentsWidth() << " " << contentsHeight(); // kDebug() << widget->width() << " " << widget->height(); setUpdatesEnabled(false); if (re->size().width() > (widget->width() + 2*KexiSimplePrintPreviewScrollView_MARGIN) || re->size().height() > (widget->height() + 2*KexiSimplePrintPreviewScrollView_MARGIN)) { resizeContents( qMax(re->size().width(), widget->width() + 2*KexiSimplePrintPreviewScrollView_MARGIN), qMax(re->size().height(), widget->height() + 2*KexiSimplePrintPreviewScrollView_MARGIN)); int vscrbarWidth = verticalScrollBar()->isVisible() ? verticalScrollBar()->width() : 0; int newContentsWidth = qMax(re->size().width(), widget->width() + 2 * KexiSimplePrintPreviewScrollView_MARGIN); int newContentsHeight = qMax(re->size().height(), widget->height() + 2 * KexiSimplePrintPreviewScrollView_MARGIN); moveChild(widget, (newContentsWidth - vscrbarWidth - widget->width()) / 2, (newContentsHeight - widget->height()) / 2); resizeContents(newContentsWidth, newContentsHeight); } setUpdatesEnabled(true); }
bool AbstractContent::fromXml(QDomElement & pe) { // restore content properties QDomElement domElement; // Load image size saved in the rect node domElement = pe.firstChildElement("rect"); qreal x, y, w, h; x = domElement.firstChildElement("x").text().toDouble(); y = domElement.firstChildElement("y").text().toDouble(); w = domElement.firstChildElement("w").text().toDouble(); h = domElement.firstChildElement("h").text().toDouble(); resizeContents(QRect(x, y, w, h)); // Load position coordinates domElement = pe.firstChildElement("pos"); x = domElement.firstChildElement("x").text().toDouble(); y = domElement.firstChildElement("y").text().toDouble(); setPos(x, y); int zvalue = pe.firstChildElement("zvalue").text().toDouble(); setZValue(zvalue); bool visible = pe.firstChildElement("visible").text().toInt(); setVisible(visible); bool hasText = pe.firstChildElement("frame-text-enabled").text().toInt(); setFrameTextEnabled(hasText); if (hasText) { QString text = pe.firstChildElement("frame-text").text(); setFrameText(text); } quint32 frameClass = pe.firstChildElement("frame-class").text().toInt(); setFrame(frameClass ? FrameFactory::createFrame(frameClass) : 0); // restore transformation QDomElement te = pe.firstChildElement("transformation"); if (!te.isNull()) { m_xRotationAngle = te.attribute("xRot").toDouble(); m_yRotationAngle = te.attribute("yRot").toDouble(); m_zRotationAngle = te.attribute("zRot").toDouble(); applyRotations(); } domElement = pe.firstChildElement("mirror"); setMirrorEnabled(domElement.attribute("state").toInt()); return true; }
void setTwoColumns(const bool twoColumns) { if(twoColumns == m_twoColumns) return; Q_Q(SimpleListView); m_twoColumns = twoColumns; #if (QT_VERSION >= 0x040600) bool cache = q->listItemCaching(); q->setListItemCaching(false); #endif QList<QGraphicsLayoutItem *> moveditems; if(twoColumns) { int half = m_layout->count()/2; for (int i = m_layout->count()-1; i>=half; --i) { QGraphicsLayoutItem *item = m_layout->itemAt(i); m_layout->removeAt(i); moveditems.append(item); } for ( int i = 0; i < moveditems.count(); ++i) m_layout->addItem(moveditems.at(i), i, 1); m_layout->setColumnSpacing(0,0); m_layout->setColumnSpacing(1,0); m_layout->setRowSpacing(0,0); m_layout->setRowSpacing(1,0); } else { int count = m_layout->count()/2; for (int i = m_layout->count()-1; i>=0; --i) { if (i >= count) moveditems.append(m_layout->itemAt(i)); else moveditems.insert(moveditems.begin(), m_layout->itemAt(i)); m_layout->removeAt(i); } for (int i = 0; i<moveditems.count(); ++i) { m_layout->addItem(moveditems.at(i), m_layout->count(), 0); } } resizeContents(q->size()); resizeScrollBars(); #if (QT_VERSION >= 0x040600) q->setListItemCaching(cache); #endif }
void DrawZone::resizeEvent(QResizeEvent* e) { QScrollView::resizeEvent(e); int width=(int) (image.width()*_zoom); int height=(int) (image.height()*_zoom); if (visibleWidth()>width) width=visibleWidth(); if (visibleHeight()>height) height=visibleHeight(); resizeContents(width,height); imageRect.setLeft(0); imageRect.setTop(0); imageRect.setHeight((int)(image.height()*_zoom)); imageRect.setWidth((int)(image.width()*_zoom)); }
void TextContent::slotTextResized(const QSizeF & size) { double prevXScale = 1.0; double prevYScale = 1.0; if (m_textSize.width() > 0 && m_textSize.height() > 0) { QSize cSize = contentsRect().size(); prevXScale = (qreal)cSize.width() / (qreal)m_textSize.width(); prevYScale = (qreal)cSize.height() / (qreal)m_textSize.height(); } int w = size.width(); int h = size.height(); m_textSize = QSizeF(w, h); w = (int)(prevXScale * (qreal)w); h = (int)(prevYScale * (qreal)h); resizeContents(QRect(-w / 2, -h / 2, w, h)); }
void ThumbnailList::viewportResizeEvent( QResizeEvent * e ) { if ( m_thumbnails.count() < 1 || width() < 1 ) return; // if width changed resize all the Thumbnails, reposition them to the // right place and recalculate the contents area if ( e->size().width() != e->oldSize().width() ) { // runs the timer avoiding a thumbnail regeneration by 'contentsMoving' delayedRequestVisiblePixmaps( 2000 ); // resize and reposition items int totalHeight = 0, newWidth = e->size().width(); QValueVector<ThumbnailWidget *>::iterator tIt = m_thumbnails.begin(), tEnd = m_thumbnails.end(); for ( ; tIt != tEnd; ++tIt ) { ThumbnailWidget *t = *tIt; moveChild( t, 0, totalHeight ); t->resizeFitWidth( newWidth ); totalHeight += t->heightHint() + 4; } // update scrollview's contents size (sets scrollbars limits) resizeContents( newWidth, totalHeight ); // ensure selected item remains visible if ( m_selected ) ensureVisible( 0, childY( m_selected ) + m_selected->height()/2, 0, visibleHeight()/2 ); } else if ( e->size().height() <= e->oldSize().height() ) return; // invalidate the bookmark overlay if ( m_bookmarkOverlay ) { delete m_bookmarkOverlay; m_bookmarkOverlay = 0; } // update Thumbnails since width has changed or height has increased delayedRequestVisiblePixmaps( 500 ); }
void PictureContent::addEffect(const PictureEffect & effect) { if (!m_photo) return; m_photo->addEffect(effect); if(effect.effect == PictureEffect::Opacity) setOpacity(effect.param); else if (effect.effect == PictureEffect::Crop) { QRect actualContentRect = contentsRect(); float reduceRatio = (float)(effect.cropingRect.width()+effect.cropingRect.height())/ (float)(actualContentRect.height() +actualContentRect.width()); resizeContents(QRect(0,0, (float)effect.cropingRect.width()/reduceRatio, (float)effect.cropingRect.height()/reduceRatio)); } m_cachedPhoto = QPixmap(); update(); GFX_CHANGED(); // notify image change emit contentChanged(); }
void KImportIconView::drawContents ( QPainter *p, int cx, int cy, int cw, int ch ) { if ( !m_bDropped) { QIconView::drawContents ( p, cx, cy, cw, ch ); p->save(); QFont font ( p->font() ); font.setBold ( true ); font.setFamily ( "Helvetica [Adobe]" ); font.setPointSize ( 10 ); p->setFont ( font ); p->setPen ( QPen ( KGlobalSettings::highlightColor() ) ); QRect rect = frameRect(); QFontMetrics fm ( p->font() ); rect.setLeft ( rect.left() + 30 ); rect.setRight ( rect.right() - 30 ); resizeContents ( contentsWidth(), contentsHeight() ); // word-wrap the string KWordWrap* wordWrap1 = KWordWrap::formatText( fm, rect, AlignHCenter | WordBreak, m_strIntro ); KWordWrap* wordWrap2 = KWordWrap::formatText( fm, rect, AlignHCenter | WordBreak, i18n("Or just use the buttons.") ); QRect introRect1 = wordWrap1->boundingRect(); QRect introRect2 = wordWrap2->boundingRect(); wordWrap1->drawText ( p, ( ( frameRect().right() - introRect1.right() ) / 2 ), ( ( frameRect().bottom() - introRect1.bottom() ) / 2 ) - 20, AlignHCenter | AlignVCenter ); wordWrap2->drawText ( p, ( ( frameRect().right() - introRect2.right() ) / 2 ), ( ( frameRect().bottom() - introRect2.bottom() ) / 2 ) + introRect1.bottom(), AlignHCenter | AlignVCenter ); p->restore(); } else { QIconView::drawContents ( p, cx, cy, cw, ch ); } }
void PolicyViewClass::init() { // delete all childs QObjectList * childs; while((childs = const_cast<QObjectList *>(viewport()->children())) != NULL && !childs->isEmpty()) { delete childs->first(); } //-------------------------// // rebuild the widget list // //-------------------------// QStringList list = document.getPatternNames(); QStringList::Iterator patternIter = list.begin(); while (patternIter !=list.end()) { // generate pattern widget // QString patternName = *patternIter; PatternWidgetClass* patternWidget = new PatternWidgetClass(this, viewport(), patternName); patternWidget->show(); int x = std::max(0, document.getX(patternName)); int y = std::max(0, document.getY(patternName)); addChild(patternWidget, x, y); patternIter++; } QRect r = viewport()->childrenRect(); QPoint s = viewportToContents(r.bottomRight()); resizeContents(s.x(), s.y()); setContentsPos(0, 0); }
/*! Scrolls the browser so that the part of the document named \a name is at the top of the view (or as close to the top as the size of the document allows). */ void QTextBrowser::scrollToAnchor(const QString& name) { if ( name.isEmpty() ) return; d->curmark = name; QRichTextIterator it( richText() ); do { if ( it.format()->anchorName() == name ) { QTextParagraph* b = it.outmostParagraph(); if ( b->dirty ) { // QTextView layouts delayed in the background, so this may happen QRichTextFormatter tc( richText() ); tc.gotoParagraph( 0, &richText() ); tc.updateLayout(); resizeContents( QMAX( richText().flow()->widthUsed-1, visibleWidth() ), richText().flow()->height ); } QRect r = it.lineGeometry(); setContentsPos( contentsX(), r.top() ); return; } } while ( it.right( FALSE ) ); }
void PageView::layoutPages(bool zoomChanged) { // Paranoid safety check if (widgetList == 0) return; // If there are no widgets, e.g. because the last widget has been // removed, the matter is easy: set the contents size to 0. If there // are no widgets because previously existing widgets were removed // (we detect that by looking at the contentsWidth and -Height). if (widgetList->isEmpty()) { if ((contentsWidth() != 0) || (contentsHeight() != 0)) { QScrollView::resizeContents(0,0); } return; } // Ok, now we are in a situation where we do have some widgets that // shall be centered. int distance = distanceBetweenWidgets; if (singlePageFullScreenMode()) { // In single page fullscreen mode we don't want a margin around the pages distance = 0; } QMemArray<Q_UINT32> colWidth(nrCols); for(Q_UINT8 i=0; i<colWidth.size(); i++) colWidth[i] = 0; Q_UINT16 numRows; if(nrCols <= 2) { numRows = (widgetList->size()+2*nrCols-2) / nrCols; } else { numRows = (Q_INT16)ceil(((double)widgetList->size()) / nrCols); } QMemArray<Q_UINT32> rowHeight(numRows); for(Q_UINT16 i=0; i<rowHeight.size(); i++) rowHeight[i] = 0; // Now find the widths and heights of the columns for(Q_UINT16 i=0; i<widgetList->size(); i++) { Q_UINT8 col; Q_UINT16 row; if (nrCols == 2) { // In two-column display, start with the right column col = (i+1+nrCols) % nrCols; row = (i+1+nrCols) / nrCols - 1; } else { col = (i+nrCols) % nrCols; row = (i+nrCols) / nrCols - 1; } colWidth[col] = QMAX(colWidth[col], (Q_UINT32)widgetList->at(i)->pageSize().width()); rowHeight[row] = QMAX(rowHeight[row], (Q_UINT32)widgetList->at(i)->pageSize().height()); } // Calculate the total width and height of the display Q_UINT32 totalHeight = 0; for(Q_UINT16 i=0; i<rowHeight.size(); i++) totalHeight += rowHeight[i]; totalHeight += (numRows+1)*distance; Q_UINT32 totalWidth = 0; for(Q_UINT8 i=0; i<colWidth.size(); i++) totalWidth += colWidth[i]; totalWidth += (nrCols+1)*distance; QSize newViewportSize = viewportSize( totalWidth, totalHeight ); Q_UINT32 centeringLeft = 0; if( (Q_UINT32)newViewportSize.width() > totalWidth ) centeringLeft = ( newViewportSize.width() - totalWidth )/2; Q_UINT32 centeringTop = 0; if( (Q_UINT32)newViewportSize.height() > totalHeight ) centeringTop = ( newViewportSize.height() - totalHeight)/2; // Resize the viewport if (((Q_UINT32)contentsWidth() != totalWidth) || ((Q_UINT32)contentsHeight() != totalHeight)) { // Calculate the point in the coordinates of the contents which is currently at the center of the viewport. QPoint midPoint = QPoint(visibleWidth() / 2 + contentsX(), visibleHeight() / 2 + contentsY()); double midPointRatioX = (double)(midPoint.x()) / contentsWidth(); double midPointRatioY = (double)(midPoint.y()) / contentsHeight(); resizeContents(totalWidth,totalHeight); // If the zoom changed recenter the former midPoint if (zoomChanged) center((int)(contentsWidth() * midPointRatioX), (int)(contentsHeight() * midPointRatioY)); } // Finally, calculate the left and top coordinates of each row and // column, respectively QMemArray<Q_UINT32> colLeft(nrCols); colLeft[0] = distance; for(Q_UINT8 i=1; i<colLeft.size(); i++) colLeft[i] = colLeft[i-1]+colWidth[i-1]+distance; QMemArray<Q_UINT32> rowTop(numRows); rowTop[0] = distance; for(Q_UINT16 i=1; i<rowTop.size(); i++) rowTop[i] = rowTop[i-1]+rowHeight[i-1]+distance; for(Q_UINT16 i=0; i<widgetList->size(); i++) { Q_UINT8 col; Q_UINT16 row; if (nrCols == 2) { // In two column-mode start with the right column. col = (i+nrCols-1) % nrCols; row = (i+nrCols-1) / nrCols; } else { col = (i+nrCols) % nrCols; row = i / nrCols; } if (nrCols == 2) { // in 2-column mode right justify the first column, and leftjustify the second column int width = widgetList->at(i)->width(); int left; if (col == 0) left = centeringLeft + colLeft[col] + colWidth[col]-width + distance/2; else left = centeringLeft + colLeft[col]; moveChild( widgetList->at(i), left, centeringTop+rowTop[row]); } else { // in single column and overview mode center the widgets int widgetWidth = widgetList->at(i)->width(); int left = centeringLeft + colLeft[col] + ((int)colWidth[col]-widgetWidth)/2; moveChild(widgetList->at(i), left, centeringTop+rowTop[row]); } } calculateCurrentPageNumber(); }
void TextContent::updateTextConstraints() { // 1. actual content stretch double prevXScale = 1.0; double prevYScale = 1.0; /* if (m_textRect.width() > 0 && m_textRect.height() > 0) { QRect cRect = contentRect(); prevXScale = (qreal)cRect.width() / (qreal)m_textRect.width(); prevYScale = (qreal)cRect.height() / (qreal)m_textRect.height(); }*/ // 2. LAYOUT TEXT. find out Block rects and Document rect int minCharSide = 0; m_blockRects.clear(); m_textRect = QRect(0, 0, 0, 0); for (QTextBlock tb = m_text->begin(); tb.isValid(); tb = tb.next()) { if (!tb.isVisible()) continue; // 2.1.A. calc the Block size uniting Fragments bounding rects QRect blockRect(0, 0, 0, 0); for (QTextBlock::iterator tbIt = tb.begin(); !(tbIt.atEnd()); ++tbIt) { QTextFragment frag = tbIt.fragment(); if (!frag.isValid()) continue; QString text = frag.text(); if (text.trimmed().isEmpty()) continue; QFontMetrics metrics(frag.charFormat().font()); if (!minCharSide || metrics.height() > minCharSide) minCharSide = metrics.height(); // TODO: implement superscript / subscript (it's in charFormat's alignment) // it must be implemented in paint too QRect textRect = metrics.boundingRect(text); if (textRect.left() > 9999) continue; if (textRect.top() < blockRect.top()) blockRect.setTop(textRect.top()); if (textRect.bottom() > blockRect.bottom()) blockRect.setBottom(textRect.bottom()); int textWidth = metrics.width(text); blockRect.setWidth(blockRect.width() + textWidth); } // 2.1.B. calc the Block size of blank lines if (tb.begin() == tb.end()) { QFontMetrics metrics(tb.charFormat().font()); int textHeight = metrics.height(); blockRect.setWidth(1); blockRect.setHeight(textHeight); } // 2.2. add the Block's margins QTextBlockFormat tbFormat = tb.blockFormat(); blockRect.adjust(-tbFormat.leftMargin(), -tbFormat.topMargin(), tbFormat.rightMargin(), tbFormat.bottomMargin()); // 2.3. store the original block rect m_blockRects.append(blockRect); // 2.4. enlarge the Document rect (uniting the Block rect) blockRect.translate(0, m_textRect.bottom() - blockRect.top() + 1); if (blockRect.left() < m_textRect.left()) m_textRect.setLeft(blockRect.left()); if (blockRect.right() > m_textRect.right()) m_textRect.setRight(blockRect.right()); if (blockRect.top() < m_textRect.top()) m_textRect.setTop(blockRect.top()); if (blockRect.bottom() > m_textRect.bottom()) m_textRect.setBottom(blockRect.bottom()); } m_textRect.adjust(-m_textMargin, -m_textMargin, m_textMargin, m_textMargin); // 3. use shape-based rendering if (hasShape()) { #if 1 // more precise, but too close to the path m_shapeRect = m_shapePath.boundingRect().toRect(); #else // faster, but less precise (as it uses the controls points to determine // the path rect, instead of the path itself) m_shapeRect = m_shapePath.controlPointRect().toRect(); #endif minCharSide = qBound(10, minCharSide, 500); m_shapeRect.adjust(-minCharSide, -minCharSide, minCharSide, minCharSide); // FIXME: layout, save layouting and calc the exact size! //int w = m_shapeRect.width(); //int h = m_shapeRect.height(); //resizeContents(QRect(-w / 2, -h / 2, w, h)); resizeContents(m_shapeRect); // moveBy(m_shapeRect.left(), m_shapeRect.top()); // m_shapePath.translate(-m_shapeRect.left(), -m_shapeRect.top()); //setPos(m_shapeRect.center()); return; } // 4. resize content keeping stretch int w = (int)(prevXScale * (qreal)m_textRect.width()); int h = (int)(prevYScale * (qreal)m_textRect.height()); resizeContents(QRect(-w / 2, -h / 2, w, h)); }
//BEGIN DocumentObserver inherited methods void ThumbnailList::notifySetup( const QValueVector< KPDFPage * > & pages, bool documentChanged ) { // if there was a widget selected, save its pagenumber to restore // its selection (if available in the new set of pages) int prevPage = -1; if ( !documentChanged && m_selected ) { prevPage = m_selected->page()->number(); } // delete all the Thumbnails QValueVector<ThumbnailWidget *>::iterator tIt = m_thumbnails.begin(), tEnd = m_thumbnails.end(); for ( ; tIt != tEnd; ++tIt ) delete *tIt; m_thumbnails.clear(); m_visibleThumbnails.clear(); m_selected = 0; if ( pages.count() < 1 ) { resizeContents( 0, 0 ); return; } // show pages containing hilighted text or bookmarked ones //RESTORE THIS int flags = Settings::filterBookmarks() ? KPDFPage::Bookmark : KPDFPage::Highlight; // if no page matches filter rule, then display all pages QValueVector< KPDFPage * >::const_iterator pIt = pages.begin(), pEnd = pages.end(); bool skipCheck = true; for ( ; pIt != pEnd ; ++pIt ) //if ( (*pIt)->attributes() & flags ) if ( (*pIt)->hasHighlights( SW_SEARCH_ID ) ) skipCheck = false; // generate Thumbnails for the given set of pages int width = clipper()->width(), totalHeight = 0; for ( pIt = pages.begin(); pIt != pEnd ; ++pIt ) //if ( skipCheck || (*pIt)->attributes() & flags ) if ( skipCheck || (*pIt)->hasHighlights( SW_SEARCH_ID ) ) { ThumbnailWidget * t = new ThumbnailWidget( viewport(), *pIt, this ); t->setFocusProxy( this ); // add to the scrollview addChild( t, 0, totalHeight ); // add to the internal queue m_thumbnails.push_back( t ); // update total height (asking widget its own height) t->resizeFitWidth( width ); totalHeight += t->heightHint() + 4; if ( (*pIt)->number() == prevPage ) { m_selected = t; m_selected->setSelected( true ); } t->show(); } // update scrollview's contents size (sets scrollbars limits) resizeContents( width, totalHeight ); // request for thumbnail generation delayedRequestVisiblePixmaps( 200 ); }