/////////////////////////////////////////////////////////////////////////////
-// Name: src/osx/carbon/fontdlgosx.cpp
+// Name: src/osx/carbon/fontdlgosx.mm
// Purpose: wxFontDialog class.
// Author: Ryan Norton
// Modified by:
#endif
#include "wx/fontutil.h"
+#include "wx/testing.h"
// ============================================================================
// implementation
extern "C" int RunMixedFontDialog(wxFontDialog* dialog) ;
-int RunMixedFontDialog(wxFontDialog* WXUNUSED(dialog))
+int RunMixedFontDialog(wxFontDialog* dialog)
{
+#if wxOSX_USE_COCOA
+ wxFontData& fontdata= ((wxFontDialog*)dialog)->GetFontData() ;
+#else
+ wxUnusedVar(dialog);
+#endif
int retval = wxID_CANCEL ;
- if ( !NSApplicationLoad() )
- {
- wxFAIL_MSG("Couldn't load Cocoa in Carbon Environment");
- }
-
wxAutoNSAutoreleasePool pool;
// setting up the ok/cancel buttons
NSRect rectBox = NSMakeRect( 0 , 0 , 192 , 40 );
accessoryView = [[wxMacFontPanelAccView alloc] initWithFrame:rectBox];
[fontPanel setAccessoryView:accessoryView];
+ [accessoryView release];
[fontPanel setDefaultButtonCell:[[accessoryView okButton] cell]] ;
}
[accessoryView resetFlags];
+#if wxOSX_USE_COCOA
+ wxFont font = *wxNORMAL_FONT ;
+ if ( fontdata.m_initialFont.IsOk() )
+ {
+ font = fontdata.m_initialFont ;
+ }
- NSModalSession session = [NSApp beginModalSessionForWindow:fontPanel];
-
- [NSApp runModalSession:session];
-
- [NSApp endModalSession:session];
+ [[NSFontPanel sharedFontPanel] setPanelFont: font.OSXGetNSFont() isMultiple:NO];
+ if(fontdata.m_fontColour.IsOk())
+ [[NSColorPanel sharedColorPanel] setColor:
+ [NSColor colorWithCalibratedRed:fontdata.m_fontColour.Red() / 255.0
+ green:fontdata.m_fontColour.Green() / 255.0
+ blue:fontdata.m_fontColour.Blue() / 255.0
+ alpha:1.0]
+ ];
+ else
+ [[NSColorPanel sharedColorPanel] setColor:[NSColor blackColor]];
+#endif
+
+ [NSApp runModalForWindow:fontPanel];
+
// if we don't reenable it, FPShowHideFontPanel does not work
[[fontPanel standardWindowButton:NSWindowCloseButton] setEnabled:YES] ;
#if wxOSX_USE_CARBON
if( FPIsFontPanelVisible())
FPShowHideFontPanel() ;
+#else
+ [fontPanel close];
#endif
if ( [accessoryView closedWithOk])
{
+#if wxOSX_USE_COCOA
+ NSFont* theFont = [fontPanel panelConvertFont:[NSFont userFontOfSize:0]];
+
+ fontdata.m_chosenFont = wxFont( theFont );
+
+ //Get the shared color panel along with the chosen color and set the chosen color
+ NSColor* theColor = [[[NSColorPanel sharedColorPanel] color] colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
+
+ fontdata.m_fontColour.Set((unsigned char) ([theColor redComponent] * 255.0),
+ (unsigned char) ([theColor greenComponent] * 255.0),
+ (unsigned char) ([theColor blueComponent] * 255.0));
+#endif
retval = wxID_OK ;
}
-
+ [fontPanel setAccessoryView:nil];
return retval ;
}
{
}
+wxFontDialog::wxFontDialog(wxWindow *parent)
+{
+ Create(parent);
+}
+
wxFontDialog::wxFontDialog(wxWindow *parent, const wxFontData& data)
{
Create(parent, data);
{
}
+bool wxFontDialog::Create(wxWindow *parent)
+{
+ return Create(parent);
+}
+
bool wxFontDialog::Create(wxWindow *parent, const wxFontData& data)
{
m_fontData = data;
- //
- // This is the key call - this initializes
- // events and window stuff for cocoa for carbon
- // applications.
- //
- // This is also the only call here that is
- // 10.2+ specific (the rest is OSX only),
- // which, ironically, the carbon font
- // panel requires.
- //
- bool bOK = NSApplicationLoad();
+ return Create(parent);
+}
+bool wxFontDialog::Create(wxWindow *parent)
+{
//autorelease pool - req'd for carbon
NSAutoreleasePool *thePool;
thePool = [[NSAutoreleasePool alloc] init];
//if the font is valid set the default (selected) font of the
//NSFontDialog to that font
- if (thewxfont.Ok())
+ if (thewxfont.IsOk())
{
NSFontTraitMask theMask = 0;
}
- if(m_fontData.m_fontColour.Ok())
+ if(m_fontData.m_fontColour.IsOk())
[[NSColorPanel sharedColorPanel] setColor:
[NSColor colorWithCalibratedRed:m_fontData.m_fontColour.Red() / 255.0
green:m_fontData.m_fontColour.Green() / 255.0
//We're done - free up the pool
[thePool release];
- return bOK;
+ return true;
}
int wxFontDialog::ShowModal()
{
+ WX_TESTING_SHOW_MODAL_HOOK();
+
//Start the pool. Required for carbon interaction
//(For those curious, the only thing that happens
//if you don't do this is a bunch of error
// the color panel until the color panel closes, switching
// back to the font panel modal loop once it does close.
//
+ wxDialog::OSXBeginModalDialog();
do
{
//
//out of its modal loop because the color panel was
//opened) return the font panel modal loop
}while([theFPDelegate isClosed] == NO);
-
+ wxDialog::OSXEndModalDialog();
+
//free up the memory for the delegates - we don't need them anymore
[theFPDelegate release];
[theCPDelegate release];