Coder Social home page Coder Social logo

ffaudio / foleys_gui_magic Goto Github PK

View Code? Open in Web Editor NEW
312.0 13.0 43.0 2.4 MB

A GUI builder module for JUCE - with examples

Home Page: https://foleysfinest.com/developer/pluginguimagic/

License: Other

C++ 91.09% CMake 2.63% C 0.91% CSS 4.89% HTML 0.47%
gui stylesheet meters juce generic-editor wyswyg pluginguimagic

foleys_gui_magic's People

Contributors

benediktadams avatar benthevining avatar ffaudio avatar jatinchowdhury18 avatar witte avatar xenakios avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

foleys_gui_magic's Issues

Cancel drag in GUI tree

When releasing a component on its original location in the GUI tree the application crashes in debug mode with the following error:

// You're attempting to create a recursive loop! A node
// can't be a child of one of its own children!

Equalizer Example Autosave Creating Multiple magic.sav.xml Files

When compiling and testing with the Equalizer Example project, the auto save function is continuously creating magic.sav.xml files.

I.E.
image

Is it possible to only use the magic.xml that is added as a resource though the Projucer Interface?

As you can see in the screenshot, I have 17+ magic.sav.xml files

Layout update broken, no eq-lines in windows, names in colour no longer editable

Originally posted by @Werner88 in #24 (comment)

Hi Daniel,

thank you very much for this framework, I like it very much!!!

I have problems since your last update:

a) after loading xml file, same after the first launch, the layout looks horrible
b) after changing the lookandfeel of a component (e.g. a slider) the layout looks horrible
after resizing everything is okay.

Maybe it has something to do with a missing call to
builder->updateLayout();

In windows the EqualizerExample is broken, no eq-lines are drawn.

it is never possible to use the color names because whenever you click into a color field you are in the colourSelector.

I implemented this feature myself in a different way.
For the color fields I set the buttonText to „o“. Only after clicking the button the colourSelector launches.
The color field stays editable. When making the color field empty, the „0“ turns to an „x“. After clicking the „x“ you get the node.removeProperty call.
Anyway, it would be nice to have the color fields editable like before.

kind regards
and again thank you for guiMagic

Werner

Keyboard shortcuts not working

Looks like on my Fedora Linux machine, PGM keyboard shortcuts are not registered, so I can't copy or duplicate elements in the GUI tree other than by editing the XML file directly.

Is there any other way to do this?

Thanks!

-Butch

Crash (use-after-free) when clicking "Undo" on GUI editor

When clicking undo on the GUI editor, if there is nothing to undo, the app crashes. I turned on ASAN (Address Sanitizer) and identified this as a use-after-free. Here are the ASAN logs:

=================================================================
==2574==ERROR: AddressSanitizer: heap-use-after-free on address 0x60800010f2a8 at pc 0x000116e14c61 bp 0x7ffee2b7dd00 sp 0x7ffee2b7dcf8
WRITE of size 4 at 0x60800010f2a8 thread T0
    #0 0x116e14c60 in juce::Atomic<int>::operator++() atomic:1020
    #1 0x116e7ab9f in juce::ReferenceCountedObject::incReferenceCount() juce_ReferenceCountedObject.h:76
    #2 0x1188c5917 in juce::ReferenceCountedObjectPtr<juce::ValueTree::SharedObject>::ReferenceCountedObjectPtr(juce::ValueTree::SharedObject&) juce_ReferenceCountedObject.h:274
    #3 0x11885d962 in juce::ReferenceCountedObjectPtr<juce::ValueTree::SharedObject>::ReferenceCountedObjectPtr(juce::ValueTree::SharedObject&) juce_ReferenceCountedObject.h:273
    #4 0x11885d877 in juce::ValueTree::ValueTree(juce::ValueTree::SharedObject&) juce_ValueTree.cpp:602
    #5 0x11885da02 in juce::ValueTree::ValueTree(juce::ValueTree::SharedObject&) juce_ValueTree.cpp:602
    #6 0x118868b45 in juce::ValueTree::SharedObject::getOrCreateChildWithName(juce::Identifier const&, juce::UndoManager*) juce_ValueTree.cpp:222
    #7 0x1188685d1 in juce::ValueTree::getOrCreateChildWithName(juce::Identifier const&, juce::UndoManager*) juce_ValueTree.cpp:895
    #8 0x116ffd7bd in foleys::MagicGUIBuilder::createDefaultGUITree(bool) foleys_MagicGUIBuilder.cpp:502
    #9 0x116fe19da in foleys::MagicGUIBuilder::updateComponents() foleys_MagicGUIBuilder.cpp:161
    #10 0x116fe0b3a in foleys::MagicGUIBuilder::updateAll() foleys_MagicGUIBuilder.cpp:65
    #11 0x117063b8b in foleys::MagicGUIBuilder::valueTreeChildRemoved(juce::ValueTree&, juce::ValueTree&, int) foleys_MagicGUIBuilder.cpp:564
    #12 0x1188b42b2 in juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)::operator()(juce::ValueTree::Listener&) const juce_ValueTree.cpp:113
    #13 0x1188b3ff5 in void juce::ListenerList<juce::ValueTree::Listener, juce::Array<juce::ValueTree::Listener*, juce::DummyCriticalSection, 0> >::callExcluding<juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)&>(juce::ValueTree::Listener*, juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)&&&) juce_ListenerList.h:140
    #14 0x1188b38d9 in void juce::ValueTree::SharedObject::callListeners<juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)>(juce::ValueTree::Listener*, juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)) const juce_ValueTree.cpp:75
    #15 0x1188b3444 in void juce::ValueTree::SharedObject::callListenersForAllParents<juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)>(juce::ValueTree::Listener*, juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)) const juce_ValueTree.cpp:95
    #16 0x1188b3094 in juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int) juce_ValueTree.cpp:113
    #17 0x118869cd2 in juce::ValueTree::SharedObject::removeChild(int, juce::UndoManager*) juce_ValueTree.cpp:297
    #18 0x1188af182 in juce::ValueTree::SharedObject::AddOrRemoveChildAction::undo() juce_ValueTree.cpp:508
    #19 0x11888352f in juce::UndoManager::ActionSet::undo() const juce_UndoManager.cpp:47
    #20 0x1188830ae in juce::UndoManager::undo() juce_UndoManager.cpp:252
    #21 0x11750ecb8 in foleys::ToolBox::ToolBox(juce::Component*, foleys::MagicGUIBuilder&)::$_43::operator()() const foleys_ToolBox.cpp:89
    #22 0x11750ebb5 in _ZNSt3__128__invoke_void_return_wrapperIvE6__callIJRZN6foleys7ToolBoxC1EPN4juce9ComponentERNS3_15MagicGUIBuilderEE4$_43EEEvDpOT_ type_traits:4428
    #23 0x11750e587 in std::__1::__function::__func<foleys::ToolBox::ToolBox(juce::Component*, foleys::MagicGUIBuilder&)::$_43, std::__1::allocator<foleys::ToolBox::ToolBox(juce::Component*, foleys::MagicGUIBuilder&)::$_43>, void ()>::operator()() functional:1562
    #24 0x1185ff965 in std::__1::function<void ()>::operator()() const functional:1913
    #25 0x1193c5e84 in juce::Button::sendClickMessage(juce::ModifierKeys const&) juce_Button.cpp:408
    #26 0x1193c7d2e in juce::Button::internalClickCallback(juce::ModifierKeys const&) juce_Button.cpp:351
    #27 0x1193ca13d in juce::Button::mouseUp(juce::MouseEvent const&) juce_Button.cpp:471
    #28 0x119345f69 in juce::Component::internalMouseUp(juce::MouseInputSource, juce::Point<float>, juce::Time, juce::ModifierKeys, float, float, float, float, float) juce_Component.cpp:2434
    #29 0x1199a561e in juce::MouseInputSourceInternal::sendMouseUp(juce::Component&, juce::Point<float>, juce::Time, juce::ModifierKeys) juce_MouseInputSource.cpp:155
    #30 0x119999dea in juce::MouseInputSourceInternal::setButtons(juce::Point<float>, juce::Time, juce::ModifierKeys) juce_MouseInputSource.cpp:197
    #31 0x119364f6a in juce::MouseInputSourceInternal::handleEvent(juce::ComponentPeer&, juce::Point<float>, juce::Time, juce::ModifierKeys, float, float, juce::PenDetails) juce_MouseInputSource.cpp:334
    #32 0x119363503 in juce::MouseInputSource::handleEvent(juce::ComponentPeer&, juce::Point<float>, long long, juce::ModifierKeys, float, float, juce::PenDetails const&) juce_MouseInputSource.cpp:634
    #33 0x1198c09d4 in juce::ComponentPeer::handleMouseEvent(juce::MouseInputSource::InputSourceType, juce::Point<float>, juce::ModifierKeys, float, float, long long, juce::PenDetails, int) juce_ComponentPeer.cpp:88
    #34 0x119ca40a9 in juce::NSViewComponentPeer::sendMouseEvent(NSEvent*) juce_mac_NSViewComponentPeer.mm:725
    #35 0x119ca5301 in juce::NSViewComponentPeer::redirectMouseUp(NSEvent*) juce_mac_NSViewComponentPeer.mm:607
    #36 0x119c92fc5 in juce::JuceNSViewClass::asyncMouseUp(objc_object*, objc_selector*, NSEvent*) juce_mac_NSViewComponentPeer.mm:1675
    #37 0x7fff2eb480b4 in __NSThreadPerformPerform (Foundation:x86_64+0x680b4)
    #38 0x7fff2ca07010 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ (CoreFoundation:x86_64+0xa0010)
    #39 0x7fff2cabe8eb in __CFRunLoopDoSource0 (CoreFoundation:x86_64+0x1578eb)
    #40 0x7fff2c9e9fbf in __CFRunLoopDoSources0 (CoreFoundation:x86_64+0x82fbf)
    #41 0x7fff2c9e943c in __CFRunLoopRun (CoreFoundation:x86_64+0x8243c)
    #42 0x7fff2c9e8c96 in CFRunLoopRunSpecific (CoreFoundation:x86_64+0x81c96)
    #43 0x7fff2bcc8d95 in RunCurrentEventLoopInMode (HIToolbox:x86_64+0x2fd95)
    #44 0x7fff2bcc8a0e in ReceiveNextEventCommon (HIToolbox:x86_64+0x2fa0e)
    #45 0x7fff2bcc8883 in _BlockUntilNextEventMatchingListInModeWithFilter (HIToolbox:x86_64+0x2f883)
    #46 0x7fff29f78a72 in _DPSNextEvent (AppKit:x86_64+0x41a72)
    #47 0x7fff2a70ee33 in -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] (AppKit:x86_64+0x7d7e33)
    #48 0x7fff29f6d884 in -[NSApplication run] (AppKit:x86_64+0x36884)
    #49 0x7fff29f3ca71 in NSApplicationMain (AppKit:x86_64+0x5a71)
    #50 0x7fff549b9014 in start (libdyld.dylib:x86_64+0x1014)

0x60800010f2a8 is located 8 bytes inside of 88-byte region [0x60800010f2a0,0x60800010f2f8)
freed by thread T0 here:
    #0 0x10d2d8d32 in wrap__ZdlPv (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x61d32)
    #1 0x1188a12a7 in juce::ValueTree::SharedObject::~SharedObject() juce_ValueTree.cpp:51
    #2 0x1188a4ae9 in juce::ContainerDeletePolicy<juce::ValueTree::SharedObject>::destroy(juce::ValueTree::SharedObject*) juce_ContainerDeletePolicy.h:54
    #3 0x1188c565e in juce::ReferenceCountedObjectPtr<juce::ValueTree::SharedObject>::decIfNotNull(juce::ValueTree::SharedObject*) juce_ReferenceCountedObject.h:448
    #4 0x1188c55aa in juce::ReferenceCountedObjectPtr<juce::ValueTree::SharedObject>::~ReferenceCountedObjectPtr() juce_ReferenceCountedObject.h:374
    #5 0x11885ba5e in juce::ReferenceCountedObjectPtr<juce::ValueTree::SharedObject>::~ReferenceCountedObjectPtr() juce_ReferenceCountedObject.h:373
    #6 0x1188af297 in juce::ValueTree::SharedObject::AddOrRemoveChildAction::~AddOrRemoveChildAction() juce_ValueTree.cpp:476
    #7 0x1188ae96e in juce::ValueTree::SharedObject::AddOrRemoveChildAction::~AddOrRemoveChildAction() juce_ValueTree.cpp:476
    #8 0x1188ae9ce in juce::ValueTree::SharedObject::AddOrRemoveChildAction::~AddOrRemoveChildAction() juce_ValueTree.cpp:476
    #9 0x11887c2c9 in juce::UndoManager::perform(juce::UndoableAction*) memory:2285
    #10 0x1188625e2 in juce::ValueTree::SharedObject::addChild(juce::ValueTree::SharedObject*, int, juce::UndoManager*) juce_ValueTree.cpp:277
    #11 0x118868abf in juce::ValueTree::SharedObject::getOrCreateChildWithName(juce::Identifier const&, juce::UndoManager*) juce_ValueTree.cpp:221
    #12 0x1188685d1 in juce::ValueTree::getOrCreateChildWithName(juce::Identifier const&, juce::UndoManager*) juce_ValueTree.cpp:895
    #13 0x116ffd7bd in foleys::MagicGUIBuilder::createDefaultGUITree(bool) foleys_MagicGUIBuilder.cpp:502
    #14 0x116fe19da in foleys::MagicGUIBuilder::updateComponents() foleys_MagicGUIBuilder.cpp:161
    #15 0x116fe0b3a in foleys::MagicGUIBuilder::updateAll() foleys_MagicGUIBuilder.cpp:65
    #16 0x117063b8b in foleys::MagicGUIBuilder::valueTreeChildRemoved(juce::ValueTree&, juce::ValueTree&, int) foleys_MagicGUIBuilder.cpp:564
    #17 0x1188b42b2 in juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)::operator()(juce::ValueTree::Listener&) const juce_ValueTree.cpp:113
    #18 0x1188b3ff5 in void juce::ListenerList<juce::ValueTree::Listener, juce::Array<juce::ValueTree::Listener*, juce::DummyCriticalSection, 0> >::callExcluding<juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)&>(juce::ValueTree::Listener*, juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)&&&) juce_ListenerList.h:140
    #19 0x1188b38d9 in void juce::ValueTree::SharedObject::callListeners<juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)>(juce::ValueTree::Listener*, juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)) const juce_ValueTree.cpp:75
    #20 0x1188b3444 in void juce::ValueTree::SharedObject::callListenersForAllParents<juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)>(juce::ValueTree::Listener*, juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)) const juce_ValueTree.cpp:95
    #21 0x1188b3094 in juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int) juce_ValueTree.cpp:113
    #22 0x118869cd2 in juce::ValueTree::SharedObject::removeChild(int, juce::UndoManager*) juce_ValueTree.cpp:297
    #23 0x1188af182 in juce::ValueTree::SharedObject::AddOrRemoveChildAction::undo() juce_ValueTree.cpp:508
    #24 0x11888352f in juce::UndoManager::ActionSet::undo() const juce_UndoManager.cpp:47
    #25 0x1188830ae in juce::UndoManager::undo() juce_UndoManager.cpp:252
    #26 0x11750ecb8 in foleys::ToolBox::ToolBox(juce::Component*, foleys::MagicGUIBuilder&)::$_43::operator()() const foleys_ToolBox.cpp:89
    #27 0x11750ebb5 in _ZNSt3__128__invoke_void_return_wrapperIvE6__callIJRZN6foleys7ToolBoxC1EPN4juce9ComponentERNS3_15MagicGUIBuilderEE4$_43EEEvDpOT_ type_traits:4428
    #28 0x11750e587 in std::__1::__function::__func<foleys::ToolBox::ToolBox(juce::Component*, foleys::MagicGUIBuilder&)::$_43, std::__1::allocator<foleys::ToolBox::ToolBox(juce::Component*, foleys::MagicGUIBuilder&)::$_43>, void ()>::operator()() functional:1562
    #29 0x1185ff965 in std::__1::function<void ()>::operator()() const functional:1913

previously allocated by thread T0 here:
    #0 0x10d2d8752 in wrap__Znwm (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x61752)
    #1 0x118868a07 in juce::ValueTree::SharedObject::getOrCreateChildWithName(juce::Identifier const&, juce::UndoManager*) juce_ValueTree.cpp:220
    #2 0x1188685d1 in juce::ValueTree::getOrCreateChildWithName(juce::Identifier const&, juce::UndoManager*) juce_ValueTree.cpp:895
    #3 0x116ffd7bd in foleys::MagicGUIBuilder::createDefaultGUITree(bool) foleys_MagicGUIBuilder.cpp:502
    #4 0x116fe19da in foleys::MagicGUIBuilder::updateComponents() foleys_MagicGUIBuilder.cpp:161
    #5 0x116fe0b3a in foleys::MagicGUIBuilder::updateAll() foleys_MagicGUIBuilder.cpp:65
    #6 0x117063b8b in foleys::MagicGUIBuilder::valueTreeChildRemoved(juce::ValueTree&, juce::ValueTree&, int) foleys_MagicGUIBuilder.cpp:564
    #7 0x1188b42b2 in juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)::operator()(juce::ValueTree::Listener&) const juce_ValueTree.cpp:113
    #8 0x1188b3ff5 in void juce::ListenerList<juce::ValueTree::Listener, juce::Array<juce::ValueTree::Listener*, juce::DummyCriticalSection, 0> >::callExcluding<juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)&>(juce::ValueTree::Listener*, juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)&&&) juce_ListenerList.h:140
    #9 0x1188b38d9 in void juce::ValueTree::SharedObject::callListeners<juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)>(juce::ValueTree::Listener*, juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)) const juce_ValueTree.cpp:75
    #10 0x1188b3444 in void juce::ValueTree::SharedObject::callListenersForAllParents<juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)>(juce::ValueTree::Listener*, juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int)::'lambda'(juce::ValueTree::Listener&)) const juce_ValueTree.cpp:95
    #11 0x1188b3094 in juce::ValueTree::SharedObject::sendChildRemovedMessage(juce::ValueTree, int) juce_ValueTree.cpp:113
    #12 0x118869cd2 in juce::ValueTree::SharedObject::removeChild(int, juce::UndoManager*) juce_ValueTree.cpp:297
    #13 0x1188af182 in juce::ValueTree::SharedObject::AddOrRemoveChildAction::undo() juce_ValueTree.cpp:508
    #14 0x11888352f in juce::UndoManager::ActionSet::undo() const juce_UndoManager.cpp:47
    #15 0x1188830ae in juce::UndoManager::undo() juce_UndoManager.cpp:252
    #16 0x11750ecb8 in foleys::ToolBox::ToolBox(juce::Component*, foleys::MagicGUIBuilder&)::$_43::operator()() const foleys_ToolBox.cpp:89
    #17 0x11750ebb5 in _ZNSt3__128__invoke_void_return_wrapperIvE6__callIJRZN6foleys7ToolBoxC1EPN4juce9ComponentERNS3_15MagicGUIBuilderEE4$_43EEEvDpOT_ type_traits:4428
    #18 0x11750e587 in std::__1::__function::__func<foleys::ToolBox::ToolBox(juce::Component*, foleys::MagicGUIBuilder&)::$_43, std::__1::allocator<foleys::ToolBox::ToolBox(juce::Component*, foleys::MagicGUIBuilder&)::$_43>, void ()>::operator()() functional:1562
    #19 0x1185ff965 in std::__1::function<void ()>::operator()() const functional:1913
    #20 0x1193c5e84 in juce::Button::sendClickMessage(juce::ModifierKeys const&) juce_Button.cpp:408
    #21 0x1193c7d2e in juce::Button::internalClickCallback(juce::ModifierKeys const&) juce_Button.cpp:351
    #22 0x1193ca13d in juce::Button::mouseUp(juce::MouseEvent const&) juce_Button.cpp:471
    #23 0x119345f69 in juce::Component::internalMouseUp(juce::MouseInputSource, juce::Point<float>, juce::Time, juce::ModifierKeys, float, float, float, float, float) juce_Component.cpp:2434
    #24 0x1199a561e in juce::MouseInputSourceInternal::sendMouseUp(juce::Component&, juce::Point<float>, juce::Time, juce::ModifierKeys) juce_MouseInputSource.cpp:155
    #25 0x119999dea in juce::MouseInputSourceInternal::setButtons(juce::Point<float>, juce::Time, juce::ModifierKeys) juce_MouseInputSource.cpp:197
    #26 0x119364f6a in juce::MouseInputSourceInternal::handleEvent(juce::ComponentPeer&, juce::Point<float>, juce::Time, juce::ModifierKeys, float, float, juce::PenDetails) juce_MouseInputSource.cpp:334
    #27 0x119363503 in juce::MouseInputSource::handleEvent(juce::ComponentPeer&, juce::Point<float>, long long, juce::ModifierKeys, float, float, juce::PenDetails const&) juce_MouseInputSource.cpp:634
    #28 0x1198c09d4 in juce::ComponentPeer::handleMouseEvent(juce::MouseInputSource::InputSourceType, juce::Point<float>, juce::ModifierKeys, float, float, long long, juce::PenDetails, int) juce_ComponentPeer.cpp:88
    #29 0x119ca40a9 in juce::NSViewComponentPeer::sendMouseEvent(NSEvent*) juce_mac_NSViewComponentPeer.mm:725

SUMMARY: AddressSanitizer: heap-use-after-free atomic:1020 in juce::Atomic<int>::operator++()

Default plugin size

Hi ffAudio,

Thanks so much for this module, I've been using it on a couple projects now, and really love it!

It seems like the default plugin window size is 600 x 400, and I was wondering if there's a way to customize this? I tried changing the dimension parameters of the root view, but that didn't seem to work. What did work was hardcoding values in MagicPluginEditor::updateSize():

void MagicPluginEditor::updateSize()
{
    int width = builder->getStyleProperty (IDs::width, builder->getGuiRootNode());
    if (width < 10) width = 600;
    int height = builder->getStyleProperty (IDs::height, builder->getGuiRootNode());
    if (height < 10) height = 600; // I changed this from the default (400)
    
   // rest of function ...
}

Is there a better way to do this? Or if this is the best way to do it, it would be nice if the default dimensions could be set as arguments to the constructor, i.e.

return new foleys::MagicPluginEditor (magicState, BinaryData::myGUI, BinaryData::myGUI_size, width, height);

Thanks,
Jatin

Adding XYComponent triggers assert

When I drag an XYComponent into the View tree it always triggers an assert in juce_GraphicsContext.cpp here :

Rectangle<Type> coordsToRectangle (Type x, Type y, Type w, Type h) noexcept
    {
       #if JUCE_DEBUG
        const int maxVal = 0x3fffffff;

        jassert ((int) x >= -maxVal && (int) x <= maxVal
              && (int) y >= -maxVal && (int) y <= maxVal
              && (int) w >= 0 && (int) w <= maxVal
              && (int) h >= 0 && (int) h <= maxVal);
       #endif

To verify

  1. Create a new Plugin Project in the Projucer,
  2. Add the module
  3. Launch VS 2019
  4. add :
    AudioProcessorValueTreeState treeState{ *this, nullptr };
    foleys::MagicProcessorState magicState{ *this, treeState };

To PluginProcessor.h,

5: Create the MagicPluginEditor in PluginProcessor.cpp : createEditor()

return new foleys::MagicPluginEditor(magicState);

  1. Run the standalone in Debug

  2. drag the XYComponent from the component pallette onto the View(root) node.

This happens for me both in the master and develop branches.

xyDragComponent, return to default

(Mac, XCode 10.1, Standalone-Build)
1)
in 1.10 here the xyDragComponent never paints the parameters.
When bringing the old code back to line 410 in foleysMagicJuceFactories.cpp
it works again:
instead of just //return std::unique_ptr();
```
if (auto* magicState = getProcessorState())
{
auto item = std::make_unique(magicState->getValueTreeState());

                         auto paramX = config.getProperty (IDs::parameterX).toString();
                         if (paramX.isNotEmpty())
                             item->setParameterX (paramX);
                         
                         auto paramY = config.getProperty (IDs::parameterY).toString();
                         if (paramY.isNotEmpty())
                             item->setParameterY (paramY);
                         
                         return std::move (item);
                     }
                     else
                     {
                         return std::unique_ptr<XYDragComponent>();
                     }
2)
if a colourSelect field "x"-Button  in the Editor-Tool is not editable, and you change the fields value (set a new colour), after that you are not able to return to the default value, because the "x" Button is still not enabled. After selecting another node and coming back the "x" Button is enabled and you can return to the default value.

Editing (Style) Class never possible

Editing a Node still works, but editing Classes or Types is never possible. The labels are not editable, the elements are not expandable, V 1.0.8

xyDragComponent, return to default

(Mac, XCode 10.1, Standalone-Build)
1)
in 1.10 here the xyDragComponent never paints the parameters.
When bringing the old code back to line 410 in foleysMagicJuceFactories.cpp
it works again:
instead of just //return std::unique_ptr();

                         if (auto* magicState = getProcessorState())
                         {
                             auto item = std::make_unique<XYDragComponent>(magicState->getValueTreeState());
                             
                             auto paramX = config.getProperty (IDs::parameterX).toString();
                             if (paramX.isNotEmpty())
                                 item->setParameterX (paramX);
                             
                             auto paramY = config.getProperty (IDs::parameterY).toString();
                             if (paramY.isNotEmpty())
                                 item->setParameterY (paramY);
                             
                             return std::move (item);
                         }
                         else
                         {
                             return std::unique_ptr<XYDragComponent>();
                         }

if a colourSelect field "x"-Button in the Editor-Tool is not editable, and you change the fields value (set a new colour), after that you are not able to return to the default value, because the "x" Button is still not enabled. After selecting another node and coming back the "x" Button is enabled and you can return to the default value.

Dealing with Sound Artificats, Static, Popping when changing Gain Values with Sliders

I have a general question about the best way to deal with unwanted clicking/popping noises when using GUI Magic in a JUCE project.

I have started a simple project based off of your Equalizer Example, the JUCE ASIO driver and a Scarlett Interface (nothing fancy just plugging a guitar in and testing).

The first thing I notice when adjusting the output slider either way while audio is playing are Sound Artifacts as clicks and pops. I have read and watch videos where this is addressed by implementing Gain Ramps. So before getting to involved in this project, I was wondering what the recommended way of handling this would be?

Most of the examples I see for JUCE use a native GUI or something like GenericAudioProcessorEditor. Is there anything specific related to GUI Magic I should research or should I approach just like any standard JUCE project?

Thanks for your help

ComboBox Not Displaying Selected Value

I'm sure there is something wrong in my configuration but I can't seem to get the combo box to display the selected value.

I.E. In the Equalizer Example the Filter Type combo box/drop down menu displays the name of the selected item.

image

Does the combo box function like this by default or is there something else I need to configure to get my combo boxes to show their selected values?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.