Fixed SANKORE-1044 "multiples caches".

Now, only one instance per scene is allowed in calling UBGraphicsCache instance() static function.
preferencesAboutTextFull
Guillaume Burel 12 years ago
parent 076e0edf36
commit ed67f1bada
  1. 2
      src/adaptors/UBSvgSubsetAdaptor.cpp
  2. 9
      src/domain/UBGraphicsScene.cpp
  3. 15
      src/tools/UBGraphicsCache.cpp
  4. 12
      src/tools/UBGraphicsCache.h

@ -3120,7 +3120,7 @@ UBGraphicsTriangle* UBSvgSubsetAdaptor::UBSvgSubsetReader::triangleFromSvg()
UBGraphicsCache* UBSvgSubsetAdaptor::UBSvgSubsetReader::cacheFromSvg() UBGraphicsCache* UBSvgSubsetAdaptor::UBSvgSubsetReader::cacheFromSvg()
{ {
UBGraphicsCache* pCache = new UBGraphicsCache(); UBGraphicsCache* pCache = UBGraphicsCache::instance(mScene);
pCache->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Tool)); pCache->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Tool));
graphicsItemFromSvg(pCache); graphicsItemFromSvg(pCache);

@ -1603,6 +1603,9 @@ void UBGraphicsScene::removeItem(QGraphicsItem* item)
--mItemCount; --mItemCount;
mFastAccessItems.removeAll(item); mFastAccessItems.removeAll(item);
/* delete the item if it is cache to allow its reinstanciation, because Cache implements design pattern Singleton. */
if (dynamic_cast<UBGraphicsCache*>(item))
UBCoreGraphicsScene::deleteItem(item);
} }
void UBGraphicsScene::removeItems(const QSet<QGraphicsItem*>& items) void UBGraphicsScene::removeItems(const QSet<QGraphicsItem*>& items)
@ -1956,9 +1959,8 @@ void UBGraphicsScene::addAristo(QPointF center)
void UBGraphicsScene::addCache() void UBGraphicsScene::addCache()
{ {
UBGraphicsCache* cache = new UBGraphicsCache(); UBGraphicsCache* cache = UBGraphicsCache::instance(this);
mTools << cache; if (!items().contains(cache)) {
addItem(cache); addItem(cache);
cache->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Tool)); cache->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Tool));
@ -1967,6 +1969,7 @@ void UBGraphicsScene::addCache()
cache->setSelected(true); cache->setSelected(true);
UBApplication::boardController->notifyCache(true); UBApplication::boardController->notifyCache(true);
UBApplication::boardController->notifyPageChanged(); UBApplication::boardController->notifyPageChanged();
}
} }
void UBGraphicsScene::addMask(const QPointF &center) void UBGraphicsScene::addMask(const QPointF &center)

@ -24,11 +24,21 @@
#include "core/memcheck.h" #include "core/memcheck.h"
UBGraphicsCache::UBGraphicsCache():QGraphicsRectItem() QMap<UBGraphicsScene*, UBGraphicsCache*> UBGraphicsCache::sInstances;
UBGraphicsCache* UBGraphicsCache::instance(UBGraphicsScene *scene)
{
if (!sInstances.contains(scene))
sInstances.insert(scene, new UBGraphicsCache(scene));
return sInstances[scene];
}
UBGraphicsCache::UBGraphicsCache(UBGraphicsScene *scene) : QGraphicsRectItem()
, mMaskColor(Qt::black) , mMaskColor(Qt::black)
, mMaskShape(eMaskShape_Circle) , mMaskShape(eMaskShape_Circle)
, mShapeWidth(100) , mShapeWidth(100)
, mDrawMask(false) , mDrawMask(false)
, mScene(scene)
{ {
// Get the board size and pass it to the shape // Get the board size and pass it to the shape
QRect boardRect = UBApplication::boardController->displayView()->rect(); QRect boardRect = UBApplication::boardController->displayView()->rect();
@ -39,11 +49,12 @@ UBGraphicsCache::UBGraphicsCache():QGraphicsRectItem()
UBGraphicsCache::~UBGraphicsCache() UBGraphicsCache::~UBGraphicsCache()
{ {
sInstances.remove(mScene);
} }
UBItem* UBGraphicsCache::deepCopy() const UBItem* UBGraphicsCache::deepCopy() const
{ {
UBGraphicsCache* copy = new UBGraphicsCache(); UBGraphicsCache* copy = new UBGraphicsCache(mScene);
copyItemParameters(copy); copyItemParameters(copy);

@ -30,7 +30,7 @@ typedef enum
class UBGraphicsCache : public QGraphicsRectItem, public UBItem class UBGraphicsCache : public QGraphicsRectItem, public UBItem
{ {
public: public:
UBGraphicsCache(); static UBGraphicsCache* instance(UBGraphicsScene *scene);
~UBGraphicsCache(); ~UBGraphicsCache();
enum { Type = UBGraphicsItemType::cacheItemType }; enum { Type = UBGraphicsItemType::cacheItemType };
@ -55,8 +55,7 @@ protected:
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
private: private:
void init(); static QMap<UBGraphicsScene*, UBGraphicsCache*> sInstances;
QRectF updateRect(QPointF currentPoint);
QColor mMaskColor; QColor mMaskColor;
eMaskShape mMaskShape; eMaskShape mMaskShape;
@ -65,6 +64,13 @@ private:
QPointF mShapePos; QPointF mShapePos;
int mOldShapeWidth; int mOldShapeWidth;
QPointF mOldShapePos; QPointF mOldShapePos;
UBGraphicsScene* mScene;
UBGraphicsCache(UBGraphicsScene *scene);
void init();
QRectF updateRect(QPointF currentPoint);
}; };
#endif // UBGRAPHICSCACHE_H #endif // UBGRAPHICSCACHE_H

Loading…
Cancel
Save