[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/libs/kotext
From: Thomas Zander <zander () kde ! org>
Date: 2006-09-07 16:24:28
Message-ID: 1157646268.085835.4832.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 581816 by zander:
Make editing text and updating the caret work for all shapes, not just the first one.
M +2 -1 KoTextShape.cpp
M +0 -1 KoTextShapeData.cpp
M +0 -4 KoTextShapeData.h
M +13 -12 KoTextTool.cpp
M +1 -0 KoTextTool.h
--- trunk/koffice/libs/kotext/KoTextShape.cpp #581815:581816
@@ -50,7 +50,8 @@
}
QPointF KoTextShape::convertScreenPos(const QPointF &point) {
- return m_invMatrix.map(point);
+ QPointF p = m_invMatrix.map(point);
+ return p + QPointF(0.0, m_textShapeData->documentOffset());
}
void KoTextShape::shapeChanged(ChangeType type) {
--- trunk/koffice/libs/kotext/KoTextShapeData.cpp #581815:581816
@@ -23,7 +23,6 @@
KoTextShapeData::KoTextShapeData()
: m_ownsDocument(true)
, m_dirty(true)
-, m_textCursor(0)
, m_offset(0.0)
, m_position(-1)
, m_endPosition(-1)
--- trunk/koffice/libs/kotext/KoTextShapeData.h #581815:581816
@@ -52,9 +52,6 @@
/// return the document
QTextDocument *document();
- void setTextCursor(QTextCursor *textCursor) { m_textCursor = textCursor; }
- QTextCursor *textCursor() const { return m_textCursor; }
-
/**
* return the amount of points into the document (y) this shape will display.
*/
@@ -94,7 +91,6 @@
private:
QTextDocument *m_document;
bool m_ownsDocument, m_dirty;
- QTextCursor *m_textCursor;
double m_offset;
int m_position, m_endPosition;
};
--- trunk/koffice/libs/kotext/KoTextTool.cpp #581815:581816
@@ -32,6 +32,7 @@
KoTextTool::KoTextTool(KoCanvasBase *canvas)
: KoTool(canvas)
, m_textShape(0)
+, m_textShapeData(0)
{
}
@@ -39,8 +40,6 @@
}
void KoTextTool::paint( QPainter &painter, KoViewConverter &converter) {
- // TODO using the member m_textShape is incorrect, use m_canvas to reach the KoSelection object
- // instead and iterator over the selected shapes.
if(painter.hasClipping()) {
QRect shape = converter.documentToView(m_textShape->boundingRect()).toRect();
if(painter.clipRegion().intersect( QRegion(shape) ).isEmpty())
@@ -115,6 +114,7 @@
pen.setColor(invert);
}
painter.setPen(pen);
+ painter.translate(0, -m_textShapeData->documentOffset());
block.layout()->drawCursor(&painter, QPointF(0,0), m_caret.position() - block.position());
}
@@ -128,9 +128,8 @@
}
int KoTextTool::pointToPosition(const QPointF & point) const {
- QTextBlock block = m_caret.block();
QPointF p = m_textShape->convertScreenPos(point);
- return block.document()->documentLayout()->hitTest(p, Qt::FuzzyHit);
+ return m_caret.block().document()->documentLayout()->hitTest(p, Qt::FuzzyHit);
}
void KoTextTool::mouseDoubleClickEvent( KoPointerEvent *event ) {
@@ -218,23 +217,24 @@
void KoTextTool::activate (bool temporary) {
Q_UNUSED(temporary);
- KoShape *shape = m_canvas->shapeManager()->selection()->firstSelectedShape();
- m_textShape = dynamic_cast<KoTextShape*> (shape);
- if(m_textShape == 0) {
+ foreach(KoShape *shape, m_canvas->shapeManager()->selection()->selectedShapes().toList()) {
+ m_textShape = dynamic_cast<KoTextShape*> (shape);
+ if(m_textShape)
+ break;
+ }
+ if(m_textShape == 0) { // none found
emit sigDone();
return;
}
- KoTextShapeData *data = static_cast<KoTextShapeData*> (shape->userData());
- m_caret = QTextCursor(data->document());
- data->setTextCursor(&m_caret);
+ m_textShapeData = static_cast<KoTextShapeData*> (m_textShape->userData());
+ m_caret = QTextCursor(m_textShapeData->document());
useCursor(Qt::IBeamCursor, true);
m_textShape->repaint();
}
void KoTextTool::deactivate() {
- if(m_textShape)
- static_cast<KoTextShapeData*> (m_textShape->userData())->setTextCursor(0);
m_textShape = 0;
+ m_textShapeData = 0;
}
void KoTextTool::repaint() {
@@ -246,6 +246,7 @@
repaintRect = tl.rect();
else // layouting info was removed already :(
repaintRect = block.layout()->boundingRect();
+ repaintRect.moveTop(repaintRect.y() - m_textShapeData->documentOffset());
repaintRect.moveTopLeft(repaintRect.topLeft() + m_textShape->position());
m_canvas->updateCanvas(repaintRect);
}
--- trunk/koffice/libs/kotext/KoTextTool.h #581815:581816
@@ -52,6 +52,7 @@
private:
KoTextShape *m_textShape;
+ KoTextShapeData *m_textShapeData;
QTextCursor m_caret;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic