19#include "kivio_canvas.h"
20#include "kivio_page.h"
22#include "kivio_view.h"
25#include "kivio_icon_view.h"
26#include "kivio_stencil.h"
27#include "kivio_stencil_spawner.h"
28#include "kivio_stencil_spawner_info.h"
29#include "kivio_stackbar.h"
30#include "kivio_screen_painter.h"
31#include "kivio_grid_data.h"
32#include "kivio_layer.h"
34#include "kivio_pluginmanager.h"
38#include <tdemessagebox.h>
41#include <KoZoomHandler.h>
46#include <tdeapplication.h>
52#include <tqscrollbar.h>
58KivioCanvas::KivioCanvas( TQWidget *par, KivioView* view, KivioDoc* doc, TQScrollBar* vs, TQScrollBar* hs)
59: TQWidget(par,
"KivioCanvas", WResizeNoErase | WRepaintNoErase),
64 m_guides(view, view->zoomHandler())
66 setBackgroundMode(NoBackground);
68 setMouseTracking(
true);
69 setFocusPolicy(TQWidget::StrongFocus);
72 m_showConnectorTargets =
false;
73 delegateThisEvent =
true;
75 m_pVertScrollBar->setLineStep(1);
76 m_pHorzScrollBar->setLineStep(1);
79 m_pVertScrollBar->setPageStep(10);
80 m_pHorzScrollBar->setPageStep(10);
82 connect(m_pVertScrollBar, TQ_SIGNAL(valueChanged(
int)), TQ_SLOT(scrollV(
int)));
83 connect( m_pHorzScrollBar, TQ_SIGNAL(valueChanged(
int)), TQ_SLOT(scrollH(
int)));
94 m_pasteMoving =
false;
96 m_buffer =
new TQPixmap();
99 unclippedSpawnerPainter = 0L;
100 unclippedPainter = 0L;
102 m_borderTimer =
new TQTimer(
this);
103 connect(m_borderTimer,TQ_SIGNAL(timeout()),TQ_SLOT(borderTimerTimeout()));
106KivioCanvas::~KivioCanvas()
109 delete m_borderTimer;
110 delete unclippedPainter;
113KivioPage* KivioCanvas::findPage(
const TQString& _name )
115 return m_pDoc->map()->findPage( _name );
118const KivioPage* KivioCanvas::activePage()
const
120 return m_pView->activePage();
123KivioPage* KivioCanvas::activePage()
125 return m_pView->activePage();
128void KivioCanvas::scrollH(
int value )
131 int dx = m_iXOffset - value;
135 bitBlt(m_buffer, dx, 0, m_buffer);
138 emit visibleAreaChanged();
141void KivioCanvas::scrollV(
int value )
144 int dy = m_iYOffset - value;
148 bitBlt(m_buffer, 0, dy, m_buffer);
151 emit visibleAreaChanged();
154void KivioCanvas::scrollDx(
int dx )
159 int value = m_iXOffset - dx;
160 m_pHorzScrollBar->setValue(value);
163void KivioCanvas::scrollDy(
int dy )
168 int value = m_iYOffset - dy;
169 m_pVertScrollBar->setValue(value);
172void KivioCanvas::resizeEvent( TQResizeEvent* )
174 m_buffer->resize(size());
177 emit visibleAreaChanged();
180void KivioCanvas::wheelEvent( TQWheelEvent* ev )
186 if(ev->state() == ControlButton) {
188 }
else if(ev->state() == ShiftButton) {
189 m_pVertScrollBar->setValue(m_pVertScrollBar->value() - height());
191 m_pVertScrollBar->setValue(m_pVertScrollBar->value() - 30);
196 if(ev->state() == ControlButton) {
198 }
else if(ev->state() == ShiftButton) {
199 m_pVertScrollBar->setValue(m_pVertScrollBar->value() + height());
201 m_pVertScrollBar->setValue(m_pVertScrollBar->value() + 30);
206void KivioCanvas::setUpdatesEnabled(
bool isUpdate )
210 TQWidget::setUpdatesEnabled(isUpdate);
219 emit visibleAreaChanged();
227void KivioCanvas::zoomIn(
const TQPoint &p)
229 setUpdatesEnabled(
false);
230 KoPoint p0 = mapFromScreen(p);
231 m_pView->viewZoom(m_pView->zoomHandler()->zoom() + 25);
232 TQPoint p1 = mapToScreen(p0);
233 scrollDx(-p1.x()+p.x());
234 scrollDy(-p1.y()+p.y());
235 setUpdatesEnabled(
true);
238void KivioCanvas::zoomOut(
const TQPoint &p)
240 setUpdatesEnabled(
false);
241 KoPoint p0 = mapFromScreen(p);
242 int newZoom = m_pView->zoomHandler()->zoom() - 25;
245 m_pView->viewZoom(newZoom);
246 TQPoint p1 = mapToScreen(p0);
247 scrollDx(-p1.x()+p.x());
248 scrollDy(-p1.y()+p.y());
250 setUpdatesEnabled(
true);
253void KivioCanvas::paintEvent( TQPaintEvent* ev )
255 if ( m_pDoc->isLoading() || !activePage() )
258 KivioPage* page = activePage();
261 painter.begin(m_buffer);
263 KoPageLayout pl = page->paperLayout();
264 int pw = m_pView->zoomHandler()->zoomItX(pl.ptWidth);
265 int ph = m_pView->zoomHandler()->zoomItY(pl.ptHeight);
266 TQRect fillRect(0, 0, pw, ph);
267 TQRect paintRect = ev->rect();
268 TQRegion grayRegion(paintRect);
269 grayRegion.translate(m_iXOffset - m_pageOffsetX, m_iYOffset - m_pageOffsetY);
270 grayRegion -= fillRect;
271 grayRegion.translate(-m_iXOffset + m_pageOffsetX, -m_iYOffset + m_pageOffsetY);
276 painter.setClipRegion(grayRegion, TQPainter::CoordPainter);
277 painter.setPen(TQt::NoPen);
278 painter.fillRect(grayRegion.boundingRect(), TDEApplication::palette().active().brush(TQColorGroup::Mid));
282 painter.translate(-m_iXOffset + m_pageOffsetX, -m_iYOffset +m_pageOffsetY);
283 painter.fillRect(fillRect, white);
286 if(m_pDoc->grid().isShow) {
287 KoPoint topLeft(0, 0);
288 KoPoint bottomRight(pl.ptWidth, pl.ptHeight);
289 TQPoint zoomedTL = m_pView->zoomHandler()->zoomPoint(topLeft);
290 TQPoint zoomedBR = m_pView->zoomHandler()->zoomPoint(bottomRight);
292 KoSize freq = m_pDoc->grid().freq;
294 painter.setPen(m_pDoc->grid().color);
296 double x = tqRound(topLeft.x() / freq.width()) * freq.width();
299 while(x <= bottomRight.x()) {
300 zoomed = m_pView->zoomHandler()->zoomItX(x);
301 painter.drawLine(zoomed, zoomedTL.y(), zoomed, zoomedBR.y());
305 double y = tqRound(topLeft.y() / freq.height()) * freq.height();
307 while(y <= bottomRight.y()) {
308 zoomed = m_pView->zoomHandler()->zoomItY(y);
309 painter.drawLine(zoomedTL.x(), zoomed, zoomedBR.x(), zoomed);
314 if(m_pView->isShowPageMargins()) {
315 int ml = m_pView->zoomHandler()->zoomItX(pl.ptLeft);
316 int mt = m_pView->zoomHandler()->zoomItY(pl.ptTop);
317 int mr = m_pView->zoomHandler()->zoomItX(pl.ptRight);
318 int mb = m_pView->zoomHandler()->zoomItY(pl.ptBottom);
321 painter.setPen(TQPen(
"#C7C7C7",1,SolidLine));
322 painter.drawRect(ml,mt,pw-ml-mr,ph-mt-mb);
327 painter.setPen(black);
328 painter.fillRect(pw, 3, 5, ph, gray);
329 painter.fillRect(3, ph, pw, 3, gray);
330 painter.drawRect(0, 0, pw, ph);
333 KivioScreenPainter kpainter;
334 kpainter.start(m_buffer);
335 kpainter.translateBy(-m_iXOffset + m_pageOffsetX, -m_iYOffset + m_pageOffsetY);
336 m_pDoc->paintContent(kpainter, paintRect,
false, page, TQPoint(0, 0), m_pView->zoomHandler(), showConnectorTargets(),
true);
339 if(m_pView->isShowGuides()) {
340 m_guides.paintGuides(painter);
345 bitBlt(
this, paintRect.left(), paintRect.top(), m_buffer,
346 paintRect.left(), paintRect.top(), paintRect.width(), paintRect.height());
349void KivioCanvas::updateScrollBars()
355 KoPageLayout pl = activePage()->paperLayout();
356 int pw = m_pView->zoomHandler()->zoomItX(pl.ptWidth);
357 int ph = m_pView->zoomHandler()->zoomItY(pl.ptHeight);
359 m_pScrollX = TQMAX(pw - width(), 0);
360 m_pScrollY = TQMAX(ph - height(), 0);
362 m_pHorzScrollBar->setRange(0, m_pScrollX);
363 if ( m_pHorzScrollBar->value() > m_pHorzScrollBar->maxValue() ||
364 m_pHorzScrollBar->value() < m_pHorzScrollBar->minValue() )
366 m_pHorzScrollBar->setValue(0);
369 m_pVertScrollBar->setRange(0, m_pScrollY);
370 if ( m_pVertScrollBar->value() > m_pVertScrollBar->maxValue() ||
371 m_pVertScrollBar->value() < m_pVertScrollBar->minValue() )
373 m_pVertScrollBar->setValue(0);
376 m_pVertScrollBar->setPageStep( height() );
377 m_pHorzScrollBar->setPageStep( width() );
382 m_pageOffsetX = (width() - pw) / 2;
388 m_pageOffsetY = (height() - ph) / 2;
392TQSize KivioCanvas::actualSize()
const
394 return TQSize(m_pScrollX, m_pScrollY);
397bool KivioCanvas::event( TQEvent* e )
399 bool f = TQWidget::event(e);
401 if (m_pView->pluginManager() && delegateThisEvent) {
402 f = m_pView->pluginManager()->delegateEvent(e);
405 delegateThisEvent =
true;
409void KivioCanvas::enterEvent( TQEvent* )
413void KivioCanvas::leaveEvent( TQEvent* )
415 m_pView->setMousePos(-1, -1);
418void KivioCanvas::mousePressEvent(TQMouseEvent* e)
420 if(!m_pDoc->isReadWrite())
430 if(m_pView->isShowGuides() && (!pluginManager || (pluginManager->
defaultTool() == pluginManager->
activeTool()))) {
431 if(m_guides.mousePressEvent(e)) {
432 delegateThisEvent =
false;
438void KivioCanvas::mouseReleaseEvent(TQMouseEvent* e)
440 if(!m_pDoc->isReadWrite())
445 if(view()->isShowGuides() && (!pluginManager || (pluginManager->
defaultTool() == pluginManager->
activeTool()))) {
446 if(m_guides.mouseReleaseEvent(e)) {
447 delegateThisEvent =
false;
453void KivioCanvas::mouseMoveEvent(TQMouseEvent* e)
455 if(!m_pDoc->isReadWrite())
459 continuePasteMoving(e->pos());
463 if(m_pView->isShowGuides() && (!pluginManager || (pluginManager->
defaultTool() == pluginManager->
activeTool()))) {
464 delegateThisEvent = !m_guides.mouseMoveEvent(e);
468 lastPoint = e->pos();
469 view()->setMousePos(lastPoint.x(), lastPoint.y());
472TQPoint KivioCanvas::mapToScreen(
const KoPoint& pos)
475 int x = m_pView->zoomHandler()->zoomItX(pos.x());
476 int y = m_pView->zoomHandler()->zoomItY(pos.y());
478 p.setX( x - m_iXOffset + m_pageOffsetX);
479 p.setY( y - m_iYOffset + m_pageOffsetY);
484KoPoint KivioCanvas::mapFromScreen(
const TQPoint & pos )
486 int x = pos.x() + m_iXOffset - m_pageOffsetX;
487 int y = pos.y() + m_iYOffset - m_pageOffsetY;
488 double xf = m_pView->zoomHandler()->unzoomItX(x);
489 double yf = m_pView->zoomHandler()->unzoomItY(y);
495void KivioCanvas::startRectDraw(
const TQPoint &p, RectType )
497 currRect = TQRect( 0, 0, -1, -1 );
500 oldRectValid =
false;
501 beginUnclippedPainter();
503 currRect = TQRect( rectAnchor, TQPoint(0,0) );
505 m_borderTimer->start(100);
508void KivioCanvas::continueRectDraw(
const TQPoint &p, RectType )
512 TQRect r( rectAnchor, p2 );
516 unclippedPainter->drawRect( currRect );
517 if ( r.width() > 1 || r.height() > 1 ) {
520 unclippedPainter->drawRect( currRect );
522 oldRectValid =
false;
526void KivioCanvas::endRectDraw()
528 m_borderTimer->stop();
530 if ( !unclippedPainter )
534 unclippedPainter->drawRect( currRect );
536 endUnclippedPainter();
547void KivioCanvas::startSpawnerDragDraw(
const TQPoint &p )
549 currRect = TQRect( 0, 0, -1, -1 );
551 KivioStencilSpawner *pSpawner = KivioIconView::curDragSpawner();
559 kdDebug(43000) <<
"KivioCanvas::startSpawnerDragDraw() - m_pDragStencil still exists. BUG!" << endl;
560 delete m_pDragStencil;
565 KoPoint qp = mapFromScreen( p );
569 m_pDragStencil = pSpawner->newStencil();
570 m_pDragStencil->setPosition( qp.x(), qp.y() );
576 beginUnclippedSpawnerPainter();
579 unclippedSpawnerPainter->painter()->save();
580 unclippedSpawnerPainter->painter()->translate(-m_iXOffset + m_pageOffsetX, -m_iYOffset + m_pageOffsetY);
584 m_dragStencilData.painter = unclippedSpawnerPainter;
585 m_dragStencilData.zoomHandler = m_pView->zoomHandler();
588 m_pDragStencil->paintOutline( &m_dragStencilData );
590 unclippedSpawnerPainter->painter()->restore();
596void KivioCanvas::continueSpawnerDragDraw(
const TQPoint &p )
598 bool snappedX, snappedY;
601 unclippedSpawnerPainter->painter()->save();
602 unclippedSpawnerPainter->painter()->translate(-m_iXOffset + m_pageOffsetX, -m_iYOffset + m_pageOffsetY);
607 m_pDragStencil->paintOutline( &m_dragStencilData );
611 KoPoint orig = mapFromScreen(p);
612 KoPoint qp = snapToGrid( orig );
616 m_pDragStencil->setPosition( qp.x(), qp.y() );
619 qp.setCoords(orig.x() + m_pDragStencil->w(), orig.y() + m_pDragStencil->h());
620 qp = snapToGuides(qp, snappedX, snappedY);
623 m_pDragStencil->setX(qp.x() - m_pDragStencil->w());
627 m_pDragStencil->setY(qp.y() - m_pDragStencil->h());
630 qp.setCoords(orig.x() + (m_pDragStencil->w() / 2.0), orig.y() + (m_pDragStencil->h() / 2.0));
631 qp = snapToGuides(qp, snappedX, snappedY);
634 m_pDragStencil->setX(qp.x() - (m_pDragStencil->w() / 2.0));
638 m_pDragStencil->setY(qp.y() - (m_pDragStencil->h() / 2.0));
641 qp.setCoords(orig.x(), orig.y());
642 qp = snapToGuides(qp, snappedX, snappedY);
645 m_pDragStencil->setX(qp.x());
649 m_pDragStencil->setY(qp.y());
654 m_pDragStencil->paintOutline( &m_dragStencilData );
655 unclippedSpawnerPainter->painter()->restore();
663void KivioCanvas::endSpawnerDragDraw()
666 if ( !unclippedSpawnerPainter )
672 unclippedSpawnerPainter->painter()->save();
673 unclippedSpawnerPainter->painter()->translate(-m_iXOffset + m_pageOffsetX, -m_iYOffset + m_pageOffsetY);
674 m_pDragStencil->paintOutline( &m_dragStencilData );
675 unclippedSpawnerPainter->painter()->restore();
679 endUnclippedSpawnerPainter();
684 delete m_pDragStencil;
695void KivioCanvas::beginUnclippedSpawnerPainter()
698 endUnclippedSpawnerPainter();
701 bool unclipped = testWFlags( WPaintUnclipped );
702 setWFlags( WPaintUnclipped );
706 unclippedSpawnerPainter =
new KivioScreenPainter();
709 unclippedSpawnerPainter->start(
this);
713 clearWFlags( WPaintUnclipped );
717 unclippedSpawnerPainter->painter()->setRasterOp( NotROP );
718 unclippedSpawnerPainter->painter()->setPen( TQColor(0,0,250) );
726void KivioCanvas::endUnclippedSpawnerPainter()
728 if( unclippedSpawnerPainter )
730 unclippedSpawnerPainter->stop();
731 delete unclippedSpawnerPainter;
732 unclippedSpawnerPainter = 0L;
736void KivioCanvas::beginUnclippedPainter()
738 endUnclippedPainter();
739 bool unclipped = testWFlags( WPaintUnclipped );
741 setWFlags( WPaintUnclipped );
742 unclippedPainter =
new TQPainter;
743 unclippedPainter->begin(
this );
746 clearWFlags( WPaintUnclipped );
748 unclippedPainter->setRasterOp( NotROP );
749 unclippedPainter->setPen( TQPen(blue,1,DotLine) );
752void KivioCanvas::endUnclippedPainter()
754 if ( unclippedPainter )
756 unclippedPainter->end();
757 delete unclippedPainter;
758 unclippedPainter = 0;
762void KivioCanvas::borderTimerTimeout()
764 TQPoint p = mapFromGlobal(TQCursor::pos());
770 int vpos = m_pVertScrollBar->value();
771 int vmax = m_pVertScrollBar->maxValue();
772 int vmin = m_pVertScrollBar->minValue();
774 int hpos = m_pHorzScrollBar->value();
775 int hmax = m_pHorzScrollBar->maxValue();
776 int hmin = m_pHorzScrollBar->minValue();
778 if ( p.x() < 0 && hpos > hmin ) {
779 dx = TQMIN(d,hpos-hmin);
780 r.setRight(r.right()+dx);
781 rectAnchor.setX(rectAnchor.x()+dx);
784 if ( p.y() < 0 && vpos > vmin ) {
785 dy = TQMIN(d,vpos-vmin);
786 r.setBottom(r.bottom()+dy);
787 rectAnchor.setY(rectAnchor.y()+dy);
790 if ( p.x() > width() && hpos < hmax ) {
791 dx = -TQMIN(d,hmax-hpos);
792 r.setLeft(r.left()+dx);
793 rectAnchor.setX(rectAnchor.x()+dx);
796 if ( p.y() > height() && vpos < vmax ) {
797 dy = -TQMIN(d,vmax-vpos);
798 r.setTop(r.top()+dy);
799 rectAnchor.setY(rectAnchor.y()+dy);
802 if ( dx != 0 || dy != 0 ) {
803 unclippedPainter->drawRect( currRect );
806 unclippedPainter->drawRect( r );
822void KivioCanvas::dragEnterEvent( TQDragEnterEvent *e )
824 if( e->provides(
"kivio/stencilSpawner") )
827 startSpawnerDragDraw( e->pos() );
828 activePage()->unselectAllStencils();
829 updateAutoGuideLines();
844void KivioCanvas::dragMoveEvent( TQDragMoveEvent *e )
847 if( e->provides(
"kivio/stencilSpawner") )
850 continueSpawnerDragDraw( e->pos() );
865void KivioCanvas::dropEvent( TQDropEvent *e )
868 endSpawnerDragDraw();
871 KivioStencilSpawner *pSpawner = KivioIconView::curDragSpawner();
876 TQPoint pos = e->pos();
877 KoPoint pagePoint = snapToGrid(mapFromScreen( pos ));
878 view()->addStencilFromSpawner(pSpawner, pagePoint.x(), pagePoint.y());
892void KivioCanvas::dragLeaveEvent( TQDragLeaveEvent * )
894 endSpawnerDragDraw();
899void KivioCanvas::drawSelectedStencilsXOR()
902 if ( !unclippedSpawnerPainter )
906 unclippedSpawnerPainter->painter()->save();
907 unclippedSpawnerPainter->painter()->translate(-m_iXOffset + m_pageOffsetX, -m_iYOffset + m_pageOffsetY);
911 m_dragStencilData.painter = unclippedSpawnerPainter;
912 m_dragStencilData.zoomHandler = m_pView->zoomHandler();
914 KivioStencil *pStencil = activePage()->selectedStencils()->first();
917 pStencil->paintOutline( &m_dragStencilData );
918 pStencil->paintSelectionHandles( &m_dragStencilData );
920 pStencil = activePage()->selectedStencils()->next();
923 unclippedSpawnerPainter->painter()->restore();
926void KivioCanvas::drawStencilXOR( KivioStencil *pStencil )
929 if ( !unclippedSpawnerPainter )
933 unclippedSpawnerPainter->painter()->save();
934 unclippedSpawnerPainter->painter()->translate(-m_iXOffset + m_pageOffsetX, -m_iYOffset + m_pageOffsetY);
938 m_dragStencilData.painter = unclippedSpawnerPainter;
939 m_dragStencilData.zoomHandler = m_pView->zoomHandler();
941 pStencil->paintOutline( &m_dragStencilData );
942 pStencil->paintSelectionHandles( &m_dragStencilData );
944 unclippedSpawnerPainter->painter()->restore();
947void KivioCanvas::keyPressEvent( TQKeyEvent *e )
949 if(view()->isShowGuides() && m_guides.keyPressEvent(e)) {
954KoPoint KivioCanvas::snapToGridAndGuides(
const KoPoint& point)
960 bool snappedX, snappedY;
961 KoPoint guidePoint = snapToGuides(point, snappedX, snappedY);
964 p.setX(guidePoint.x());
968 p.setY(guidePoint.y());
974KoPoint KivioCanvas::snapToGrid(
const KoPoint& point)
976 if (!m_pDoc->grid().isSnap)
981 KoSize dist = m_pDoc->grid().snap;
982 KoSize freq = m_pDoc->grid().freq;
984 double dx = tqRound(p.x() / freq.width());
985 double dy = tqRound(p.y() / freq.height());
987 double distx = TQABS(p.x() - (freq.width() * dx));
988 double disty = TQABS(p.y() - (freq.height() * dy));
990 if(distx < dist.width()) {
991 p.setX(freq.width() * dx);
994 if(disty < dist.height()) {
995 p.setY(freq.height() * dy);
1001KoPoint KivioCanvas::snapToGuides(
const KoPoint& point,
bool &snappedX,
bool &snappedY)
1007 if (m_pView->isSnapGuides())
1009 KoGuides::SnapStatus status = KoGuides::SNAP_NONE;
1011 m_guides.snapToGuideLines(p, 4, status, diff);
1014 if(status & KoGuides::SNAP_HORIZ) {
1017 if(status & KoGuides::SNAP_VERT) {
1021 m_guides.repaintSnapping(p, status);
1027void KivioCanvas::setViewCenterPoint(
const KoPoint &p)
1029 setUpdatesEnabled(
false);
1031 KoRect va = visibleArea();
1033 double x = TQMAX(0.0, p.x() - (va.width() / 2.0));
1034 double y = TQMAX(0.0, p.y() - (va.height() / 2.0));
1036 m_pVertScrollBar->setValue(m_pView->zoomHandler()->zoomItY(y));
1037 m_pHorzScrollBar->setValue(m_pView->zoomHandler()->zoomItX(x));
1039 setUpdatesEnabled(
true);
1042KoRect KivioCanvas::visibleArea()
1044 KoPoint p0 = mapFromScreen(TQPoint(0,0));
1045 KoPoint p1 = mapFromScreen(TQPoint(width()-1,height()-1));
1047 return KoRect(p0.x(), p0.y(), p1.x() - p0.x(), p1.y() - p0.y());
1050void KivioCanvas::setVisibleArea(KoRect r,
int margin)
1052 setUpdatesEnabled(
false);
1054 zoom.setZoomAndResolution(100, KoGlobal::dpiX(),
1057 float cw = width() - 2 * margin;
1058 float ch = height() - 2 * margin;
1060 float zw = cw / (float)zoom.zoomItX(r.width());
1061 float zh = ch / (float)zoom.zoomItY(r.height());
1062 float z = TQMIN(zw, zh);
1064 m_pView->viewZoom(tqRound(z * 100));
1066 KoPoint c = r.center();
1068 setViewCenterPoint(KoPoint(c.x(), c.y()));
1069 setUpdatesEnabled(
true);
1072void KivioCanvas::setVisibleAreaByWidth(KoRect r,
int margin)
1074 setUpdatesEnabled(
false);
1076 zoom.setZoomAndResolution(100, KoGlobal::dpiX(),
1079 float cw = width() - 2*margin;
1080 float z = cw / (float)zoom.zoomItX(r.width());
1082 m_pView->viewZoom(tqRound(z * 100));
1084 KoPoint c = r.center();
1086 setViewCenterPoint(KoPoint(c.x(), c.y()));
1087 setUpdatesEnabled(
true);
1090void KivioCanvas::setVisibleAreaByHeight(KoRect r,
int margin)
1092 setUpdatesEnabled(
false);
1094 zoom.setZoomAndResolution(100, KoGlobal::dpiX(),
1097 float ch = height() - 2*margin;
1098 float z = ch / (float)zoom.zoomItY(r.height());
1100 m_pView->viewZoom(tqRound(z * 100));
1102 KoPoint c = r.center();
1104 setViewCenterPoint(KoPoint(c.x(), c.y()));
1105 setUpdatesEnabled(
true);
1108void KivioCanvas::startPasteMoving()
1111 KoPoint p = activePage()->getRectForAllSelectedStencils().center();
1112 m_origPoint.setCoords(p.x(), p.y());
1115 beginUnclippedSpawnerPainter();
1116 drawSelectedStencilsXOR();
1120 m_lstOldGeometry.clear();
1121 KivioStencil* pStencil = activePage()->selectedStencils()->first();
1126 *pData = pStencil->rect();
1127 m_lstOldGeometry.append(pData);
1129 pStencil = activePage()->selectedStencils()->next();
1132 continuePasteMoving(lastPoint);
1133 m_pasteMoving =
true;
1137void KivioCanvas::continuePasteMoving(
const TQPoint &pos)
1139 KoPoint pagePoint = mapFromScreen( pos );
1141 double dx = pagePoint.x() - m_origPoint.x();
1142 double dy = pagePoint.y() - m_origPoint.y();
1150 drawSelectedStencilsXOR();
1154 KoRect selectedRect = activePage()->getRectForAllSelectedStencils();
1156 newX = selectedRect.x() + dx;
1157 newY = selectedRect.y() + dy;
1160 p.setCoords(newX, newY);
1167 p.setCoords(selectedRect.x() + dx + selectedRect.width(), selectedRect.y() + dy + selectedRect.height());
1168 p = snapToGuides(p, snappedX, snappedY);
1171 newX = p.x() - selectedRect.width();
1175 newY = p.y() - selectedRect.height();
1178 p.setCoords(selectedRect.x() + dx + (selectedRect.width() / 2.0), selectedRect.y() + dy + (selectedRect.height() / 2.0));
1179 p = snapToGuides(p, snappedX, snappedY);
1182 newX = p.x() - (selectedRect.width() / 2.0);
1186 newY = p.y() - (selectedRect.height() / 2.0);
1189 p.setCoords(selectedRect.x() + dx, selectedRect.y() + dy);
1190 p = snapToGuides(p, snappedX, snappedY);
1200 dx = newX - selectedRect.x();
1201 dy = newY - selectedRect.y();
1204 KivioStencil *pStencil = activePage()->selectedStencils()->first();
1205 KoRect* pData = m_lstOldGeometry.first();
1208 while( pStencil && pData )
1210 newX = pData->x() + dx;
1211 newY = pData->y() + dy;
1213 if( pStencil->protection()->at( kpX ) ==
false ) {
1214 pStencil->setX(newX);
1216 if( pStencil->protection()->at( kpY ) ==
false ) {
1217 pStencil->setY(newY);
1220 pData = m_lstOldGeometry.next();
1221 pStencil = activePage()->selectedStencils()->next();
1225 drawSelectedStencilsXOR();
1226 m_pView->updateToolBars();
1229void KivioCanvas::endPasteMoving()
1231 KivioStencil *pStencil = activePage()->selectedStencils()->first();
1232 KoRect *pData = m_lstOldGeometry.first();
1234 while( pStencil && pData )
1236 if(pStencil->type() == kstConnector) {
1237 pStencil->searchForConnections(m_pView->activePage(), m_pView->zoomHandler()->unzoomItY(4));
1240 pData = m_lstOldGeometry.next();
1241 pStencil = activePage()->selectedStencils()->next();
1244 drawSelectedStencilsXOR();
1246 endUnclippedSpawnerPainter();
1249 m_lstOldGeometry.clear();
1250 m_pasteMoving =
false;
1253void KivioCanvas::updateAutoGuideLines()
1255 TQValueList<double> hGuideLines;
1256 TQValueList<double> vGuideLines;
1257 TQPtrList<KivioLayer> layerList = *(activePage()->layers());
1258 TQPtrListIterator<KivioLayer> layerIt(layerList);
1259 KivioLayer* layer = 0;
1260 TQPtrList<KivioStencil> stencilList;
1261 TQPtrListIterator<KivioStencil> stencilIt(stencilList);
1262 KivioStencil* stencil = 0;
1264 while((layer = layerIt.current()) != 0) {
1267 if(layer->visible()) {
1268 stencilList = *(layer->stencilList());
1269 stencilIt.toFirst();
1271 while((stencil = stencilIt.current()) != 0) {
1274 if(!stencil->isSelected()) {
1275 hGuideLines << stencil->y() << (stencil->y() + (stencil->h() / 2.0)) << (stencil->y() + stencil->h());
1276 vGuideLines << stencil->x() << (stencil->x() + (stencil->w() / 2.0)) << (stencil->x() + stencil->w());
1282 KoPageLayout pl = activePage()->paperLayout();
1285 hGuideLines << (pl.ptHeight / 2.0) << pl.ptTop << pl.ptBottom;
1286 vGuideLines << (pl.ptWidth / 2.0) << pl.ptLeft << pl.ptRight;
1288 guideLines().setAutoGuideLines(hGuideLines, vGuideLines);
1291#include "kivio_canvas.moc"
This class manages the plugins.
Kivio::MouseTool * activeTool()
Returns the tool that is in use.
Kivio::MouseTool * defaultTool()
Returns the default tool.