68 owner.dragImageComponents.remove (
owner.dragImageComponents.indexOf (
this),
false);
106 finalTarget =
findTarget (
e.getScreenPosition(), details.localPosition, unused);
112 parent->removeChildComponent (
this);
114 if (finalTarget !=
nullptr)
137 auto* newTarget =
findTarget (screenPos, details.localPosition, newTargetComp);
139 setVisible (newTarget ==
nullptr || newTarget->shouldDrawDragImageWhenOver());
144 if (details.sourceComponent !=
nullptr && lastTarget->isInterestedInDragSource (details))
145 lastTarget->itemDragExit (details);
149 if (newTarget !=
nullptr
150 && newTarget->isInterestedInDragSource (details))
151 newTarget->itemDragEnter (details);
156 if (canDoExternalDrag)
239 const auto bounds =
image.getScaledBounds().toNearestInt();
240 setSize (bounds.getWidth(), bounds.getHeight());
257 for (
auto i = desktop.getNumComponents(); --
i >= 0;)
259 auto* desktopComponent = desktop.getComponent (
i);
260 auto dPoint = desktopComponent->getLocalPoint (
nullptr, screenPos);
262 if (
auto*
c = desktopComponent->getComponentAt (dPoint))
264 auto cPoint =
c->getLocalPoint (desktopComponent, dPoint);
266 if (
c->hitTest (cPoint.getX(), cPoint.getY()))
287 hit = hit->getComponentAt (hit->getLocalPoint (
nullptr, screenPos));
293 while (hit !=
nullptr)
297 if (ddt->isInterestedInDragSource (details))
299 relativePos = hit->getLocalPoint (
nullptr, screenPos);
300 resultComponent = hit;
305 hit = hit->getParentComponent();
308 resultComponent =
nullptr;
317 newPos =
p->getLocalPoint (
nullptr, newPos);
325 if (target->isInterestedInDragSource (details))
326 target->itemDragMove (details);
340 auto canMoveFiles =
false;
342 if (
owner.shouldDropFilesWhenDraggedExternally (details,
files, canMoveFiles) && !
files.isEmpty())
351 if (
owner.shouldDropTextWhenDraggedExternally (details,
text) &&
text.isNotEmpty())
372 if (shouldSnapBack &&
sourceDetails.sourceComponent !=
nullptr)
374 auto target =
sourceDetails.sourceComponent->localPointToGlobal (
sourceDetails.sourceComponent->getLocalBounds().getCentre());
377 animator.animateComponent (
this,
384 animator.fadeOut (
this, 120);
406 const bool allowDraggingToExternalWindows,
415 if (draggingSource ==
nullptr || ! draggingSource->isDragging())
421 const auto lastMouseDown = draggingSource->getLastMouseDownPosition().roundToInt();
423 struct ImageAndOffset
429 const auto imageToUse = [&]() -> ImageAndOffset
435 const auto scaleFactor = 2.0;
438 image.multiplyAllAlphas (0.6f);
441 const auto clipped = (
image.getBounds().toDouble() / scaleFactor).getConstrainedPoint (relPos);
467 draggingSource, *
this, imageToUse.offset.roundToInt()));
469 if (allowDraggingToExternalWindows)
472 dragImageComponent->setOpaque (
true);
479 if (
auto* thisComp =
dynamic_cast<Component*
> (
this))
481 thisComp->addChildComponent (dragImageComponent);
490 dragImageComponent->sourceDetails.localPosition = sourceComponent->
getLocalPoint (
nullptr, lastMouseDown);
491 dragImageComponent->updateLocation (
false, lastMouseDown);
492 dragImageComponent->grabKeyboardFocus();
497 if (
auto* peer = dragImageComponent->getPeer())
498 peer->performAnyPendingRepaintsNow();
568 if (inputSourceCausingDrag ==
nullptr)
570 auto minDistance = std::numeric_limits<float>::max();
574 auto numDragging = desktop.getNumDraggingMouseSources();
576 for (
auto i = 0;
i < numDragging; ++
i)
578 if (
auto* ms = desktop.getDraggingMouseSource (
i))
580 auto distance = ms->getScreenPosition().getDistanceSquaredFrom (centrePoint);
582 if (distance < minDistance)
584 minDistance = distance;
585 inputSourceCausingDrag = ms;
592 jassert (inputSourceCausingDrag !=
nullptr && inputSourceCausingDrag->
isDragging());
594 return inputSourceCausingDrag;
601 if (dragImageComp->sourceDetails.sourceComponent == component)
#define noexcept
Definition DistrhoDefines.h:72
Definition juce_ColourGradient.h:38
Point< float > point2
Definition juce_ColourGradient.h:195
bool isRadial
Definition juce_ColourGradient.h:202
Point< float > point1
Definition juce_ColourGradient.h:195
int addColour(double proportionAlongGradient, Colour colour)
Definition juce_ColourGradient.cpp:113
Definition juce_Component.h:36
void setInterceptsMouseClicks(bool allowClicksOnThisComponent, bool allowClicksOnChildComponents) noexcept
Definition juce_Component.cpp:1420
bool isVisible() const noexcept
Definition juce_Component.h:122
Component * getParentComponent() const noexcept
Definition juce_Component.h:804
Image createComponentSnapshot(Rectangle< int > areaToGrab, bool clipImageToComponentBounds=true, float scaleFactor=1.0f)
Definition juce_Component.cpp:2135
bool isOpaque() const noexcept
Definition juce_Component.cpp:843
Point< int > getLocalPoint(const Component *sourceComponent, Point< int > pointRelativeToSourceComponent) const
Definition juce_Component.cpp:1136
void setAlwaysOnTop(bool shouldStayOnTop)
Definition juce_Component.cpp:1074
Rectangle< int > getBounds() const noexcept
Definition juce_Component.h:304
void repaint()
Definition juce_Component.cpp:1917
Component() noexcept
Definition juce_Component.cpp:517
Rectangle< int > getScreenBounds() const
Definition juce_Component.cpp:1134
void setSize(int newWidth, int newHeight)
Definition juce_Component.cpp:1262
void setWantsKeyboardFocus(bool wantsFocus) noexcept
Definition juce_Component.cpp:2842
Point< int > localPointToGlobal(Point< int > localPoint) const
Definition juce_Component.cpp:1141
Rectangle< int > getLocalBounds() const noexcept
Definition juce_Component.cpp:2283
void setTopLeftPosition(int x, int y)
Definition juce_Component.cpp:1264
virtual void setVisible(bool shouldBeVisible)
Definition juce_Component.cpp:575
static ModifierKeys getCurrentModifiersRealtime() noexcept
Definition juce_ComponentPeer.cpp:596
@ windowIsTemporary
Definition juce_ComponentPeer.h:52
@ windowIgnoresMouseClicks
Definition juce_ComponentPeer.h:54
static Desktop &JUCE_CALLTYPE getInstance()
Definition juce_Desktop.cpp:50
static bool canUseSemiTransparentWindows() noexcept
Definition juce_linux_Windowing.cpp:603
Definition juce_DragAndDropContainer.cpp:36
void updateSize()
Definition juce_DragAndDropContainer.cpp:237
void updateImage(const ScaledImage &newImage)
Definition juce_DragAndDropContainer.cpp:169
const Point< int > imageOffset
Definition juce_DragAndDropContainer.cpp:231
Time lastTimeOverTarget
Definition juce_DragAndDropContainer.cpp:233
DragAndDropTarget::SourceDetails sourceDetails
Definition juce_DragAndDropContainer.cpp:225
ScaledImage image
Definition juce_DragAndDropContainer.cpp:228
void sendDragMove(DragAndDropTarget::SourceDetails &details) const
Definition juce_DragAndDropContainer.cpp:322
DragImageComponent(const ScaledImage &im, const var &desc, Component *const sourceComponent, const MouseInputSource *draggingSource, DragAndDropContainer &ddc, Point< int > offset)
Definition juce_DragAndDropContainer.cpp:38
void mouseDrag(const MouseEvent &e) override
Definition juce_DragAndDropContainer.cpp:124
void paint(Graphics &g) override
Definition juce_DragAndDropContainer.cpp:82
void forceMouseCursorUpdate()
Definition juce_DragAndDropContainer.cpp:243
WeakReference< Component > mouseDragSource
Definition juce_DragAndDropContainer.cpp:230
void setNewScreenPos(Point< int > screenPos)
Definition juce_DragAndDropContainer.cpp:312
MouseInputSource::InputSourceType originalInputSourceType
Definition juce_DragAndDropContainer.cpp:235
void updateLocation(const bool canDoExternalDrag, Point< int > screenPos)
Definition juce_DragAndDropContainer.cpp:130
DragAndDropContainer & owner
Definition juce_DragAndDropContainer.cpp:229
void dismissWithAnimation(const bool shouldSnapBack)
Definition juce_DragAndDropContainer.cpp:367
bool canModalEventBeSentToComponent(const Component *targetComponent) override
Definition juce_DragAndDropContainer.cpp:217
bool hasCheckedForExternalDrag
Definition juce_DragAndDropContainer.cpp:232
int originalInputSourceIndex
Definition juce_DragAndDropContainer.cpp:234
void deleteSelf()
Definition juce_DragAndDropContainer.cpp:362
bool isOriginalInputSource(const MouseInputSource &sourceToCheck)
Definition juce_DragAndDropContainer.cpp:388
void checkForExternalDrag(DragAndDropTarget::SourceDetails &details, Point< int > screenPos)
Definition juce_DragAndDropContainer.cpp:329
~DragImageComponent() override
Definition juce_DragAndDropContainer.cpp:66
Point< int > transformOffsetCoordinates(const Component *const sourceComponent, Point< int > offsetInSource) const
Definition juce_DragAndDropContainer.cpp:274
void timerCallback() override
Definition juce_DragAndDropContainer.cpp:176
void inputAttemptWhenModal() override
Definition juce_DragAndDropContainer.cpp:223
static Component * findDesktopComponentBelow(Point< int > screenPos)
Definition juce_DragAndDropContainer.cpp:253
DragAndDropTarget * findTarget(Point< int > screenPos, Point< int > &relativePos, Component *&resultComponent) const
Definition juce_DragAndDropContainer.cpp:279
bool keyPressed(const KeyPress &key) override
Definition juce_DragAndDropContainer.cpp:200
DragAndDropTarget * getCurrentlyOver() const noexcept
Definition juce_DragAndDropContainer.cpp:248
void mouseUp(const MouseEvent &e) override
Definition juce_DragAndDropContainer.cpp:91
WeakReference< Component > currentlyOverComp
Definition juce_DragAndDropContainer.cpp:230
var getCurrentDragDescription() const
Definition juce_DragAndDropContainer.cpp:514
void startDragging(const var &sourceDescription, Component *sourceComponent, const ScaledImage &dragImage=ScaledImage(), bool allowDraggingToOtherJuceWindows=false, const Point< int > *imageOffsetFromMouse=nullptr, const MouseInputSource *inputSourceCausingDrag=nullptr)
Definition juce_DragAndDropContainer.cpp:403
var getDragDescriptionForIndex(int index) const
Definition juce_DragAndDropContainer.cpp:524
bool isDragAndDropActive() const
Definition juce_DragAndDropContainer.cpp:504
virtual ~DragAndDropContainer()
virtual void dragOperationStarted(const DragAndDropTarget::SourceDetails &)
Definition juce_DragAndDropContainer.cpp:562
static bool performExternalDragDropOfText(const String &text, Component *sourceComponent=nullptr, std::function< void()> callback=nullptr)
Definition juce_linux_Windowing.cpp:778
const MouseInputSource * getMouseInputSourceForDrag(Component *sourceComponent, const MouseInputSource *inputSourceCausingDrag)
Definition juce_DragAndDropContainer.cpp:565
virtual bool shouldDropTextWhenDraggedExternally(const DragAndDropTarget::SourceDetails &sourceDetails, String &text)
Definition juce_DragAndDropContainer.cpp:557
virtual void dragOperationEnded(const DragAndDropTarget::SourceDetails &)
Definition juce_DragAndDropContainer.cpp:563
virtual bool shouldDropFilesWhenDraggedExternally(const DragAndDropTarget::SourceDetails &sourceDetails, StringArray &files, bool &canMoveFiles)
Definition juce_DragAndDropContainer.cpp:552
int getNumCurrentDrags() const
Definition juce_DragAndDropContainer.cpp:509
OwnedArray< DragImageComponent > dragImageComponents
Definition juce_DragAndDropContainer.h:258
static DragAndDropContainer * findParentDragContainerFor(Component *childComponent)
Definition juce_DragAndDropContainer.cpp:547
static bool performExternalDragDropOfFiles(const StringArray &files, bool canMoveFiles, Component *sourceComponent=nullptr, std::function< void()> callback=nullptr)
Definition juce_linux_Windowing.cpp:764
void setDragImageForIndex(int index, const ScaledImage &newImage)
Definition juce_DragAndDropContainer.cpp:541
bool isAlreadyDragging(Component *sourceComponent) const noexcept
Definition juce_DragAndDropContainer.cpp:597
void setCurrentDragImage(const ScaledImage &newImage)
Definition juce_DragAndDropContainer.cpp:532
Definition juce_DragAndDropTarget.h:54
Point< int > localPosition
Definition juce_DragAndDropTarget.h:70
WeakReference< Component > sourceComponent
Definition juce_DragAndDropTarget.h:65
var description
Definition juce_DragAndDropTarget.h:62
SourceDetails(const var &description, Component *sourceComponent, Point< int > localPosition) noexcept
Definition juce_DragAndDropContainer.cpp:609
Definition juce_DragAndDropTarget.h:46
virtual void itemDragEnter(const SourceDetails &dragSourceDetails)
Definition juce_DragAndDropContainer.cpp:616
virtual void itemDragExit(const SourceDetails &dragSourceDetails)
Definition juce_DragAndDropContainer.cpp:618
virtual void itemDragMove(const SourceDetails &dragSourceDetails)
Definition juce_DragAndDropContainer.cpp:617
virtual void itemDropped(const SourceDetails &dragSourceDetails)=0
virtual bool shouldDrawDragImageWhenOver()
Definition juce_DragAndDropContainer.cpp:619
virtual void fileDragEnter(const StringArray &files, int x, int y)
Definition juce_DragAndDropContainer.cpp:622
virtual void fileDragExit(const StringArray &files)
Definition juce_DragAndDropContainer.cpp:624
virtual void fileDragMove(const StringArray &files, int x, int y)
Definition juce_DragAndDropContainer.cpp:623
Definition juce_GraphicsContext.h:45
void drawImageAt(const Image &imageToDraw, int topLeftX, int topLeftY, bool fillAlphaChannelWithCurrentBrush=false) const
Definition juce_GraphicsContext.cpp:803
void setGradientFill(const ColourGradient &gradient)
Definition juce_GraphicsContext.cpp:290
bool reduceClipRegion(int x, int y, int width, int height)
Definition juce_GraphicsContext.cpp:180
void fillAll() const
Definition juce_GraphicsContext.cpp:541
Definition juce_Image.h:58
Image convertedToFormat(PixelFormat newFormat) const
Definition juce_Image.cpp:317
bool isNull() const noexcept
Definition juce_Image.h:155
@ SingleChannel
Definition juce_Image.h:68
@ ARGB
Definition juce_Image.h:67
Definition juce_KeyPress.h:40
static const int escapeKey
Definition juce_KeyPress.h:190
static bool callAsync(std::function< void()> functionToCall)
Definition juce_MessageManager.cpp:192
Definition juce_MouseEvent.h:39
Definition juce_Point.h:42
constexpr Point< float > toFloat() const noexcept
Definition juce_Point.h:234
constexpr Point< double > toDouble() const noexcept
Definition juce_Point.h:237
Point< ValueType > getCentre() const noexcept
Definition juce_Rectangle.h:151
Point< ValueType > getConstrainedPoint(Point< ValueType > point) const noexcept
Definition juce_Rectangle.h:569
static RelativeTime milliseconds(int milliseconds) noexcept
Definition juce_RelativeTime.cpp:31
Definition juce_ScaledImage.h:45
Image getImage() const
Definition juce_ScaledImage.h:69
Rectangle< double > getScaledBounds() const
Definition juce_ScaledImage.h:75
Definition juce_StringArray.h:35
Definition juce_String.h:53
virtual void textDragEnter(const String &text, int x, int y)
Definition juce_DragAndDropContainer.cpp:626
virtual void textDragMove(const String &text, int x, int y)
Definition juce_DragAndDropContainer.cpp:627
virtual void textDragExit(const String &text)
Definition juce_DragAndDropContainer.cpp:628
Definition juce_Time.h:37
static Time JUCE_CALLTYPE getCurrentTime() noexcept
Definition juce_Time.cpp:233
Timer() noexcept
Definition juce_Timer.cpp:316
void startTimer(int intervalInMilliseconds) noexcept
Definition juce_Timer.cpp:332
Definition juce_WeakReference.h:78
Definition juce_Variant.h:42
* e
Definition inflate.c:1404
int g
Definition inflate.c:1573
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
void composite()
Definition exprtk_simple_example_08.cpp:27
static uintptr_t parent
Definition pugl.h:1644
static __inline float fade(float t)
Definition lice_texgen.cpp:133
static int JUCE_CDECL comp(const void *a, const void *b)
Definition lsp.c:298
static char ** files
Definition misc.c:28
const Colour transparentWhite
Definition juce_Colours.h:41
const Colour white
Definition juce_Colours.h:180
Definition carla_juce.cpp:31
bool juce_performDragDropFiles(const StringArray &, const bool copyFiles, bool &shouldStop)
bool juce_performDragDropText(const String &, bool &shouldStop)
bool isPositiveAndBelow(Type1 valueToTest, Type2 upperLimit) noexcept
Definition juce_MathsFunctions.h:279
@ image
Definition juce_AccessibilityRole.h:42
const char * text
Definition swell-functions.h:167
uch * p
Definition crypt.c:594
return c
Definition crypt.c:175
ZCONST char * key
Definition crypt.c:587
typedef int(UZ_EXP MsgFn)()
#define const
Definition zconf.h:137