MuseScore/libmscore/lasso.cpp
Werner Schweer 1f9ccfcdce add libmscore
git-subtree-dir: libmscore
git-subtree-mainline: 412ca45401
git-subtree-split: 6047361bd0
2012-05-26 14:54:47 +02:00

138 lines
4.3 KiB
C++

//=============================================================================
// MuseScore
// Music Composition & Notation
// $Id:$
//
// Copyright (C) 2002-2011 Werner Schweer
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2
// as published by the Free Software Foundation and appearing in
// the file LICENCE.GPL
//=============================================================================
#include "lasso.h"
#include "mscore.h"
#include "mscoreview.h"
//---------------------------------------------------------
// Lasso
//---------------------------------------------------------
Lasso::Lasso(Score* s)
: Element(s)
{
setVisible(false);
view = 0;
}
//---------------------------------------------------------
// draw
//---------------------------------------------------------
void Lasso::draw(QPainter* painter) const
{
painter->setBrush(QBrush(QColor(0, 0, 50, 50)));
// always 2 pixel width
qreal w = 2.0 / painter->transform().m11();
painter->setPen(QPen(MScore::selectColor[0], w));
painter->drawRect(_rect);
}
//---------------------------------------------------------
// editDrag
//---------------------------------------------------------
void Lasso::editDrag(const EditData& ed)
{
Qt::CursorShape cursorShape = ed.view->cursor().shape();
switch(ed.curGrip) {
case 0:
cursorShape = Qt::SizeFDiagCursor;
_rect.setTopLeft(_rect.topLeft() + ed.delta);
break;
case 1:
cursorShape = Qt::SizeBDiagCursor;
_rect.setTopRight(_rect.topRight() + ed.delta);
break;
case 2:
cursorShape = Qt::SizeFDiagCursor;
_rect.setBottomRight(_rect.bottomRight() + ed.delta);
break;
case 3:
cursorShape = Qt::SizeBDiagCursor;
_rect.setBottomLeft(_rect.bottomLeft() + ed.delta);
break;
case 4:
cursorShape = Qt::SizeVerCursor;
_rect.setTop(_rect.top() + ed.delta.y());
break;
case 5:
cursorShape = Qt::SizeHorCursor;
_rect.setRight(_rect.right() + ed.delta.x());
break;
case 6:
cursorShape = Qt::SizeVerCursor;
_rect.setBottom(_rect.bottom() + ed.delta.y());
break;
case 7:
cursorShape = Qt::SizeHorCursor;
_rect.setLeft(_rect.left() + ed.delta.x());
break;
}
ed.view->setCursor(QCursor(cursorShape));
}
//---------------------------------------------------------
// updateGrips
//---------------------------------------------------------
void Lasso::updateGrips(int* n, QRectF* r) const
{
*n = 8;
r[0].translate(_rect.topLeft());
r[1].translate(_rect.topRight());
r[2].translate(_rect.bottomRight());
r[3].translate(_rect.bottomLeft());
r[4].translate(_rect.x() + _rect.width() * .5, _rect.top());
r[5].translate(_rect.right(), _rect.y() + _rect.height() * .5);
r[6].translate(_rect.x() + _rect.width()*.5, _rect.bottom());
r[7].translate(_rect.left(), _rect.y() + _rect.height() * .5);
}
//---------------------------------------------------------
// layout
//---------------------------------------------------------
void Lasso::layout()
{
#if 0
QRectF bb(_rect);
if (view) {
qreal dx = 1.5 / view->matrix().m11();
qreal dy = 1.5 / view->matrix().m22();
for (int i = 0; i < view->gripCount(); ++i)
bb |= view->getGrip(i).adjusted(-dx, -dy, dx, dy);
}
#endif
setbbox(_rect);
}
//---------------------------------------------------------
// startEdit
//---------------------------------------------------------
void Lasso::startEdit(MuseScoreView* sv, const QPointF&)
{
view = sv;
}
//---------------------------------------------------------
// endEdit
//---------------------------------------------------------
void Lasso::endEdit()
{
view = 0;
}