v1.24


#1

Ok, latest version’s up there for your delectation…

Changes are:

* more flexible gradient control, allowing sequences of colours
* new class: DocumentWindow, which is a resizable window with a titlebar, nice-looking maximise/minimise/close buttons, a menubar, and lots of cool options.
* improved the ability for ResizableWindows to be used as child components as well as on the desktop, without them losing their drop-shadows
* eye-candy changes to ShinyLookAndFeel, adding glassy-looking buttons
* added a JUCE_VERSION macro to allow conditional builds against different juce versions
* added an option to PopupMenu that allows any component to be easily added as a custom component, rather than only ones derived from PopupMenuCustomComponent.
* made the win32 crt memory debugging overrides conditional with JUCE_CHECK_MEMORY_LEAKS macro in juce_Config.h
* new class: LassoComponent for easy lassoing of groups of UI objects
* additions to SelectedItemSet to improve the logic used when multi-selecting items that might be dragged.
* handy new method: File::replaceWithText()
* new class: RecentlyOpenedFilesList
* updated some crt function names for compatibility with the latest msvc pro
* misc fixes to glyph layout, text editor listener callbacks + lots of other things.
* new class: ComponentBoundsConstrainer for more flexible control over resizing and dragging components around. This replaces the ResizableBase class.
* popup menus now accept keyboard navigation (not done this for jumping between them on menubars yet, though)

There’s also a new JuceDemo up there, and a JuceAudioPlugin. The audio plugin now includes some classes to help create stand-alone versions of the plugin.


#2

Sweet.


#3

ooh thats a good one jules.

half of those are of immediate use.

I like your use of telepathy for feature requests. you should maybe sell that technology. would clean up a few forums I frequent.


#4

Hmm, trying to compile my synth with the new JAP, I just replaced the wrapper folder as usual.

LINK : fatal error LNK1181: cannot open input file 'obj\wrapper\formats\VST\JuceVstWrapper.obj'

There is apparently no obj file produced for the wrapper? Do I need to alter something in my project settings?

EDIT> Big DOH. JuceVstWrapper is renamed to Juce_VstWrapper :smiley:


#5

Awesome, looks like a lot of cool useful stuff there. :smiley:


#6

I downloaded the demo, but it looks like it’s still using the old shiny look and feel.

Matt


#7

The source is updated though. If you got an environment set up it only takes a moment to compile the demo. Jules posted a new demo here though: http://www.adbe.org/juceforum/viewtopic.php?t=582

They look much the same to me. The sliders are still not lickable though?


#8

Ewww… :?


#9

Looking very nice indeed. Don’t suppose that with that abstraction of Graphics and such that you are doing, that it would be easier to add printing support? (Yes, even with how much I hate paper, it is nice to print reports from my thing to give to laymen…)


#10

That is part of the reason for the new Graphics stuff…


#11

Jules, I think you’ve forgotten to upload the new demo.
While you are at it you should change the demo size on the website (it is more 1.2Mb than 400kb).

Sincerely,


#12

While we’re picking at nits…
any chance you could update the pre-compiled windows help-file, as well? (or is this something i can easily do myself, offline? which app are you using to generate it? doxygen?)

it’s handy to use while offline (ie., on an airplane over the sea)…


#13

err, yeah.
um, ignore that… it seems as though it is updated. whoops.


#14

Jules, I think you’ve forgotten to upload the new demo.
While you are at it you should change the demo size on the website (it is more 1.2Mb than 400kb).

Sincerely,[/quote]

yeah, I know. Will get round to it soon…


#15

Hi Jules,
Is there a reason that void buttonClicked (Button* button) is defined as private in DocumentWindow class?

I am using DialogWindow and need to add some buttons so have overridden this function and call DialogWindow::buttonClicked(button) in it;

It was possible with 1.21 but not with 1.24.
Of course having source code I can solve my problem but just needed to be sure.

By the way,
What you have is fantastic; I hope one day it can be fully accelerated on all platforms.


#16

Hi Jules,

Did you changed the behavior of Component::addToDesktop()?

I’m using it in my code since I want to use native window title bar. Following is the part of my code that works correctly in JUCE 1.23. But in JUCE 1.24, they are shown as a two different window. I’m passing an ResizableWindow for the child component of my native window.

[code]//------------------------------------------------------------------------------
// KfcWindowAttrToMacWindowAttr
// Last modified 2005/12/02
//------------------------------------------------------------------------------
static WindowAttributes KfcWindowAttrToMacWindowAttr(unsigned int iAttr)
{
WindowAttributes iMacAttr = kWindowStandardHandlerAttribute;

//iMacAttr |= kWindowMetalAttribute;	//	Metal!

if (iAttr & kKfcWindowAttrCloseBox)			iMacAttr |= kWindowCloseBoxAttribute;
if (iAttr & kKfcWindowAttrHorizontalZoom)	iMacAttr |= kWindowHorizontalZoomAttribute;
if (iAttr & kKfcWindowAttrVerticalZoom)		iMacAttr |= kWindowVerticalZoomAttribute;
if (iAttr & kKfcWindowAttrCollapseBox)		iMacAttr |= kWindowCollapseBoxAttribute;
if (iAttr & kKfcWindowAttrResizable)		iMacAttr |= kWindowResizableAttribute;
if (iAttr & kKfcWindowAttrSideTitlebar)		iMacAttr |= kWindowSideTitlebarAttribute;
if (iAttr & kKfcWindowAttrNoUpdates)		iMacAttr |= kWindowNoUpdatesAttribute;
if (iAttr & kKfcWindowAttrNoActivates)		iMacAttr |= kWindowNoActivatesAttribute;
if (iAttr & kKfcWindowAttrOpaqueForEvents)	iMacAttr |= kWindowOpaqueForEventsAttribute;
if (iAttr & kKfcWindowAttrNoShadow)			iMacAttr |= kWindowNoShadowAttribute;
if (iAttr & kKfcWindowAttrHideOnSuspend)	iMacAttr |= kWindowHideOnSuspendAttribute;
if (iAttr & kKfcWindowAttrStandardHandler)	iMacAttr |= kWindowStandardHandlerAttribute;
if (iAttr & kKfcWindowAttrHideOnFullScreen)	iMacAttr |= kWindowHideOnFullScreenAttribute;
if (iAttr & kKfcWindowAttrInWindowMenu)		iMacAttr |= kWindowInWindowMenuAttribute;
if (iAttr & kKfcWindowAttrLiveResize)		iMacAttr |= kWindowLiveResizeAttribute;

return iMacAttr;

}

bool CKfcNativeWindow::Create(const String& sName, int iX, int iY, int iWidth, int iHeight, int iAttr, CKfcMenuBar* pMenuBar, CKfcNativeWindow* pParent)
{
bool bRet = false;

OSStatus			iErr;
Rect				mMacRect;
WindowAttributes	iMacAttr;
WindowRef			pMacWindow;
int					iMacMBarHeight = ::GetMBarHeight();
int					iMacWindowTitleHeight = 22;	//	wow, don't specify it...

mMacRect.left	= iX;
mMacRect.top	= iMacMBarHeight + iMacWindowTitleHeight + iY;
mMacRect.right	= iX + iWidth;
mMacRect.bottom	= iY + iHeight;

iMacAttr = KfcWindowAttrToMacWindowAttr(iAttr);

iErr = ::CreateNewWindow(kDocumentWindowClass, iMacAttr, &mMacRect, &pMacWindow);

if ((pMacWindow) && (iErr == noErr)) {

	SetNativeHandle(pMacWindow);
	InstallEventHandler(this, pMacWindow);
	GetChildComponent()->addToDesktop(0, pMacWindow);
	GetChildComponent()->setBounds(iX, iY, iWidth, iHeight);

	CFStringRef pCFStrCaption = PlatformUtilities::juceStringToCFString(sName);
	if (pCFStrCaption) {
		::SetWindowTitleWithCFString(pMacWindow, pCFStrCaption);
		::CFRelease(pCFStrCaption);
		bRet = true;
	}
}

return bRet;

}[/code]


#17

DocumentWindow is like ResizableWindow and such in that you add a component for it to display, but it itself you really don’t alter sans handling close events and such. What buttons are you needing to add?


#18

[quote=“Chance”]Hi Jules,
Is there a reason that void buttonClicked (Button* button) is defined as private in DocumentWindow class?

I am using DialogWindow and need to add some buttons so have overridden this function and call DialogWindow::buttonClicked(button) in it;

It was possible with 1.21 but not with 1.24.
Of course having source code I can solve my problem but just needed to be sure.

By the way,
What you have is fantastic; I hope one day it can be fully accelerated on all platforms.[/quote]

hmm - sorry, I didn’t mean to make it private. I should really have used another class to handle the events so that DocumentWindow didn’t have to be a ButtonListener at all… but you really oughtn’t to be using the DocumentWindow as a ButtonListener either - that sort of thing belongs in your content component class!


#19

I’m getting 16 “conversion from ‘const double’ to ‘float’, possible loss of data” warnings in VC++.NET 2003… not a problem just thought you might want to know as I’ve never had any warnings compiling previous JUCE versions.


#20

Really? I turned a lot more warnings on for this build, though don’t get any warnings in vcexpress. If you post a copy of the list I’ll tidy it up for next time.