X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a166eb645e902a645e17d7abd74c0ec2add729d0..ded83b1a5cebd3c1257f4d254c97d3cfb39bb5aa:/src/mac/carbon/fontdlg.cpp?ds=sidebyside diff --git a/src/mac/carbon/fontdlg.cpp b/src/mac/carbon/fontdlg.cpp index 7ce9c55678..180181b1ea 100644 --- a/src/mac/carbon/fontdlg.cpp +++ b/src/mac/carbon/fontdlg.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: fontdlg.cpp +// Name: src/mac/carbon/fontdlg.cpp // Purpose: wxFontDialog class for carbon 10.2+. // Author: Ryan Norton // Modified by: @@ -25,22 +25,21 @@ #endif #ifndef WX_PRECOMP -#include "wx/intl.h" -#include "wx/wxchar.h" -#include "wx/dcclient.h" -#include "wx/frame.h" -#include "wx/textctrl.h" -#include "wx/listbox.h" -#include "wx/checkbox.h" -#include "wx/choice.h" -#include "wx/sizer.h" -#include "wx/stattext.h" -#include "wx/button.h" + #include "wx/intl.h" + #include "wx/wxchar.h" + #include "wx/dcclient.h" + #include "wx/frame.h" + #include "wx/textctrl.h" + #include "wx/listbox.h" + #include "wx/checkbox.h" + #include "wx/choice.h" + #include "wx/sizer.h" + #include "wx/stattext.h" + #include "wx/button.h" #endif #include "wx/fontdlg.h" -#include "wx/dcclient.h" - + #if wxMAC_USE_EXPERIMENTAL_FONTDIALOG IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog) @@ -48,7 +47,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog) #include "wx/mac/private.h" // --------------------------------------------------------------------------- -// wxFontDialog +// wxFontDialog // --------------------------------------------------------------------------- static const EventTypeSpec eventList[] = @@ -62,40 +61,47 @@ pascal OSStatus wxMacCarbonFontPanelHandler(EventHandlerCallRef nextHandler, Eve OSStatus result = eventNotHandledErr ; wxFontDialog *fontdialog = (wxFontDialog*) userData ; wxFontData& fontdata= fontdialog->GetFontData() ; - + wxMacCarbonEvent cEvent( event ); switch(cEvent.GetKind()) { case kEventFontSelection : { - FMFont fontId = 0 ; + ATSUFontID fontId = 0 ; if ( cEvent.GetParameter(kEventParamATSUFontID, &fontId) == noErr ) - { + { FMFontStyle fontStyle = cEvent.GetParameter(kEventParamFMFontStyle); FMFontSize fontSize = cEvent.GetParameter(kEventParamFMFontSize); - ByteCount actualLength = 0; CFStringRef cfName = NULL; +#if 1 + FMFontFamily fontFamily = cEvent.GetParameter(kEventParamFMFontFamily); + ATSFontFamilyRef atsfontfamilyref = FMGetATSFontFamilyRefFromFontFamily( fontFamily ) ; + OSStatus err = ATSFontFamilyGetName( atsfontfamilyref , kATSOptionFlagsDefault , &cfName ) ; + wxASSERT_MSG( err == noErr , wxT("ATSFontFamilyGetName failed") ); +#else + // we don't use the ATSU naming anymore + ByteCount actualLength = 0; char *c = NULL; - OSStatus err = ATSUFindFontName(fontId , kFontFamilyName, kFontUnicodePlatform, kFontNoScriptCode, + OSStatus err = ATSUFindFontName(fontId , kFontFamilyName, kFontUnicodePlatform, kFontNoScriptCode, kFontNoLanguageCode , 0 , NULL , &actualLength , NULL ); if ( err == noErr) { actualLength += 1 ; char *c = (char*)malloc( actualLength ); - err = ATSUFindFontName(fontId, kFontFamilyName, kFontUnicodePlatform, kFontNoScriptCode, + err = ATSUFindFontName(fontId, kFontFamilyName, kFontUnicodePlatform, kFontNoScriptCode, kFontNoLanguageCode, actualLength, c , NULL, NULL); cfName = CFStringCreateWithCharacters(NULL, (UniChar*) c, (actualLength-1) >> 1); } else { - err = ATSUFindFontName(fontId , kFontFamilyName, kFontNoPlatformCode, kFontNoScriptCode, + err = ATSUFindFontName(fontId , kFontFamilyName, kFontNoPlatformCode, kFontNoScriptCode, kFontNoLanguageCode , 0 , NULL , &actualLength , NULL ); if ( err == noErr ) { actualLength += 1 ; c = (char*)malloc(actualLength); - err = ATSUFindFontName(fontId, kFontFamilyName, kFontNoPlatformCode, kFontNoScriptCode, + err = ATSUFindFontName(fontId, kFontFamilyName, kFontNoPlatformCode, kFontNoScriptCode, kFontNoLanguageCode, actualLength, c , NULL, NULL); c[actualLength-1] = 0; cfName = CFStringCreateWithCString(NULL, c, kCFStringEncodingMacRoman ); @@ -103,14 +109,15 @@ pascal OSStatus wxMacCarbonFontPanelHandler(EventHandlerCallRef nextHandler, Eve } if ( c!=NULL ) free(c); - +#endif + if ( cfName!=NULL ) { fontdata.m_chosenFont.SetFaceName(wxMacCFStringHolder(cfName).AsString(wxLocale::GetSystemEncoding())); fontdata.m_chosenFont.SetPointSize(fontSize); - fontdata.m_chosenFont.SetStyle(fontStyle & italic ? wxFONTSTYLE_ITALIC : 0); - fontdata.m_chosenFont.SetUnderlined(fontStyle & underline ? wxFONTSTYLE_ITALIC : 0); - fontdata.m_chosenFont.SetWeight(fontStyle & bold ? wxBOLD : wxNORMAL); + fontdata.m_chosenFont.SetStyle(fontStyle & italic ? wxFONTSTYLE_ITALIC : wxFONTSTYLE_NORMAL); + fontdata.m_chosenFont.SetUnderlined((fontStyle & underline)!=0); + fontdata.m_chosenFont.SetWeight(fontStyle & bold ? wxFONTWEIGHT_BOLD : wxFONTWEIGHT_NORMAL); } } @@ -153,7 +160,7 @@ pascal OSStatus wxMacCarbonFontPanelHandler(EventHandlerCallRef nextHandler, Eve } break ; } ; - + return result ; } @@ -186,7 +193,7 @@ int wxFontDialog::ShowModal() { font = m_fontData.m_initialFont ; } - + ATSUStyle style = (ATSUStyle)font.MacGetATSUStyle(); err = SetFontInfoForSelection (kFontSelectionATSUIType,1, &style , NULL); // just clicking on ENTER will not send us any font setting event, therefore we have to make sure @@ -197,13 +204,13 @@ int wxFontDialog::ShowModal() err = InstallApplicationEventHandler( GetwxMacCarbonFontPanelHandlerUPP(), GetEventTypeCount(eventList), eventList, this , &handler ); - if ( !FPIsFontPanelVisible() ) + if ( !FPIsFontPanelVisible() ) FPShowHideFontPanel(); - + int retval = RunMixedFontDialog(this); - + ::RemoveEventHandler(handler); - + return retval ; } @@ -279,7 +286,7 @@ class wxFontColourSwatchCtrl: public wxControl DECLARE_CLASS(wxFontColourSwatchCtrl) public: wxFontColourSwatchCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); - ~wxFontColourSwatchCtrl(); + virtual ~wxFontColourSwatchCtrl(); void OnPaint(wxPaintEvent& event); void OnMouseEvent(wxMouseEvent& event); @@ -326,11 +333,11 @@ void wxFontColourSwatchCtrl::OnMouseEvent(wxMouseEvent& event) parent = parent->GetParent(); wxColourData data; - data.SetChooseFull(TRUE); + data.SetChooseFull(true); data.SetColour(m_colour); wxColourDialog *dialog = new wxColourDialog(parent, &data); // Crashes on wxMac (no m_peer) -#ifndef __WXMAC__ +#ifndef __WXMAC__ dialog->SetTitle(_("Background colour")); #endif if (dialog->ShowModal() == wxID_OK) @@ -426,7 +433,7 @@ bool wxFontDialog::Create(wxWindow* parent, const wxFontData& fontData) */ void wxFontDialog::CreateControls() -{ +{ wxFontDialog* itemDialog1 = this; wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL); @@ -488,12 +495,12 @@ void wxFontDialog::CreateControls() m_underlinedCtrl->SetToolTip(_("Check to make the font underlined.")); itemBoxSizer11->Add(m_underlinedCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); } - + if (m_fontData.GetEnableEffects()) { wxStaticText* itemStaticText15 = new wxStaticText( itemDialog1, wxID_STATIC, _("Colour:"), wxDefaultPosition, wxDefaultSize, 0 ); itemFlexGridSizer4->Add(itemStaticText15, 0, wxALIGN_RIGHT|wxALIGN_TOP|wxALL|wxADJUST_MINSIZE, 5); - + m_colourCtrl = new wxFontColourSwatchCtrl( itemDialog1, wxID_FONTDIALOG_COLOUR, wxDefaultPosition, wxSize(-1, 30), wxSUNKEN_BORDER|wxTAB_TRAVERSAL ); m_colourCtrl->SetHelpText(_("Click to change the font colour.")); if (ShowToolTips()) @@ -528,18 +535,18 @@ void wxFontDialog::CreateControls() wxFontEnumerator enumerator; enumerator.EnumerateFacenames(); - wxArrayString* facenames = enumerator.GetFacenames(); + wxArrayString facenames = enumerator.GetFacenames(); if (facenames) { - facenames->Add(_("")); - facenames->Add(_("")); - facenames->Add(_("")); - facenames->Add(_("")); - facenames->Add(_("")); - facenames->Add(_("")); - facenames->Add(_("")); - facenames->Sort(); - m_facenameCtrl->Append(*facenames); + facenames.Add(_("")); + facenames.Add(_("")); + facenames.Add(_("")); + facenames.Add(_("")); + facenames.Add(_("")); + facenames.Add(_("")); + facenames.Add(_("")); + facenames.Sort(); + m_facenameCtrl->Append(facenames); } InitializeControls(); @@ -670,7 +677,7 @@ void wxFontDialog::InitializeControls() m_boldCtrl->SetValue(m_dialogFont.GetWeight() == wxBOLD); m_italicCtrl->SetValue(m_dialogFont.GetStyle() == wxITALIC); m_sizeCtrl->SetValue(m_dialogFont.GetPointSize()); - + wxString facename = m_dialogFont.GetFaceName(); if (facename.empty() || m_facenameCtrl->FindString(facename) == wxNOT_FOUND) {