X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5398a2e05001914ec3d83fd30f9f7e3f6a9e29be..e538985edcc645878a1bbeb3dc3e898e9d29ad11:/src/osx/window_osx.cpp diff --git a/src/osx/window_osx.cpp b/src/osx/window_osx.cpp index d5a4f2a756..4f99e89bc1 100644 --- a/src/osx/window_osx.cpp +++ b/src/osx/window_osx.cpp @@ -195,7 +195,9 @@ wxWindowMac::~wxWindowMac() WXWidget wxWindowMac::GetHandle() const { - return (WXWidget) m_peer->GetWXWidget() ; + if ( m_peer ) + return (WXWidget) m_peer->GetWXWidget() ; + return NULL; } // @@ -335,33 +337,26 @@ void wxWindowMac::DoSetWindowVariant( wxWindowVariant variant ) m_peer->SetData(kControlEntireControl, kControlSizeTag, &size ) ; #endif -#if wxOSX_USE_COCOA_OR_CARBON wxFont font ; -#if wxOSX_USE_ATSU_TEXT - ThemeFontID themeFont = kThemeSystemFont ; - - // we will get that from the settings later - // and make this NORMAL later, but first - // we have a few calculations that we must fix + wxOSXSystemFont systemFont = wxOSX_SYSTEM_FONT_NORMAL ; switch ( variant ) { case wxWINDOW_VARIANT_NORMAL : - themeFont = kThemeSystemFont ; + systemFont = wxOSX_SYSTEM_FONT_NORMAL ; break ; case wxWINDOW_VARIANT_SMALL : - themeFont = kThemeSmallSystemFont ; + systemFont = wxOSX_SYSTEM_FONT_SMALL ; break ; case wxWINDOW_VARIANT_MINI : - // not always defined in the headers - themeFont = 109 ; + systemFont = wxOSX_SYSTEM_FONT_MINI ; break ; case wxWINDOW_VARIANT_LARGE : - themeFont = kThemeSystemFont ; + systemFont = wxOSX_SYSTEM_FONT_NORMAL ; break ; default: @@ -369,36 +364,9 @@ void wxWindowMac::DoSetWindowVariant( wxWindowVariant variant ) break ; } - font.MacCreateFromThemeFont( themeFont ) ; -#else - CTFontUIFontType themeFont = kCTFontSystemFontType ; - switch ( variant ) - { - case wxWINDOW_VARIANT_NORMAL : - themeFont = kCTFontSystemFontType; - break ; - - case wxWINDOW_VARIANT_SMALL : - themeFont = kCTFontSmallSystemFontType; - break ; - - case wxWINDOW_VARIANT_MINI : - themeFont = kCTFontMiniSystemFontType; - break ; - - case wxWINDOW_VARIANT_LARGE : - themeFont = kCTFontSystemFontType; - break ; - - default: - wxFAIL_MSG(_T("unexpected window variant")); - break ; - } - font.MacCreateFromUIFont( themeFont ) ; -#endif + font.CreateSystemFont( systemFont ) ; SetFont( font ) ; -#endif } void wxWindowMac::MacUpdateControlFont() @@ -782,16 +750,14 @@ void wxWindowMac::MacInvalidateBorders() return ; int outerBorder = MacGetLeftBorderSize() ; -#if wxOSX_USE_CARBON - if ( m_peer->NeedsFocusRect() /* && m_peer->HasFocus() */ ) + + if ( m_peer->NeedsFocusRect() ) outerBorder += 4 ; -#endif if ( outerBorder == 0 ) return ; // now we know that we have something to do at all - int tx,ty,tw,th; @@ -1044,7 +1010,7 @@ void wxWindowMac::SetLabel(const wxString& title) { m_label = title ; - if ( m_peer && m_peer->IsOk() ) + if ( m_peer && m_peer->IsOk() && !(IsKindOf( CLASSINFO(wxButton) ) && GetId() == wxID_HELP) ) m_peer->SetLabel( wxStripMenuCodes(m_label, wxStrip_Mnemonics), GetFont().GetEncoding() ) ; // do not trigger refreshes upon invisible and possible partly created objects @@ -1343,7 +1309,6 @@ void wxWindowMac::MacPaintGrowBox() int size = m_hScrollBar ? m_hScrollBar->GetSize().y : ( m_vScrollBar ? m_vScrollBar->GetSize().x : MAC_SCROLLBAR_SIZE ) ; CGRect cgrect = CGRectMake( rect.right - size , rect.bottom - size , size , size ) ; - CGPoint cgpoint = CGPointMake( rect.right - size , rect.bottom - size ) ; CGContextSaveGState( cgContext ); if ( m_backgroundColour.Ok() ) @@ -1382,50 +1347,35 @@ void wxWindowMac::MacPaintBorders( int WXUNUSED(leftOrigin) , int WXUNUSED(right CGRect cgrect = CGRectMake( rect.left , rect.top , rect.right - rect.left , rect.bottom - rect.top ) ; - HIThemeFrameDrawInfo info ; - memset( &info, 0 , sizeof(info) ) ; - - info.version = 0 ; - info.kind = 0 ; - info.state = IsEnabled() ? kThemeStateActive : kThemeStateInactive ; - info.isFocused = hasFocus ; - CGContextRef cgContext = (CGContextRef) GetParent()->MacGetCGContextRef() ; wxASSERT( cgContext ) ; - if ( HasFlag(wxRAISED_BORDER) || HasFlag(wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) ) + if ( m_peer->NeedsFrame() ) { - info.kind = kHIThemeFrameTextFieldSquare ; - HIThemeDrawFrame( &cgrect , &info , cgContext , kHIThemeOrientationNormal ) ; - } - else if ( HasFlag(wxSIMPLE_BORDER) ) - { - info.kind = kHIThemeFrameListBox ; - HIThemeDrawFrame( &cgrect , &info , cgContext , kHIThemeOrientationNormal ) ; + HIThemeFrameDrawInfo info ; + memset( &info, 0 , sizeof(info) ) ; + + info.version = 0 ; + info.kind = 0 ; + info.state = IsEnabled() ? kThemeStateActive : kThemeStateInactive ; + info.isFocused = hasFocus ; + + if ( HasFlag(wxRAISED_BORDER) || HasFlag(wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) ) + { + info.kind = kHIThemeFrameTextFieldSquare ; + HIThemeDrawFrame( &cgrect , &info , cgContext , kHIThemeOrientationNormal ) ; + } + else if ( HasFlag(wxSIMPLE_BORDER) ) + { + info.kind = kHIThemeFrameListBox ; + HIThemeDrawFrame( &cgrect , &info , cgContext , kHIThemeOrientationNormal ) ; + } } - else if ( hasFocus ) + + if ( hasFocus ) { HIThemeDrawFocusRect( &cgrect , true , cgContext , kHIThemeOrientationNormal ) ; } -#if 0 // TODO REMOVE now done in a separate call earlier in drawing the window itself - m_peer->GetRect( &rect ) ; - if ( MacHasScrollBarCorner() ) - { - int variant = (m_hScrollBar == NULL ? m_vScrollBar : m_hScrollBar ) ->GetWindowVariant(); - int size = m_hScrollBar ? m_hScrollBar->GetSize().y : ( m_vScrollBar ? m_vScrollBar->GetSize().x : MAC_SCROLLBAR_SIZE ) ; - CGRect cgrect = CGRectMake( rect.right - size , rect.bottom - size , size , size ) ; - CGPoint cgpoint = CGPointMake( rect.right - size , rect.bottom - size ) ; - HIThemeGrowBoxDrawInfo info ; - memset( &info, 0, sizeof(info) ) ; - info.version = 0 ; - info.state = IsEnabled() ? kThemeStateActive : kThemeStateInactive ; - info.kind = kHIThemeGrowBoxKindNone ; - // contrary to the docs ...SizeSmall does not work - info.size = kHIThemeGrowBoxSizeNormal ; - info.direction = 0 ; - HIThemeDrawGrowBox( &cgpoint , &info , cgContext , kHIThemeOrientationNormal ) ; - } -#endif } #endif // wxOSX_USE_COCOA_OR_CARBON } @@ -1858,7 +1808,7 @@ bool wxWindowMac::MacDoRedraw( long time ) { // paint the window itself - wxPaintEvent event; + wxPaintEvent event(GetId()); event.SetTimestamp(time); event.SetEventObject(this); handled = HandleWindowEvent(event); @@ -2098,25 +2048,28 @@ long wxWindowMac::MacGetLeftBorderSize() const SInt32 border = 0 ; - if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER)) + if ( m_peer && m_peer->NeedsFrame() ) { + if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER)) + { #if wxOSX_USE_COCOA_OR_CARBON - // this metric is only the 'outset' outside the simple frame rect - GetThemeMetric( kThemeMetricEditTextFrameOutset , &border ) ; - border += 1; + // this metric is only the 'outset' outside the simple frame rect + GetThemeMetric( kThemeMetricEditTextFrameOutset , &border ) ; + border += 1; #else - border += 2; + border += 2; #endif - } - else if (HasFlag(wxSIMPLE_BORDER)) - { + } + else if (HasFlag(wxSIMPLE_BORDER)) + { #if wxOSX_USE_COCOA_OR_CARBON - // this metric is only the 'outset' outside the simple frame rect - GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ; - border += 1; + // this metric is only the 'outset' outside the simple frame rect + GetThemeMetric( kThemeMetricListBoxFrameOutset , &border ) ; + border += 1; #else - border += 1; + border += 1; #endif + } } return border ; @@ -2205,7 +2158,7 @@ Rect wxMacGetBoundsForControl( wxWindowMac* window , const wxPoint& pos , const return bounds ; } -bool wxWindowMac::OSXHandleClicked( double timestampsec ) +bool wxWindowMac::OSXHandleClicked( double WXUNUSED(timestampsec) ) { return false; } @@ -2399,6 +2352,7 @@ void wxWidgetImpl::Init() m_isRootControl = false; m_wxPeer = NULL; m_needsFocusRect = false; + m_needsFrame = true; } void wxWidgetImpl::SetNeedsFocusRect( bool needs ) @@ -2411,3 +2365,12 @@ bool wxWidgetImpl::NeedsFocusRect() const return m_needsFocusRect; } +void wxWidgetImpl::SetNeedsFrame( bool needs ) +{ + m_needsFrame = needs; +} + +bool wxWidgetImpl::NeedsFrame() const +{ + return m_needsFrame; +}