From c36f903f0c4e89818f98c1694a3e4614f57222c4 Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Thu, 26 Jul 2012 17:23:21 +0300 Subject: [PATCH] Small boarder for possibility to move item and select it without rubber band added. Audio items cannot be resized in vertical dimension because there are no useful content. Audio and Video items has minimal dimensions. --- src/domain/UBGraphicsDelegateFrame.cpp | 33 +++++++++++---------- src/domain/UBGraphicsDelegateFrame.h | 2 +- src/domain/UBGraphicsMediaItem.cpp | 14 ++++++--- src/domain/UBGraphicsMediaItem.h | 34 +++++++++++++++------- src/domain/UBGraphicsMediaItemDelegate.cpp | 27 ++++++++++------- src/domain/UBGraphicsProxyWidget.cpp | 26 +++++++++++++++-- 6 files changed, 93 insertions(+), 43 deletions(-) diff --git a/src/domain/UBGraphicsDelegateFrame.cpp b/src/domain/UBGraphicsDelegateFrame.cpp index 5d26595b..031999b3 100644 --- a/src/domain/UBGraphicsDelegateFrame.cpp +++ b/src/domain/UBGraphicsDelegateFrame.cpp @@ -359,7 +359,7 @@ void UBGraphicsDelegateFrame::mouseMoveEvent(QGraphicsSceneMouseEvent *event) } } } - else if (mOperationMode == Resizing) + else if (mOperationMode == Resizing || mOperationMode == ResizingHorizontally) { mTranslateX = moveX; UBResizableGraphicsItem* resizableItem = dynamic_cast(delegated()); @@ -675,19 +675,22 @@ void UBGraphicsDelegateFrame::positionHandles() QVariant vLocked = delegated()->data(UBGraphicsItemData::ItemLocked); bool isLocked = (vLocked.isValid() && vLocked.toBool()); - - mBottomRightResizeGripSvgItem->setVisible(!isLocked); - mBottomResizeGripSvgItem->setVisible(!isLocked); - mLeftResizeGripSvgItem->setVisible(!isLocked); - mRightResizeGripSvgItem->setVisible(!isLocked); - mTopResizeGripSvgItem->setVisible(!isLocked); + bool bShowHorizontalResizers = ResizingHorizontally == mOperationMode; + bool bShowVerticalResizers = ResizingHorizontally != mOperationMode; + bool bShowAllResizers = Resizing == mOperationMode || Scaling == mOperationMode ; + + mBottomRightResizeGripSvgItem->setVisible(!isLocked && bShowAllResizers); + mBottomResizeGripSvgItem->setVisible(!isLocked && (bShowVerticalResizers || bShowAllResizers)); + mLeftResizeGripSvgItem->setVisible(!isLocked && (bShowHorizontalResizers || bShowAllResizers)); + mRightResizeGripSvgItem->setVisible(!isLocked && (bShowHorizontalResizers || bShowAllResizers)); + mTopResizeGripSvgItem->setVisible(!isLocked && (bShowVerticalResizers || bShowAllResizers)); mRotateButton->setVisible(mDelegate->canRotate() && !isLocked); - mBottomRightResizeGrip->setVisible(!isLocked); - mBottomResizeGrip->setVisible(!isLocked); - mLeftResizeGrip->setVisible(!isLocked); - mRightResizeGrip->setVisible(!isLocked); - mTopResizeGrip->setVisible(!isLocked); + mBottomRightResizeGrip->setVisible(!isLocked && bShowAllResizers); + mBottomResizeGrip->setVisible(!isLocked && (bShowVerticalResizers || bShowAllResizers)); + mLeftResizeGrip->setVisible(!isLocked && (bShowHorizontalResizers || bShowAllResizers)); + mRightResizeGrip->setVisible(!isLocked && (bShowHorizontalResizers || bShowAllResizers)); + mTopResizeGrip->setVisible(!isLocked && (bShowVerticalResizers || bShowAllResizers)); if (isLocked) { @@ -714,9 +717,9 @@ UBGraphicsDelegateFrame::FrameTool UBGraphicsDelegateFrame::toolFromPos(QPointF { if(mDelegate->isLocked()) return None; - else if (bottomRightResizeGripRect().contains(pos)) + else if (bottomRightResizeGripRect().contains(pos) && ResizingHorizontally != mOperationMode) return ResizeBottomRight; - else if (bottomResizeGripRect().contains(pos)){ + else if (bottomResizeGripRect().contains(pos) && ResizingHorizontally != mOperationMode){ if(mMirrorY){ return ResizeTop; }else{ @@ -738,7 +741,7 @@ UBGraphicsDelegateFrame::FrameTool UBGraphicsDelegateFrame::toolFromPos(QPointF return ResizeRight; } } - else if (topResizeGripRect().contains(pos)){ + else if (topResizeGripRect().contains(pos) && ResizingHorizontally != mOperationMode){ if(mMirrorY){ return ResizeBottom; }else{ diff --git a/src/domain/UBGraphicsDelegateFrame.h b/src/domain/UBGraphicsDelegateFrame.h index c8e5b37d..8ffac3e7 100644 --- a/src/domain/UBGraphicsDelegateFrame.h +++ b/src/domain/UBGraphicsDelegateFrame.h @@ -46,7 +46,7 @@ class UBGraphicsDelegateFrame: public QGraphicsRectItem, public QObject virtual void setAntiScale(qreal pAntiScale); - enum OperationMode {Scaling, Resizing}; + enum OperationMode {Scaling, Resizing, ResizingHorizontally}; void setOperationMode(OperationMode pMode) {mOperationMode = pMode;} bool isResizing(){return mResizing;} diff --git a/src/domain/UBGraphicsMediaItem.cpp b/src/domain/UBGraphicsMediaItem.cpp index 382e01a8..4339426e 100644 --- a/src/domain/UBGraphicsMediaItem.cpp +++ b/src/domain/UBGraphicsMediaItem.cpp @@ -56,6 +56,7 @@ UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsIte if(mVideoWidget->sizeHint() == QSize(1,1)){ mVideoWidget->resize(320,240); + mVideoWidget->setMinimumSize(131,26); } setWidget(mVideoWidget); haveLinkedImage = true; @@ -67,8 +68,10 @@ UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsIte mAudioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this); mMediaObject->setTickInterval(1000); - mAudioWidget = new QWidget(); - mAudioWidget->resize(320,26); + mAudioWidget = new UBGraphicsMediaItem::UBAudioPresentationWidget(); + int borderSize = dynamic_cast(mAudioWidget)->borderSize(); + mAudioWidget->resize(320+2*borderSize,26+2*borderSize); + mAudioWidget->setMinimumSize(147,26+2*borderSize); setWidget(mAudioWidget); haveLinkedImage = false; } @@ -82,7 +85,10 @@ UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsIte itemDelegate->init(); setDelegate(itemDelegate); - mDelegate->frame()->setOperationMode(UBGraphicsDelegateFrame::Resizing); + if (mediaType_Audio == mMediaType) + mDelegate->frame()->setOperationMode(UBGraphicsDelegateFrame::ResizingHorizontally); + else + mDelegate->frame()->setOperationMode(UBGraphicsDelegateFrame::Resizing); setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::ObjectItem)); //Necessary to set if we want z value to be assigned correctly @@ -284,4 +290,4 @@ void UBGraphicsMediaItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) event->accept(); -} +} \ No newline at end of file diff --git a/src/domain/UBGraphicsMediaItem.h b/src/domain/UBGraphicsMediaItem.h index abf73015..889f6e04 100644 --- a/src/domain/UBGraphicsMediaItem.h +++ b/src/domain/UBGraphicsMediaItem.h @@ -27,6 +27,29 @@ class UBGraphicsMediaItem : public UBGraphicsProxyWidget { Q_OBJECT +public: + class UBAudioPresentationWidget : public QWidget + { + public: + UBAudioPresentationWidget::UBAudioPresentationWidget(QWidget *parent = NULL) + :QWidget(parent) + , mBorderSize(7) + {} + + int borderSize(){return mBorderSize;} + + private: + virtual void paintEvent(QPaintEvent *event) + { + QPainter painter(this); + painter.fillRect(rect(), QBrush(Qt::black)); + + QWidget::paintEvent(event); + } + + int mBorderSize; + }; + public: typedef enum{ mediaType_Video, @@ -118,15 +141,6 @@ private: QPointF mMouseMovePos; bool haveLinkedImage; - QGraphicsPixmapItem *mLinkedImage; + QGraphicsPixmapItem *mLinkedImage; }; - - -class UBGraphicsUnitedMediaItem : public UBGraphicsMediaItem -{ -public: - UBGraphicsUnitedMediaItem(const QUrl& pMediaFileUrl, QGraphicsItem *parent = 0); - -}; - #endif // UBGRAPHICSMEDIAITEM_H diff --git a/src/domain/UBGraphicsMediaItemDelegate.cpp b/src/domain/UBGraphicsMediaItemDelegate.cpp index ba31b6b0..5be79c44 100644 --- a/src/domain/UBGraphicsMediaItemDelegate.cpp +++ b/src/domain/UBGraphicsMediaItemDelegate.cpp @@ -18,6 +18,7 @@ #include "UBGraphicsMediaItem.h" #include "UBGraphicsMediaItemDelegate.h" +#include "UBGraphicsDelegateFrame.h" #include "UBGraphicsScene.h" @@ -125,19 +126,25 @@ void UBGraphicsMediaItemDelegate::positionHandles() UBGraphicsMediaItem *mediaItem = dynamic_cast(mDelegated); if (mediaItem) { - if (mediaItem->getMediaType() != UBGraphicsMediaItem::mediaType_Audio) - { - mToolBarItem->setPos(0, delegated()->boundingRect().height()-mToolBarItem->rect().height()*AntiScaleRatio); - mToolBarItem->setScale(AntiScaleRatio); - QRectF toolBarRect = mToolBarItem->rect(); - toolBarRect.setWidth(delegated()->boundingRect().width()/AntiScaleRatio); - mToolBarItem->setRect(toolBarRect); - } - else + + mToolBarItem->setPos(0, delegated()->boundingRect().height()-mToolBarItem->rect().height()*AntiScaleRatio); + mToolBarItem->setScale(AntiScaleRatio); + QRectF toolBarRect = mToolBarItem->rect(); + toolBarRect.setWidth(delegated()->boundingRect().width()/AntiScaleRatio); + + if (mediaItem->getMediaType() == UBGraphicsMediaItem::mediaType_Audio) { - mToolBarItem->setPos(0, 0); + int borderSize = 0; + UBGraphicsMediaItem::UBAudioPresentationWidget *audioWidget = dynamic_cast(delegated()->widget()); + if (audioWidget) + borderSize = audioWidget->borderSize(); + + toolBarRect.setWidth(delegated()->boundingRect().width()/AntiScaleRatio-2*borderSize); + mToolBarItem->setPos(borderSize,borderSize); mToolBarItem->show(); } + + mToolBarItem->setRect(toolBarRect); } int mediaItemWidth = mToolBarItem->boundingRect().width(); diff --git a/src/domain/UBGraphicsProxyWidget.cpp b/src/domain/UBGraphicsProxyWidget.cpp index 91238efd..25617250 100644 --- a/src/domain/UBGraphicsProxyWidget.cpp +++ b/src/domain/UBGraphicsProxyWidget.cpp @@ -153,10 +153,30 @@ void UBGraphicsProxyWidget::resize(const QSizeF & pSize) { if (pSize != size()) { - QGraphicsProxyWidget::setMaximumSize(pSize.width(), pSize.height()); - QGraphicsProxyWidget::resize(pSize.width(), pSize.height()); + qreal sizeX = 0; + qreal sizeY = 0; + + if (widget()) + { + + QSizeF minimumItemSize(widget()->minimumSize()); + if (minimumItemSize.width() > pSize.width()) + sizeX = minimumItemSize.width(); + else + sizeX = pSize.width(); + + if (minimumItemSize.height() > pSize.height()) + sizeY = minimumItemSize.height(); + else + sizeY = pSize.height(); + } + QSizeF size(sizeX, sizeY); + + + QGraphicsProxyWidget::setMaximumSize(size.width(), size.height()); + QGraphicsProxyWidget::resize(size.width(), size.height()); if (widget()) - widget()->resize(pSize.width(), pSize.height()); + widget()->resize(size.width(), size.height()); if (mDelegate) mDelegate->positionHandles(); if (scene())