diff --git a/src/FrameworkWidgetFactory.cpp b/src/FrameworkWidgetFactory.cpp index b0c14301..459e5f34 100644 --- a/src/FrameworkWidgetFactory.cpp +++ b/src/FrameworkWidgetFactory.cpp @@ -25,6 +25,7 @@ # include "widgets/TabWidgetWidget_p.h" # include "multisplitter/Separator_qwidget.h" # include "widgets/FloatingWindowWidget_p.h" +# include #else # include "quick/FrameQuick_p.h" # include "quick/DockWidgetQuick.h" @@ -84,6 +85,12 @@ DropIndicatorOverlayInterface *DefaultWidgetFactory::createDropIndicatorOverlay( { return new ClassicIndicators(dropArea); } + +QWidgetOrQuick *DefaultWidgetFactory::createRubberBand(QWidgetOrQuick *parent) const +{ + return new QRubberBand(QRubberBand::Rectangle, parent); +} + #else Frame *DefaultWidgetFactory::createFrame(QWidgetOrQuick *parent, FrameOptions options) const @@ -140,4 +147,9 @@ Layouting::Separator *DefaultWidgetFactory::createSeparator(Layouting::Widget *p return new Layouting::SeparatorQuick(parent); } +QWidgetOrQuick *DefaultWidgetFactory::createRubberBand(QWidgetOrQuick *parent) const +{ + return new QWidgetOrQuick(parent); +} + #endif diff --git a/src/FrameworkWidgetFactory.h b/src/FrameworkWidgetFactory.h index 0b649b6c..913b0a16 100644 --- a/src/FrameworkWidgetFactory.h +++ b/src/FrameworkWidgetFactory.h @@ -117,6 +117,10 @@ public: /// Override to provide your own DropIndicatorOverlayInterface sub-class. ///@param dropArea Just forward to DropIndicatorOverlayInterface's constructor. virtual DropIndicatorOverlayInterface *createDropIndicatorOverlay(DropArea *dropArea) const = 0; + + ///@brief Called internally by the framework to create a RubberBand to show as drop zone + ///Returns a rubber band + virtual QWidgetOrQuick *createRubberBand(QWidgetOrQuick *parent) const = 0; private: Q_DISABLE_COPY(FrameworkWidgetFactory) }; @@ -137,6 +141,7 @@ public: FloatingWindow *createFloatingWindow(MainWindowBase *parent = nullptr) const override; FloatingWindow *createFloatingWindow(Frame *frame, MainWindowBase *parent = nullptr) const override; DropIndicatorOverlayInterface *createDropIndicatorOverlay(DropArea*) const override; + QWidgetOrQuick *createRubberBand(QWidgetOrQuick *parent) const override; private: Q_DISABLE_COPY(DefaultWidgetFactory) }; diff --git a/src/private/indicators/ClassicIndicators.cpp b/src/private/indicators/ClassicIndicators.cpp index 3df2d8e2..ff5434cc 100644 --- a/src/private/indicators/ClassicIndicators.cpp +++ b/src/private/indicators/ClassicIndicators.cpp @@ -15,9 +15,9 @@ #include "Frame_p.h" #include "Logging_p.h" #include "Utils_p.h" +#include "FrameworkWidgetFactory.h" #include -#include #define INDICATOR_WIDTH 40 #define OUTTER_INDICATOR_MARGIN 10 @@ -247,7 +247,7 @@ Indicator::Indicator(ClassicIndicators *classicIndicators, IndicatorWindow *pare ClassicIndicators::ClassicIndicators(DropArea *dropArea) : DropIndicatorOverlayInterface(dropArea) // Is parented on the drop-area, not a toplevel. - , m_rubberBand(new QRubberBand(QRubberBand::Rectangle, rubberBandIsTopLevel() ? nullptr : dropArea)) + , m_rubberBand(Config::self().frameworkWidgetFactory()->createRubberBand(rubberBandIsTopLevel() ? nullptr : dropArea)) , m_indicatorWindow(new IndicatorWindow(this, /*parent=*/ nullptr)) // Top-level so the indicators can appear above the window being dragged. { setVisible(false); diff --git a/src/private/indicators/ClassicIndicators_p.h b/src/private/indicators/ClassicIndicators_p.h index c330765c..8d90129f 100644 --- a/src/private/indicators/ClassicIndicators_p.h +++ b/src/private/indicators/ClassicIndicators_p.h @@ -14,10 +14,6 @@ #include "DropIndicatorOverlayInterface_p.h" -QT_BEGIN_NAMESPACE -class QRubberBand; -QT_END_NAMESPACE - namespace KDDockWidgets { class IndicatorWindow; @@ -45,7 +41,7 @@ private: QRect geometryForRubberband(QRect localRect) const; bool rubberBandIsTopLevel() const; - QRubberBand *const m_rubberBand; + QWidgetOrQuick *const m_rubberBand; IndicatorWindow *const m_indicatorWindow; };