void Scrollbar::setFrameRect(const IntRect& rect) { // Get our window resizer rect and see if we overlap. Adjust to avoid the overlap // if necessary. IntRect adjustedRect(rect); bool overlapsResizer = false; ScrollView* view = parent(); if (view && !rect.isEmpty() && !view->windowResizerRect().isEmpty()) { IntRect resizerRect = view->convertFromContainingWindow(view->windowResizerRect()); if (rect.intersects(resizerRect)) { if (orientation() == HorizontalScrollbar) { int overlap = rect.maxX() - resizerRect.x(); if (overlap > 0 && resizerRect.maxX() >= rect.maxX()) { adjustedRect.setWidth(rect.width() - overlap); overlapsResizer = true; } } else { int overlap = rect.maxY() - resizerRect.y(); if (overlap > 0 && resizerRect.maxY() >= rect.maxY()) { adjustedRect.setHeight(rect.height() - overlap); overlapsResizer = true; } } } } if (overlapsResizer != m_overlapsResizer) { m_overlapsResizer = overlapsResizer; if (view) view->adjustScrollbarsAvoidingResizerCount(m_overlapsResizer ? 1 : -1); } Widget::setFrameRect(adjustedRect); }
Common::Rect GfxCoordAdjuster16::onControl(Common::Rect rect) { Port *oldPort = _ports->setPort((Port *)_ports->_picWind); Common::Rect adjustedRect(rect.left, rect.top, rect.right, rect.bottom); adjustedRect.clip(_ports->getPort()->rect); _ports->offsetRect(adjustedRect); _ports->setPort(oldPort); return adjustedRect; }
Key magnifyKey(const Key &key, const StyleAttributes *attributes, LayoutHelper::Orientation orientation, const QRectF &key_area_rect) { if (key.action() != Key::ActionInsert) { return Key(); } const QRect adjusted_key_rect(adjustedRect(key.rect(), key.margins())); QRect magnifier_rect(adjusted_key_rect.topLeft(), QSize(attributes->magnifierKeyWidth(orientation), attributes->magnifierKeyHeight(orientation))); magnifier_rect.translate((adjusted_key_rect.width() - magnifier_rect.width()) / 2, -1 * attributes->verticalOffset(orientation)); const QRect &mapped(magnifier_rect.translated(key_area_rect.topLeft().toPoint())); const int delta_left(mapped.left() - (key_area_rect.left() + attributes->safetyMargin(orientation))); const int delta_right((key_area_rect.x() + key_area_rect.width() - attributes->safetyMargin(orientation)) - (mapped.x() + mapped.width())); if (delta_left < 0) { magnifier_rect.translate(qAbs<int>(delta_left), 0); } else if (delta_right < 0) { magnifier_rect.translate(delta_right, 0); } Key magnifier(key); magnifier.setOrigin(magnifier_rect.topLeft()); magnifier.rArea().setBackground(attributes->magnifierKeyBackground()); magnifier.rArea().setSize(magnifier_rect.size()); magnifier.rArea().setBackgroundBorders(attributes->magnifierKeyBackgroundBorders()); magnifier.setMargins(QMargins()); return magnifier; }
PageItem* CreateMode::doCreateNewObject(void) { int z = -1; double rot, len; double wSize = canvasCurrCoord.x() - createObjectPos.x(); double hSize = canvasCurrCoord.y() - createObjectPos.y(); bool skipOneClick = (modifiers == Qt::ShiftModifier); if ((createObjectMode == modeDrawLine) || (createObjectMode == modeDrawTable2) || (createObjectMode == modeInsertPDFButton) || (createObjectMode == modeInsertPDFTextfield) || (createObjectMode == modeInsertPDFTextfield) || (createObjectMode == modeInsertPDFCheckbox) || (createObjectMode == modeInsertPDFCombobox) || (createObjectMode == modeInsertPDFListbox) || (createObjectMode == modeInsertPDFTextAnnotation) || (createObjectMode == modeInsertPDFLinkAnnotation) || (createObjectMode == modeInsertPDF3DAnnotation) || (createObjectMode == modeInsertPDFRadioButton)) { skipOneClick = false; } if (!skipOneClick) { if ((!m_view->moveTimerElapsed()) || ((fabs(wSize) < 2.0) && (fabs(hSize) < 2.0))) { if (!doOneClick(createObjectPos, canvasCurrCoord)) { return NULL; } } } wSize = canvasCurrCoord.x() - createObjectPos.x(); hSize = canvasCurrCoord.y() - createObjectPos.y(); //Lock Height to Width for Control Modifier for final item creation if (createObjectMode != modeDrawLine) { if (modifiers == Qt::ControlModifier) hSize = wSize; } PageItem *newObject = NULL, *currItem = NULL; // FIXME for modeDrawLine QRectF createObjectRect(createObjectPos.x(), createObjectPos.y(), wSize, hSize); if (createObjectMode != modeDrawLine) { createObjectRect = createObjectRect.normalized(); if (modifiers==Qt::ControlModifier) { //bottom right and upper left are ok //upper right if (canvasCurrCoord.y() < createObjectPos.y() && createObjectPos.x()<canvasCurrCoord.x()) createObjectRect.translate(0.0, -createObjectRect.height()); //bottom left if (canvasCurrCoord.x()<createObjectPos.x() && canvasCurrCoord.y()>createObjectPos.y()) createObjectRect.translate(0.0, createObjectRect.height()); } } double Rxp = createObjectRect.x(); double Ryp = createObjectRect.y(); double Rxpd = createObjectRect.width(); double Rypd = createObjectRect.height(); switch (createObjectMode) { case modeDrawShapes: switch (createObjectSubMode) { case 0: if (modifiers == Qt::ShiftModifier) z = m_doc->itemAddArea(PageItem::Polygon, PageItem::Rectangle, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().shapeLineColor); else z = m_doc->itemAdd(PageItem::Polygon, PageItem::Rectangle, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().shapeLineColor); m_doc->Items->at(z)->FrameType = 0; break; case 1: if (modifiers == Qt::ShiftModifier) z = m_doc->itemAddArea(PageItem::Polygon, PageItem::Ellipse, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().shapeLineColor); else z = m_doc->itemAdd(PageItem::Polygon, PageItem::Ellipse, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().shapeLineColor); m_doc->Items->at(z)->FrameType = 1; break; default: if (modifiers == Qt::ShiftModifier) z = m_doc->itemAddArea(PageItem::Polygon, PageItem::Unspecified, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().shapeLineColor); else z = m_doc->itemAdd(PageItem::Polygon, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().shapeLineColor); m_doc->Items->at(z)->SetFrameShape(m_doc->ValCount, m_doc->ShapeValues); m_doc->adjustItemSize(m_doc->Items->at(z)); m_doc->setRedrawBounding(m_doc->Items->at(z)); m_doc->Items->at(z)->FrameType = createObjectSubMode + 2; break; } break; case modeDrawLine: Rxp = createObjectPos.x(); Ryp = createObjectPos.y(); m_doc->ApplyGuides(&Rxp, &Ryp); m_doc->ApplyGuides(&Rxp, &Ryp,true); rot = xy2Deg(Rxpd, Rypd); if (rot < 0.0) rot += 360; len = qMax(0.01, distance(Rxpd, Rypd)); z = m_doc->itemAdd(PageItem::Line, PageItem::Unspecified, Rxp, Ryp, len, 1, m_doc->itemToolPrefs().lineWidth, CommonStrings::None, m_doc->itemToolPrefs().lineColor); m_doc->Items->at(z)->setRotation(rot); m_doc->Items->at(z)->setRedrawBounding(); break; case modeDrawLatex: if (modifiers == Qt::ShiftModifier) z = m_doc->itemAddArea(PageItem::LatexFrame, PageItem::Unspecified, Rxp, Ryp, 1, m_doc->itemToolPrefs().imageFillColor, m_doc->itemToolPrefs().imageStrokeColor); else z = m_doc->itemAdd(PageItem::LatexFrame, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().imageFillColor, m_doc->itemToolPrefs().imageStrokeColor); break; case modeDrawImage: if (modifiers == Qt::ShiftModifier) z = m_doc->itemAddArea(PageItem::ImageFrame, PageItem::Unspecified, Rxp, Ryp, 1, m_doc->itemToolPrefs().imageFillColor, m_doc->itemToolPrefs().imageStrokeColor); else z = m_doc->itemAdd(PageItem::ImageFrame, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().imageFillColor, m_doc->itemToolPrefs().imageStrokeColor); break; case modeDrawText: if (modifiers == Qt::ShiftModifier) z = m_doc->itemAddArea(PageItem::TextFrame, PageItem::Unspecified, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, CommonStrings::None, m_doc->itemToolPrefs().textFont); else z = m_doc->itemAdd(PageItem::TextFrame, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, CommonStrings::None, m_doc->itemToolPrefs().textFont); break; case modeDrawRegularPolygon: if (modifiers == Qt::ShiftModifier) z = m_doc->itemAddArea(PageItem::RegularPolygon, PageItem::Unspecified, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().lineColor); else z = m_doc->itemAdd(PageItem::RegularPolygon, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().lineColor); break; case modeDrawArc: if (modifiers == Qt::ShiftModifier) z = m_doc->itemAddArea(PageItem::Arc, PageItem::Unspecified, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().lineColor); else z = m_doc->itemAdd(PageItem::Arc, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().shapeFillColor, m_doc->itemToolPrefs().lineColor); m_doc->setRedrawBounding(m_doc->Items->at(z)); break; case modeDrawSpiral: if (modifiers == Qt::ShiftModifier) z = m_doc->itemAddArea(PageItem::Spiral, PageItem::Unspecified, Rxp, Ryp, m_doc->itemToolPrefs().shapeLineWidth, CommonStrings::None, m_doc->itemToolPrefs().lineColor); else z = m_doc->itemAdd(PageItem::Spiral, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, CommonStrings::None, m_doc->itemToolPrefs().lineColor); m_doc->adjustItemSize(m_doc->Items->at(z)); m_doc->setRedrawBounding(m_doc->Items->at(z)); break; case modeInsertPDFButton: case modeInsertPDFRadioButton: case modeInsertPDFTextfield: case modeInsertPDFCheckbox: case modeInsertPDFCombobox: case modeInsertPDFListbox: case modeInsertPDFTextAnnotation: case modeInsertPDFLinkAnnotation: z = m_doc->itemAdd(PageItem::TextFrame, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, CommonStrings::None, m_doc->itemToolPrefs().textColor); currItem = m_doc->Items->at(z); currItem->setIsAnnotation(true); currItem->AutoName = false; switch (m_doc->appMode) { case modeInsertPDFButton: currItem->annotation().setType(Annotation::Button); currItem->annotation().setFlag(Annotation::Flag_PushButton); currItem->setItemName( CommonStrings::itemName_PushButton + QString("%1").arg(m_doc->TotalItems)); break; case modeInsertPDFRadioButton: currItem->annotation().setType(Annotation::RadioButton); currItem->annotation().setFlag(Annotation::Flag_Radio | Annotation::Flag_NoToggleToOff); currItem->setItemName( CommonStrings::itemName_RadioButton + QString("%1").arg(m_doc->TotalItems)); break; case modeInsertPDFTextfield: currItem->annotation().setType(Annotation::Textfield); currItem->setItemName( CommonStrings::itemName_TextField + QString("%1").arg(m_doc->TotalItems)); break; case modeInsertPDFCheckbox: currItem->annotation().setType(Annotation::Checkbox); currItem->setItemName( CommonStrings::itemName_CheckBox + QString("%1").arg(m_doc->TotalItems)); break; case modeInsertPDFCombobox: currItem->annotation().setType(Annotation::Combobox); currItem->annotation().setFlag(Annotation::Flag_Combo); currItem->setItemName( CommonStrings::itemName_ComboBox + QString("%1").arg(m_doc->TotalItems)); break; case modeInsertPDFListbox: currItem->annotation().setType(Annotation::Listbox); currItem->setItemName( CommonStrings::itemName_ListBox + QString("%1").arg(m_doc->TotalItems)); break; case modeInsertPDFTextAnnotation: currItem->annotation().setType(Annotation::Text); currItem->setItemName( CommonStrings::itemName_TextAnnotation + QString("%1").arg(m_doc->TotalItems)); break; case modeInsertPDFLinkAnnotation: currItem->annotation().setType(Annotation::Link); currItem->annotation().setZiel(m_doc->currentPage()->pageNr()); currItem->annotation().setAction("0 0"); currItem->setItemName( CommonStrings::itemName_LinkAnnotation + QString("%1").arg(m_doc->TotalItems)); currItem->setTextFlowMode(PageItem::TextFlowDisabled); break; } break; case modeDrawTable2: // TODO: Figure out what these conditions actually do. if ((m_doc->m_Selection->count() == 0) && (m_view->HaveSelRect) && (!m_view->MidButt)) { m_view->HaveSelRect = false; // Calculate table rectangle. FRect tableRect = adjustedRect(canvasPressCoord, canvasCurrCoord); if (tableRect.width() < 6 || tableRect.height() < 6) { // Ignore tiny tables. m_view->requestMode(submodePaintingDone); break; } // Show table insert dialog. // qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); InsertTable *dia = new InsertTable(m_view, static_cast<int>(tableRect.height()/6), static_cast<int>(tableRect.width()/6)); if (!dia->exec()) { m_view->requestMode(submodePaintingDone); delete dia; dia = 0; break; } int numRows = dia->Rows->value(); int numColumns = dia->Cols->value(); delete dia; dia = 0; // Add the table item. // TODO: This should be done in an undo transaction. m_doc->dontResize = true; z = m_doc->itemAdd(PageItem::Table, PageItem::Unspecified, tableRect.x(), tableRect.y(), tableRect.width(), tableRect.height(), 0, // Unused. CommonStrings::None, // Unused. CommonStrings::None); // Unused. PageItem_Table *table = m_doc->Items->at(z)->asTable(); table->insertRows(0, numRows - 1); table->insertColumns(0, numColumns - 1); table->adjustTableToFrame(); table->adjustFrameToTable(); m_doc->dontResize = false; m_doc->setRedrawBounding(table); } break; case modeInsertPDF3DAnnotation: if (modifiers == Qt::ShiftModifier) { z = m_doc->itemAddArea(PageItem::OSGFrame, PageItem::Unspecified, Rxp, Ryp, 1, m_doc->itemToolPrefs().imageFillColor, m_doc->itemToolPrefs().imageStrokeColor); } else { z = m_doc->itemAdd(PageItem::OSGFrame, PageItem::Unspecified, Rxp, Ryp, Rxpd, Rypd, m_doc->itemToolPrefs().shapeLineWidth, m_doc->itemToolPrefs().imageFillColor, m_doc->itemToolPrefs().imageStrokeColor); } currItem = m_doc->Items->at(z); currItem->setIsAnnotation(true); currItem->AutoName = false; currItem->annotation().setType(Annotation::Annot3D); currItem->setItemName( tr("3DAnnot") + QString("%1").arg(m_doc->TotalItems)); break; } if (z >= 0) { SetupDrawNoResize(z); newObject = m_doc->Items->at(z); newObject->ContourLine = newObject->PoLine.copy(); } return newObject; }
bool KSharedPixmap::x11Event(XEvent *event) { if (event->type != SelectionNotify) return false; XSelectionEvent *ev = &event->xselection; if (ev->selection != d->selection) return false; if ((ev->target != d->pixmap) || (ev->property == None)) { kdWarning(270) << k_funcinfo << "illegal selection notify event.\n"; d->selection = None; emit done(false); return true; } // Read pixmap handle from ev->property int dummy, format; unsigned long nitems, ldummy; unsigned char *pixmap_id = 0; Atom type; XGetWindowProperty(qt_xdisplay(), winId(), ev->property, 0, 1, false, d->pixmap, &type, &format, &nitems, &ldummy, &pixmap_id); if (nitems != 1 || !pixmap_id) { kdWarning(270) << k_funcinfo << "could not read property, nitems = " << nitems << "\n"; emit done(false); return true; } Window root; unsigned int width, height, udummy; void *drawable_id = (void *) pixmap_id; Drawable pixmap = *(Drawable*) drawable_id; Status status = XGetGeometry(qt_xdisplay(), pixmap, &root, &dummy, &dummy, &width, &height, &udummy, &udummy); if (status == BadDrawable) return false; if (d->rect.isEmpty()) { QPixmap::resize(width, height); XCopyArea(qt_xdisplay(), pixmap, ((KPixmap*)this)->handle(), qt_xget_temp_gc(qt_xscreen(), false), 0, 0, width, height, 0, 0); XFree(pixmap_id); XDeleteProperty(qt_xdisplay(), winId(), ev->property); d->selection = None; emit done(true); return true; } // Do some more processing here: Generate a tile that can be used as a // background tile for the rectangle "rect". //Check for origin off screen QPoint origin(0, 0); if( d->rect.topLeft().x() < 0 || d->rect.topLeft().y() < 0 ) { //Save the offset and relocate the rect corners QPoint tl = d->rect.topLeft(); QPoint br = d->rect.bottomRight(); if( tl.x() < 0 ) { origin.setX( abs( tl.x() ) ); tl.setX( 0 ); } if( tl.y() < 0 ) { origin.setY( abs( tl.y() ) ); tl.setY( 0 ); } QRect adjustedRect( tl, br ); d->rect = adjustedRect; } unsigned w = d->rect.width(), h = d->rect.height(); unsigned tw = QMIN(width, w), th = QMIN(height, h); unsigned xa = d->rect.x() % width, ya = d->rect.y() % height; unsigned t1w = QMIN(width-xa,tw), t1h = QMIN(height-ya,th); QPixmap::resize( tw+origin.x(), th+origin.y() ); XCopyArea(qt_xdisplay(), pixmap, ((KPixmap*)this)->handle(), qt_xget_temp_gc(qt_xscreen(), false), xa, ya, t1w+origin.x(), t1h+origin.y(), origin.x(), origin.y() ); XCopyArea(qt_xdisplay(), pixmap, ((KPixmap*)this)->handle(), qt_xget_temp_gc(qt_xscreen(), false), 0, ya, tw-t1w, t1h, t1w, 0); XCopyArea(qt_xdisplay(), pixmap, ((KPixmap*)this)->handle(), qt_xget_temp_gc(qt_xscreen(), false), xa, 0, t1w, th-t1h, 0, t1h); XCopyArea(qt_xdisplay(), pixmap, ((KPixmap*)this)->handle(), qt_xget_temp_gc(qt_xscreen(), false), 0, 0, tw-t1w, th-t1h, t1w, t1h); XFree(pixmap_id); d->selection = None; XDeleteProperty(qt_xdisplay(), winId(), ev->property); emit done(true); return true; }