To put this post in a nutshell: migrating from version 1.46 to 1.51 has not gone smoothly for me.
I’m just going to make a numbered list, but (for me) the first one is by far the most important.
Also to anticipate a first suggestion/question: I have tried to use the tip revision, but it generated hundreds of errors in my code (even more than going from 1.46 to 1.51). I’m sure they are trivial to fix, but the amount of code I’d have to touch would make it a time consuming experiment. I say “experiment” because I wouldn’t feel comfortable doing a public release of our application using a beta version of Juce.
Font rendering has become blurry and grainy. I’m using Verdana in several sizes and weights, and the quality has degraded across the board. This problem has already been mentioned in the forum: http://www.rawmaterialsoftware.com/viewtopic.php?f=2&t=4746&start=0. Jules, I’m not sure what the current status of this is, but from my perspective the quality is such that I would have to keep using 1.46.
The opacity of Drawable objects gets ignored under certain conditions. I have a Drawable object, created from an SVG file, which I draw when the component’s paint function gets called. Something like this: drawble_obj->drawWithin( g, 0, 0, getWidth(), getHeight(), RectanglePlacement::centred, 0.3f ); The opacity is always treated as 1.0 (except if I pass in 0). In 1.51, drawWithin() boils down to a call to DrawableComposite::render().
void DrawableComposite::render (const Drawable::RenderingContext& context) const
if (drawables.size() > 0 && context.opacity > 0)
if (context.opacity >= 1.0f || drawables.size() == 1)
Drawable::RenderingContext contextCopy (context);
I think the problem comes down to the ‘drawables.size() == 1’ check, which in my case is always true and the rendering is then always done with an opacity of 1.0.
- It seems that the ‘const tchar* const’ form of functions has mostly been removed. The problem I ran into relates specifically to PropertySet::setValue (const String& keyName, const tchar* const value); however it could potentially exist in other places as well. For example, in 1.46 a call like setValue( keyName, T(“The Key Value”)) would be fine. In 1.51 (this is with VC 2008), it compiles without warning, but the T(“The Key Value”) argument is automatically converted to a bool and then uses the bool version of setValue(). Obviously not the desired result. One would expect the compiler to generate a warning here, but even at the strictest level it didn’t complain. I also tried turning off wchar_t as in internal type (/Zc:wchar_t-). This created dozens of linker errors for me though (and maybe correctly so).
Granted, this is not a problem with Juce, but it is an example of unexpected consequences related to an interface change. Jules, I’m curious as to why you changed it?
- The UI/graphic performance on debug builds has become really slow. Is this expected, or could it be pointing to something I’m doing wrong with my app? I know it’s not really a big deal since the release performance is fine. It just makes debugging a bit tedious.
Apologies for the length of this post. Any suggestions or help is appreciated.