Questions about JUCE capabilities for a large vector-drawing app


Hello. I am looking at JUCE, to move away from strictly Mac OS X development, for my app. I see that JUCE is mainly focused on audio, but it also seems capable for other types of apps. I saw that Cycling '75 is also using it and their apps are definitely not limited to audio.

So far I can see that JUCE maps onto Quartz (or Cocoa Drawing), but I cannot find references to printing in the JUCE framework. Are there no printing classes?

What does it take to write custom code where JUCE does not have a certain set of capabilities? Is there a guide explaining how to write custom Windows code for the Window build, custom Mac code for the Mac build, etc.?

Also not apparent to me yet is how you would write all of your code in say, a Visual Studio project, and then create an XCode project after finishing a Windows version of the app. I suppose that you do that in the Projucer, but I do find that app confusing.


Yes, we have an app built on JUCE which is not an audio app. JUCE has a lot of general purpose features built in (vector drawing, basic image IO, simple networking…).

We also have added a few features which weren’t supported out of the box. The JUCE source code is quite readable, as long as you understand the native APIs you have to use you should be able to add these extras if necessary.

A thing it doesn’t do is indeed printing, another one which may be of interest is any kind of modern font rendering: complex scripts, ligatures, emoji, and font fallback are not supported by all widgets.

The projucer → you’ll get used to it. If not you can add JUCE to your project without it but you’ll have to maintain all your projects on various platforms in parallel.


Some positives with JUCE for me include the a key-value tree (ValueTree) with its listeners and a recent video using that to maintain program graphs. I think that could be a good way to move in app development for me, but I am still picking up C++ from Obj-C. ValueTree looks like the sort of thing that could reduce the number of people I need to help me on this.