cleanup OSX native font dialog stuff a bit (it should prob. be an option in configure
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30574 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1668,6 +1668,9 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
|
|||||||
src/unix/snglinst.cpp
|
src/unix/snglinst.cpp
|
||||||
<!-- wxWebKit files -->
|
<!-- wxWebKit files -->
|
||||||
src/html/htmlctrl/webkit/webkit.mm
|
src/html/htmlctrl/webkit/webkit.mm
|
||||||
|
<!-- Native color/font dialogs -->
|
||||||
|
src/mac/carbon/fontdlg.mm
|
||||||
|
src/mac/carbon/colordlg.mm
|
||||||
</if>
|
</if>
|
||||||
</set>
|
</set>
|
||||||
|
|
||||||
|
@@ -65,7 +65,13 @@ protected:
|
|||||||
// platform-specific wxFontDialog implementation
|
// platform-specific wxFontDialog implementation
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#if defined( __WXMAC_OSX__ ) && ( MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2 )
|
||||||
|
//set to 1 to use native mac font and color dialogs
|
||||||
#define USE_NATIVE_FONT_DIALOG_FOR_MACOSX 0
|
#define USE_NATIVE_FONT_DIALOG_FOR_MACOSX 0
|
||||||
|
#else
|
||||||
|
//not supported on these platforms, leave 0
|
||||||
|
#define USE_NATIVE_FONT_DIALOG_FOR_MACOSX 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__WXUNIVERSAL__) || \
|
#if defined(__WXUNIVERSAL__) || \
|
||||||
defined(__WXMOTIF__) || \
|
defined(__WXMOTIF__) || \
|
||||||
|
@@ -15,6 +15,10 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/mac/colordlg.h"
|
#include "wx/mac/colordlg.h"
|
||||||
|
#include "wx/fontdlg.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if !USE_NATIVE_FONT_DIALOG_FOR_MACOSX
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
#if !USE_SHARED_LIBRARY
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxColourDialog, wxDialog)
|
IMPLEMENT_DYNAMIC_CLASS(wxColourDialog, wxDialog)
|
||||||
@@ -68,3 +72,4 @@ int wxColourDialog::ShowModal()
|
|||||||
return wxID_CANCEL;
|
return wxID_CANCEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@@ -34,7 +34,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxColourDialog, wxDialog)
|
|||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
//Mac OSX 10.2+ only
|
//Mac OSX 10.2+ only
|
||||||
#if USE_NATIVE_FONT_DIALOG_FOR_MACOSX && defined( __WXMAC_OSX__ ) && ( MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2 )
|
#if USE_NATIVE_FONT_DIALOG_FOR_MACOSX
|
||||||
|
|
||||||
// Cocoa headers
|
// Cocoa headers
|
||||||
#include "wx/cocoa/autorelease.h"
|
#include "wx/cocoa/autorelease.h"
|
||||||
@@ -191,55 +191,5 @@ int wxColourDialog::ShowModal()
|
|||||||
return wxID_OK;
|
return wxID_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
#include "wx/mac/private.h"
|
|
||||||
#ifndef __DARWIN__
|
|
||||||
#include <ColorPicker.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* wxColourDialog
|
|
||||||
*/
|
|
||||||
|
|
||||||
wxColourDialog::wxColourDialog()
|
|
||||||
{
|
|
||||||
m_dialogParent = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
wxColourDialog::wxColourDialog(wxWindow *parent, wxColourData *data)
|
|
||||||
{
|
|
||||||
Create(parent, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxColourDialog::Create(wxWindow *parent, wxColourData *data)
|
|
||||||
{
|
|
||||||
m_dialogParent = parent;
|
|
||||||
|
|
||||||
if (data)
|
|
||||||
m_colourData = *data;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int wxColourDialog::ShowModal()
|
|
||||||
{
|
|
||||||
Point where ;
|
|
||||||
RGBColor currentColor = *((RGBColor*)m_colourData.m_dataColour.GetPixel()) , newColor ;
|
|
||||||
|
|
||||||
where.h = where.v = -1;
|
|
||||||
|
|
||||||
if (GetColor( where, "\pSelect a new palette color.", ¤tColor, &newColor ))
|
|
||||||
{
|
|
||||||
m_colourData.m_dataColour.Set( (WXCOLORREF*) &newColor ) ;
|
|
||||||
return wxID_OK;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return wxID_CANCEL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return wxID_CANCEL;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif //use native font dialog
|
#endif //use native font dialog
|
||||||
|
|
||||||
|
@@ -32,7 +32,10 @@
|
|||||||
#include "wx/cmndata.h"
|
#include "wx/cmndata.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/mac/fontdlg.h"
|
#include "wx/fontdlg.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if !USE_NATIVE_FONT_DIALOG_FOR_MACOSX
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
#if !USE_SHARED_LIBRARY
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog)
|
IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog)
|
||||||
@@ -40,223 +43,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog)
|
|||||||
|
|
||||||
#include "wx/mac/private.h"
|
#include "wx/mac/private.h"
|
||||||
|
|
||||||
//Mac OSX 10.2+ only
|
|
||||||
#if defined( __WXMAC__ ) && TARGET_API_MAC_OSX && ( MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2 )
|
|
||||||
|
|
||||||
#include <ATSUnicode.h>
|
|
||||||
|
|
||||||
#include "wx/msgdlg.h"
|
|
||||||
|
|
||||||
//color isn't working in carbon impl
|
|
||||||
#define ISCOLORWORKING 0
|
|
||||||
|
|
||||||
// ============================================================================
|
|
||||||
// implementation
|
|
||||||
// ============================================================================
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
// Carbon event callback(s)
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
pascal OSStatus wxFontDialogEventHandler( EventHandlerCallRef inHandlerCallRef,
|
|
||||||
EventRef event, void* pData)
|
|
||||||
{
|
|
||||||
wxASSERT(GetEventClass(event) == kEventClassFont &&
|
|
||||||
GetEventKind(event) == kEventFontSelection);
|
|
||||||
|
|
||||||
OSStatus status = noErr;
|
|
||||||
|
|
||||||
FMFontFamily fontfamily;
|
|
||||||
FMFontStyle fontstyle;
|
|
||||||
FMFontSize fontsize;
|
|
||||||
#if ISCOLORWORKING
|
|
||||||
RGBColor fontcolor;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
status = GetEventParameter (event, kEventParamFMFontFamily,
|
|
||||||
typeFMFontFamily, NULL,
|
|
||||||
sizeof (FMFontFamily),
|
|
||||||
NULL, &(fontfamily));
|
|
||||||
check_noerr (status);
|
|
||||||
|
|
||||||
status = GetEventParameter (event, kEventParamFMFontStyle,
|
|
||||||
typeFMFontStyle, NULL,
|
|
||||||
sizeof (FMFontStyle),
|
|
||||||
NULL, &(fontstyle));
|
|
||||||
check_noerr (status);
|
|
||||||
|
|
||||||
status = GetEventParameter (event, kEventParamFMFontSize,
|
|
||||||
typeFMFontSize, NULL,
|
|
||||||
sizeof (FMFontSize),
|
|
||||||
NULL, &(fontsize));
|
|
||||||
|
|
||||||
check_noerr (status);
|
|
||||||
|
|
||||||
#if ISCOLORWORKING
|
|
||||||
status = GetEventParameter (event, kEventParamFontColor,
|
|
||||||
typeRGBColor, NULL,
|
|
||||||
sizeof( RGBColor ), NULL, &fontcolor);
|
|
||||||
check_noerr (status);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//now do the conversion to the wx font data
|
|
||||||
wxFontData theFontData;
|
|
||||||
wxFont theFont;
|
|
||||||
|
|
||||||
#if ISCOLORWORKING
|
|
||||||
//set color
|
|
||||||
wxColour theColor;
|
|
||||||
theColor.Set(&(WXCOLORREF&)fontcolor);
|
|
||||||
theFontData.SetColour(theColor);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//set size
|
|
||||||
theFont.SetPointSize(fontsize);
|
|
||||||
|
|
||||||
//set name
|
|
||||||
Str255 theFontName;
|
|
||||||
GetFontName(fontfamily, theFontName);
|
|
||||||
theFont.SetFaceName(wxMacMakeStringFromPascal(theFontName));
|
|
||||||
|
|
||||||
//TODOTODO: Get font family - mayby by the script code?
|
|
||||||
theFont.SetFamily(wxDEFAULT);
|
|
||||||
|
|
||||||
//TODOTODO: Get other styles?
|
|
||||||
theFont.SetStyle(((fontstyle & italic) ? wxFONTSTYLE_ITALIC : 0));
|
|
||||||
theFont.SetWeight((fontstyle & bold) ? wxBOLD : wxNORMAL);
|
|
||||||
theFont.SetUnderlined(((fontstyle & underline) ? true : false));
|
|
||||||
|
|
||||||
//phew!! We're done - set the chosen font
|
|
||||||
theFontData.SetChosenFont(theFont);
|
|
||||||
((wxFontDialog*)pData)->SetData(theFontData);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFINE_ONE_SHOT_HANDLER_GETTER( wxFontDialogEventHandler );
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
// wxFontDialog
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
wxFontDialog::wxFontDialog() :
|
|
||||||
m_dialogParent(NULL), m_pEventHandlerRef(NULL)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
wxFontDialog::wxFontDialog(wxWindow *parent, const wxFontData& data)
|
|
||||||
{
|
|
||||||
Create(parent, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
wxFontDialog::~wxFontDialog()
|
|
||||||
{
|
|
||||||
if (m_pEventHandlerRef)
|
|
||||||
::RemoveEventHandler((EventHandlerRef&)m_pEventHandlerRef);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxFontDialog::SetData(wxFontData& fontdata)
|
|
||||||
{
|
|
||||||
m_fontData = fontdata;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxFontDialog::Create(wxWindow *parent, const wxFontData& data)
|
|
||||||
{
|
|
||||||
m_dialogParent = parent;
|
|
||||||
m_fontData = data;
|
|
||||||
|
|
||||||
//Register the events that will return this dialog
|
|
||||||
EventTypeSpec ftEventList[] = { { kEventClassFont, kEventFontSelection } };
|
|
||||||
|
|
||||||
OSStatus err = noErr;
|
|
||||||
|
|
||||||
//FIXMEFIXME: Why doesn't it recieve events if there's a parent?
|
|
||||||
// if (parent)
|
|
||||||
// {
|
|
||||||
// err = InstallWindowEventHandler(
|
|
||||||
// MAC_WXHWND(parent->GetHandle()),
|
|
||||||
// GetwxFontDialogEventHandlerUPP(),
|
|
||||||
// GetEventTypeCount(ftEventList), ftEventList,
|
|
||||||
// this, (&(EventHandlerRef&)m_pEventHandlerRef));
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
// else //no parent - send to app
|
|
||||||
// {
|
|
||||||
err = InstallApplicationEventHandler(
|
|
||||||
GetwxFontDialogEventHandlerUPP(),
|
|
||||||
GetEventTypeCount(ftEventList), ftEventList,
|
|
||||||
this, (&(EventHandlerRef&)m_pEventHandlerRef));
|
|
||||||
// }
|
|
||||||
|
|
||||||
return err == noErr;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxFontDialog::IsShown() const
|
|
||||||
{
|
|
||||||
return FPIsFontPanelVisible();
|
|
||||||
}
|
|
||||||
|
|
||||||
int wxFontDialog::ShowModal()
|
|
||||||
{
|
|
||||||
wxASSERT(!FPIsFontPanelVisible());
|
|
||||||
|
|
||||||
//set up initial font
|
|
||||||
wxFont theInitialFont = m_fontData.GetInitialFont();
|
|
||||||
|
|
||||||
//create ATSU style
|
|
||||||
ATSUStyle theStyle;
|
|
||||||
OSStatus status = ATSUCreateStyle(&theStyle);
|
|
||||||
check_noerr(status);
|
|
||||||
|
|
||||||
//put stuff into the style - we don't need kATSUColorTag
|
|
||||||
ATSUFontID fontid = theInitialFont.MacGetATSUFontID();
|
|
||||||
Fixed fontsize = theInitialFont.MacGetFontSize() << 16;
|
|
||||||
ATSUAttributeTag theTags[2] = { kATSUFontTag, kATSUSizeTag };
|
|
||||||
ByteCount theSizes[2] = { sizeof(ATSUFontID), sizeof(Fixed) };
|
|
||||||
ATSUAttributeValuePtr theValues[2] = { &fontid,
|
|
||||||
&fontsize };
|
|
||||||
|
|
||||||
//set the stuff for the ATSU style
|
|
||||||
verify_noerr (ATSUSetAttributes (theStyle, 2, theTags, theSizes, theValues) );
|
|
||||||
|
|
||||||
//they set us up the bomb! Set the initial font of the dialog
|
|
||||||
SetFontInfoForSelection(kFontSelectionATSUIType,
|
|
||||||
1,
|
|
||||||
&theStyle,
|
|
||||||
(HIObjectRef)
|
|
||||||
(m_dialogParent ?
|
|
||||||
GetWindowEventTarget(MAC_WXHWND(m_dialogParent->GetHandle())) :
|
|
||||||
GetApplicationEventTarget())
|
|
||||||
);
|
|
||||||
|
|
||||||
//dispose of the style
|
|
||||||
status = ATSUDisposeStyle(theStyle);
|
|
||||||
check_noerr(status);
|
|
||||||
|
|
||||||
//in case the user doesn't choose anything -
|
|
||||||
//if he doesn't we'll get a bad font with red text
|
|
||||||
m_fontData.SetChosenFont(m_fontData.GetInitialFont());
|
|
||||||
m_fontData.SetColour(wxColour(0,0,0));
|
|
||||||
|
|
||||||
//finally, show the font dialog
|
|
||||||
if( (status = FPShowHideFontPanel()) == noErr)
|
|
||||||
{
|
|
||||||
while(FPIsFontPanelVisible())
|
|
||||||
{
|
|
||||||
//yeild so we can get events
|
|
||||||
wxTheApp->Yield(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return wxID_CANCEL;
|
|
||||||
|
|
||||||
return wxID_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#else
|
|
||||||
//10.2+ only
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
// wxFontDialog stub for mac OS's without a native font dialog
|
// wxFontDialog stub for mac OS's without a native font dialog
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
@@ -44,7 +44,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog)
|
|||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
//Mac OSX 10.2+ only
|
//Mac OSX 10.2+ only
|
||||||
#if USE_NATIVE_FONT_DIALOG_FOR_MACOSX && defined( __WXMAC_OSX__ ) && ( MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2 )
|
#if USE_NATIVE_FONT_DIALOG_FOR_MACOSX
|
||||||
|
|
||||||
// Cocoa headers
|
// Cocoa headers
|
||||||
#include "wx/cocoa/autorelease.h"
|
#include "wx/cocoa/autorelease.h"
|
||||||
@@ -380,48 +380,4 @@ bool wxFontDialog::IsShown() const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
//10.2+ only
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
// wxFontDialog stub for mac OS's without a native font dialog
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
|
|
||||||
wxFontDialog::wxFontDialog()
|
|
||||||
{
|
|
||||||
m_dialogParent = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
wxFontDialog::wxFontDialog(wxWindow *parent, const wxFontData& data)
|
|
||||||
{
|
|
||||||
Create(parent, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxFontDialog::SetData(wxFontData& fontdata)
|
|
||||||
{
|
|
||||||
m_fontData = fontdata;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxFontDialog::Create(wxWindow *parent, const wxFontData& data)
|
|
||||||
{
|
|
||||||
m_dialogParent = parent;
|
|
||||||
|
|
||||||
m_fontData = data;
|
|
||||||
|
|
||||||
// TODO: you may need to do dialog creation here, unless it's
|
|
||||||
// done in ShowModal.
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool wxFontDialog::IsShown() const
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int wxFontDialog::ShowModal()
|
|
||||||
{
|
|
||||||
// TODO: show (maybe create) the dialog
|
|
||||||
return wxID_CANCEL;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // 10.2+
|
#endif // 10.2+
|
||||||
|
Reference in New Issue
Block a user