]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/fontdlg.cpp
Adding GetPartialTextExtents implementation.
[wxWidgets.git] / src / mac / carbon / fontdlg.cpp
index 359e96c9ef1011edf5c7d79e51819aaede0a2b62..23f99696b1088b52d9c622dfbac32c496d6da040 100644 (file)
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "fontdlg.h"
-#endif
+// ===========================================================================
+// declarations
+// ===========================================================================
 
 
-#include "wx/mac/fontdlg.h"
-#include "wx/cmndata.h"
+// ---------------------------------------------------------------------------
+// headers
+// ---------------------------------------------------------------------------
 
 
-#if !USE_SHARED_LIBRARY
-IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog)
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
+#pragma implementation "fontdlg.h"
 #endif
 
 #endif
 
-#include "wx/mac/private.h"
-
-#if defined( __WXMAC__ ) && TARGET_API_MAC_OSX && ( MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2 )
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
 
 
-#include <ATSUnicode.h>
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
 
 
-#include "wx/msgdlg.h"
+#ifndef WX_PRECOMP
+    #include "wx/cmndata.h"
+#endif
 
 
-pascal OSStatus wxFontDialogEventHandler(      EventHandlerCallRef inHandlerCallRef,
-                                                                       EventRef event, void* pData)
-{
-    wxASSERT(GetEventClass(event) == kEventClassFont && 
-             GetEventKind(event) == kEventFontSelection);
-   
-    OSStatus status = noErr;
+#include "wx/fontdlg.h"
     
     
-    ATSUFontID fontid;
-    Fixed fontsize;
-    RGBColor fontcolor;
-    FMFontStyle fontstyle;
-        
-    status = GetEventParameter (event, kEventParamFMFontStyle,
-                                    typeFMFontStyle, NULL,
-                                    sizeof (FMFontStyle), 
-                                    NULL, &(fontstyle)); 
-    check_noerr (status); 
-
-    status = GetEventParameter (event, kEventParamATSUFontID,
-                                    typeATSUFontID, NULL,
-                                    sizeof (ATSUFontID), 
-                                    NULL, &(fontid)); 
-    check_noerr (status); 
 
 
-    status = GetEventParameter (event, kEventParamATSUFontSize,
-                                    typeATSUSize, NULL,
-                                    sizeof (Fixed), 
-                                    NULL, &(fontsize)); 
+#if !USE_NATIVE_FONT_DIALOG_FOR_MACOSX
 
 
-    check_noerr (status);
+#undef wxFontDialog
 
 
-    status = GetEventParameter (event, kEventParamFontColor,
-                                    typeRGBColor, NULL,
-                                    sizeof( RGBColor ), NULL, &fontcolor); 
-    check_noerr (status);
-    
-    //TODO:
-    //TODO:    Make a utility function for converting ATSU to WX font (what we're doing :))
-    //TODO:
-        
-    //now do the conversion to the wx font data
-    wxFontData theFontData;
-    wxFont        theFont;
-    //first, the easy part - set the color
-    wxColour theColor;
-    theColor.Set(&(WXCOLORREF&)fontcolor);
-    theFontData.SetColour(theColor);
-    
-    //
-    //now the hard part - convert the atsu font to a wx font
-    //
-    
-    //point size - fixed, but straight conversion, I think
-    theFont.SetPointSize(fontsize >> 16);
-    
-    //font name - first get length, then allocate/copy/deallocate name buffer
-    FontNameCode               theNameCode;
-    FontPlatformCode   thePlatformCode;        
-    FontScriptCode             theScriptCode;
-    FontLanguageCode   theLanguageCode;    
-    //the above have types in SFNTTypes.h
-
-    ByteCount                  theActualLength;
-    ATSUGetIndFontName(fontid, 
-                       0, //first font in index array
-                       0, //need to get length first
-                       NULL, //nothin'
-                       &theActualLength,
-                       &theNameCode,
-                       &thePlatformCode,
-                       &theScriptCode,
-                       &theLanguageCode);
-    
-    Ptr szBuffer = new wxChar[theActualLength];
-    ATSUGetIndFontName(fontid, 
-                       0, //first font in index array
-                       theActualLength, 
-                       szBuffer, 
-                       &theActualLength,
-                       &theNameCode,
-                       &thePlatformCode,
-                       &theScriptCode,
-                       &theLanguageCode);
-    
-    //its unicode - convert it to wx's char value and put it in there
-    theFont.SetFaceName(wxConvLocal.cWC2WX((wchar_t*)szBuffer));
-    delete[] szBuffer;
-    
-    //TODOTODO: Get font family - mayby by the script code?
-    theFont.SetFamily(wxDEFAULT);  
+#include "wx/mac/fontdlg.h"
 
 
-    //TODOTODO: Get other styles?  Font weight?
-    theFont.SetStyle(0 +
-                     ((fontstyle & bold) ? wxFONTFLAG_BOLD : 0) +
-                     ((fontstyle & italic) ? wxFONTFLAG_ITALIC : 0) +
-                     ((fontstyle & underline) ? wxFONTFLAG_UNDERLINED : 0)
-                     );
-    theFont.SetWeight((fontstyle & bold) ? wxBOLD : wxNORMAL);   
-    
-    //for debugging
-    //wxPrintf(wxT("FaceName:%s\nSize:%i\n"), theFont.GetFaceName().c_str(), theFont.GetPointSize());
-    
-    //phew!!  We're done - set the chosen font
-    theFontData.SetChosenFont(theFont);
-    ((wxFontDialog*)pData)->SetData(theFontData);
-    
-    return status;
-}
+#if !USE_SHARED_LIBRARY
+IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog)
+#endif
 
 
-DEFINE_ONE_SHOT_HANDLER_GETTER( wxFontDialogEventHandler );
+#include "wx/mac/private.h"
 
 
-//---------------------------
-//     Class implementation
-//---------------------------
+// ---------------------------------------------------------------------------
+// wxFontDialog stub for mac OS's without a native font dialog
+// ---------------------------------------------------------------------------
 
 
-wxFontDialog::wxFontDialog() :
-    m_dialogParent(NULL), m_pEventHandlerRef(NULL)
+wxFontDialog::wxFontDialog()
 {
 {
+    m_dialogParent = NULL;
 }
 
 wxFontDialog::wxFontDialog(wxWindow *parent, const wxFontData&  data)
 }
 
 wxFontDialog::wxFontDialog(wxWindow *parent, const wxFontData&  data)
@@ -157,120 +63,7 @@ wxFontDialog::wxFontDialog(wxWindow *parent, const wxFontData&  data)
 
 wxFontDialog::~wxFontDialog()
 {
 
 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);
-    
-    //finally, show the font dialog
-    if( (status = FPShowHideFontPanel()) == noErr)
-    {
-        while(FPIsFontPanelVisible()) 
-        {
-            //yeild so we can get events
-            ::wxSafeYield(m_dialogParent, false);
-        }
-    }
-    else
-        return wxID_CANCEL;
-    
-    return wxID_OK;
-}
-
-
-#else
-   //10.2+ only
-   
-   
-//
-//     no native implementation
-//
-
-wxFontDialog::wxFontDialog()
-{
-    m_dialogParent = NULL;
-}
-
-wxFontDialog::wxFontDialog(wxWindow *parent, const wxFontData&  data)
-{
-    Create(parent, data);
+    // empty
 }
 
 void wxFontDialog::SetData(wxFontData& fontdata)
 }
 
 void wxFontDialog::SetData(wxFontData& fontdata)
@@ -300,4 +93,4 @@ int wxFontDialog::ShowModal()
     return wxID_CANCEL;
 }
 
     return wxID_CANCEL;
 }
 
-#endif // 10.2+
\ No newline at end of file
+#endif // 10.2+