Skip to content

Commit 391d55a

Browse files
committed
Added selection lock
1 parent 2b335c7 commit 391d55a

File tree

4 files changed

+72
-4
lines changed

4 files changed

+72
-4
lines changed

melatonin/components/overlay.h

+10-3
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,8 @@ namespace melatonin
198198
{
199199
constrainer.setMinimumOnscreenAmounts (selectedComponent->getHeight(), selectedComponent->getWidth(), selectedComponent->getHeight(), selectedComponent->getWidth());
200200
// reset previous selection and update mouse cursor
201-
selectedComponent->setMouseCursor (juce::MouseCursor::DraggingHandCursor);
201+
if(isDraggingEnabled)
202+
selectedComponent->setMouseCursor (juce::MouseCursor::DraggingHandCursor);
202203
}
203204
}
204205

@@ -235,7 +236,7 @@ namespace melatonin
235236

236237
void mouseEnter (const juce::MouseEvent&) override
237238
{
238-
if (!selectedComponent)
239+
if (!selectedComponent || !isDraggingEnabled)
239240
return;
240241

241242
selectedComponent->setMouseCursor (juce::MouseCursor::DraggingHandCursor);
@@ -244,7 +245,7 @@ namespace melatonin
244245

245246
void mouseMove (const juce::MouseEvent&) override
246247
{
247-
if (!selectedComponent)
248+
if (!selectedComponent || !isDraggingEnabled)
248249
return;
249250
selectedComponent->setMouseCursor (juce::MouseCursor::DraggingHandCursor);
250251
repaint();
@@ -272,12 +273,18 @@ namespace melatonin
272273
}
273274
}
274275

276+
void enableDragging (bool enableDragging)
277+
{
278+
isDraggingEnabled = enableDragging;
279+
}
280+
275281
private:
276282
Component::SafePointer<Component> outlinedComponent;
277283
Component::SafePointer<Component> hoveredComponent;
278284
juce::Rectangle<int> outlinedBounds;
279285

280286
bool isDragging = false;
287+
bool isDraggingEnabled = false;
281288
juce::ComponentDragger componentDragger;
282289
juce::ComponentBoundsConstrainer boundsConstrainer;
283290

melatonin/helpers/overlay_mouse_listener.h

+24-1
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,29 @@ namespace melatonin
4646
root->removeMouseListener (this);
4747
}
4848

49+
void enableDragging (bool enable)
50+
{
51+
dragEnabled = enable;
52+
}
53+
54+
void enableSelection (bool enabled)
55+
{
56+
selectionEnabled = enabled;
57+
}
58+
4959
void mouseEnter (const juce::MouseEvent& event) override
5060
{
61+
if(!selectionEnabled)
62+
return;
63+
5164
outlineComponentCallback (event.originalComponent);
5265
}
5366

5467
void mouseMove (const juce::MouseEvent& event) override
5568
{
69+
if(!selectionEnabled || !dragEnabled)
70+
return;
71+
5672
if (outlineDistanceCallback && event.mods.isAltDown())
5773
outlineDistanceCallback (event.originalComponent);
5874
else
@@ -61,7 +77,7 @@ namespace melatonin
6177

6278
void mouseUp (const juce::MouseEvent& event) override
6379
{
64-
if (event.mods.isLeftButtonDown() && !isDragging)
80+
if (event.mods.isLeftButtonDown() && !isDragging && selectionEnabled)
6581
{
6682
selectComponentCallback (event.originalComponent);
6783
}
@@ -70,6 +86,9 @@ namespace melatonin
7086

7187
void mouseDown (const juce::MouseEvent& event) override
7288
{
89+
if(!dragEnabled)
90+
return;
91+
7392
if (event.mods.isLeftButtonDown() && event.originalComponent->isMouseOverOrDragging())
7493
{
7594
componentStartDraggingCallback (event.originalComponent, event);
@@ -78,6 +97,9 @@ namespace melatonin
7897

7998
void mouseDrag (const juce::MouseEvent& event) override
8099
{
100+
if(!dragEnabled)
101+
return;
102+
81103
// takes care of small mouse position drift on selection
82104
if (event.getDistanceFromDragStart() > 3 && event.originalComponent->isMouseOverOrDragging())
83105
{
@@ -107,5 +129,6 @@ namespace melatonin
107129
juce::Component* root = nullptr;
108130
bool enabled = false;
109131
bool isDragging { false };
132+
bool dragEnabled { false }, selectionEnabled { false };
110133
};
111134
}

melatonin/inspector_component.h

+18
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ namespace melatonin
2727
setMouseClickGrabsKeyboardFocus (false);
2828

2929
addAndMakeVisible (enabledButton);
30+
addAndMakeVisible (enableDragging);
31+
addAndMakeVisible (enableSelection);
3032
addAndMakeVisible (fpsToggle);
3133
addAndMakeVisible (logo);
3234

@@ -134,6 +136,16 @@ namespace melatonin
134136
toggleCallback (!inspectorEnabled);
135137
};
136138

139+
enableDragging.on = settings->props->getBoolValue ("enableDragging", false);
140+
enableDragging.onClick = [this] {
141+
toggleMoveCallback (enableDragging.on);
142+
};
143+
144+
enableSelection.on = settings->props->getBoolValue ("enableSelection", false);
145+
enableSelection.onClick = [this] {
146+
toggleIgnoreCallback (enableSelection.on);
147+
};
148+
137149
fpsToggle.on = false;
138150
fpsToggle.onClick = [this] {
139151
settings->props->setValue ("fpsEnabled", fpsToggle.on);
@@ -233,6 +245,8 @@ namespace melatonin
233245
topArea = mainCol.removeFromTop (headerHeight);
234246
auto toolbar = topArea;
235247
enabledButton.setBounds (toolbar.removeFromLeft (48));
248+
enableDragging.setBounds (toolbar.removeFromLeft (48));
249+
enableSelection.setBounds (toolbar.removeFromLeft (48));
236250
fpsToggle.setBounds (toolbar.removeFromLeft (48));
237251
logo.setBounds (toolbar.removeFromRight (56));
238252

@@ -374,6 +388,8 @@ namespace melatonin
374388
std::function<void (bool enabled)> toggleCallback;
375389
std::function<void (bool enabled)> toggleOverlayCallback;
376390
std::function<void (bool enabled)> toggleFPSCallback;
391+
std::function<void (bool enabled)> toggleMoveCallback;
392+
std::function<void (bool enabled)> toggleIgnoreCallback;
377393

378394
private:
379395
Component::SafePointer<Component> selectedComponent;
@@ -408,6 +424,8 @@ namespace melatonin
408424
InspectorImageButton clearButton { "clear", { 0, 6 } };
409425
InspectorImageButton searchIcon { "search", { 8, 8 } };
410426
InspectorImageButton enabledButton { "enabled", { 8, 6 }, true };
427+
InspectorImageButton enableDragging { "move", { 5, 7 }, true };
428+
InspectorImageButton enableSelection { "dogfood", { 4, 4 }, true };
411429
InspectorImageButton fpsToggle { "speedometer", { 2, 7 }, true };
412430

413431
juce::String lastSearchText;

melatonin_inspector.h

+20
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,15 @@ namespace melatonin
6464
return false;
6565
}
6666
};
67+
68+
void restoreMenuState ()
69+
{
70+
overlayMouseListener.enableDragging (settings->props->getBoolValue ("enableDragging", false));
71+
overlayMouseListener.enableSelection (settings->props->getBoolValue ("enableSelection", false));
72+
73+
overlay.enableDragging(settings->props->getBoolValue ("enableDragging", false));
74+
}
75+
6776
explicit Inspector (juce::Component& rootComponent, bool inspectorEnabledAtStart = true)
6877
: juce::DocumentWindow ("Melatonin Inspector", colors::background, 7, true)
6978
{
@@ -75,6 +84,8 @@ namespace melatonin
7584
// needs to come before the LNF
7685
restoreBoundsIfNeeded();
7786

87+
restoreMenuState();
88+
7889
// use our own lnf for both overlay and inspector
7990
setLookAndFeel (&inspectorLookAndFeel);
8091
overlay.setLookAndFeel (&inspectorLookAndFeel);
@@ -433,6 +444,15 @@ namespace melatonin
433444
this->fpsMeter.setBounds (root->getLocalBounds().removeFromRight (60).removeFromTop (40));
434445
this->fpsMeter.setVisible (enable);
435446
};
447+
448+
inspectorComponent.toggleMoveCallback = [this] (bool enable) {
449+
overlayMouseListener.enableDragging (enable);
450+
overlay.enableDragging (enable);
451+
};
452+
453+
inspectorComponent.toggleIgnoreCallback = [this] (bool enable) {
454+
overlayMouseListener.enableSelection (enable);
455+
};
436456
}
437457
};
438458
}

0 commit comments

Comments
 (0)