X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8d1547ef4697a49cf4f4b8f09f662705e064c416..cd66beb3439485e49fac308f54dc10fe01c92895:/src/mac/carbon/window.cpp diff --git a/src/mac/carbon/window.cpp b/src/mac/carbon/window.cpp index 56d06a2612..0b6532ed84 100644 --- a/src/mac/carbon/window.cpp +++ b/src/mac/carbon/window.cpp @@ -53,6 +53,10 @@ #include "wx/caret.h" #endif +#if wxUSE_POPUPWIN + #include "wx/popupwin.h" +#endif + #if wxUSE_DRAG_AND_DROP #include "wx/dnd.h" #endif @@ -62,19 +66,6 @@ #define MAC_SCROLLBAR_SIZE 15 #define MAC_SMALL_SCROLLBAR_SIZE 11 -#ifndef __DARWIN__ -#include -#include -#include -#include -#endif - -#if TARGET_API_MAC_OSX -#ifndef __HIVIEW__ - #include -#endif -#endif - #include #ifdef __WXUNIVERSAL__ @@ -86,9 +77,7 @@ BEGIN_EVENT_TABLE(wxWindowMac, wxWindowBase) EVT_NC_PAINT(wxWindowMac::OnNcPaint) EVT_ERASE_BACKGROUND(wxWindowMac::OnEraseBackground) -#if TARGET_API_MAC_OSX EVT_PAINT(wxWindowMac::OnPaint) -#endif EVT_SET_FOCUS(wxWindowMac::OnSetFocus) EVT_KILL_FOCUS(wxWindowMac::OnSetFocus) EVT_MOUSE_EVENTS(wxWindowMac::OnMouseEvent) @@ -150,17 +139,6 @@ void wxMacWindowToNative( const wxWindow* window , Rect *rect ) // Carbon Events // --------------------------------------------------------------------------- -#if TARGET_API_MAC_OSX - -#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_3 -enum -{ - kEventControlVisibilityChanged = 157 -}; -#endif - -#endif - static const EventTypeSpec eventList[] = { { kEventClassCommand, kEventProcessCommand } , @@ -173,14 +151,14 @@ static const EventTypeSpec eventList[] = { kEventClassTextInput, kEventTextInputUpdateActiveInputArea } , { kEventClassControl , kEventControlDraw } , -#if TARGET_API_MAC_OSX + { kEventClassControl , kEventControlVisibilityChanged } , { kEventClassControl , kEventControlEnabledStateChanged } , { kEventClassControl , kEventControlHiliteChanged } , { kEventClassControl , kEventControlActivate } , { kEventClassControl , kEventControlDeactivate } , -#endif + { kEventClassControl , kEventControlSetFocusPart } , { kEventClassService , kEventServiceGetTypes }, @@ -204,7 +182,6 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl switch ( GetEventKind( event ) ) { -#if TARGET_API_MAC_OSX case kEventControlDraw : { RgnHandle updateRgn = NULL ; @@ -229,9 +206,6 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl } } - Rect rgnBounds ; - GetRegionBounds( updateRgn , &rgnBounds ) ; - #if wxMAC_DEBUG_REDRAW if ( thisWindow->MacIsUserPane() ) { @@ -256,7 +230,6 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl #endif { -#if wxMAC_USE_CORE_GRAPHICS bool created = false ; CGContextRef cgContext = NULL ; OSStatus err = cEvent.GetParameter(kEventParamCGContextRef, &cgContext) ; @@ -268,7 +241,7 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl float alpha = 1.0 ; { wxWindow* iter = thisWindow ; - while ( iter ) + while ( iter ) { alpha *= (float) iter->GetTransparent()/255.0 ; if ( iter->IsTopLevel() ) @@ -278,17 +251,24 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl } } CGContextSetAlpha( cgContext , alpha ) ; -#endif + + if ( thisWindow->GetBackgroundStyle() == wxBG_STYLE_TRANSPARENT ) + { + HIRect bounds; + HIViewGetBounds( controlRef, &bounds ); + CGContextClearRect( cgContext, bounds ); + } + + + if ( thisWindow->MacDoRedraw( updateRgn , cEvent.GetTicks() ) ) result = noErr ; -#if wxMAC_USE_CORE_GRAPHICS thisWindow->MacSetCGContextRef( NULL ) ; } if ( created ) CGContextRelease( cgContext ) ; -#endif } if ( allocatedRgn ) @@ -301,13 +281,13 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl break ; case kEventControlEnabledStateChanged : - thisWindow->MacEnabledStateChanged() ; + thisWindow->MacEnabledStateChanged(); break ; case kEventControlHiliteChanged : thisWindow->MacHiliteChanged() ; break ; - + case kEventControlActivate : case kEventControlDeactivate : // FIXME: we should have a virtual function for this! @@ -320,7 +300,6 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl thisWindow->Refresh(); #endif break ; -#endif // TARGET_API_MAC_OSX // we emulate this event under Carbon CFM case kEventControlSetFocusPart : @@ -328,11 +307,9 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl Boolean focusEverything = false ; ControlPartCode controlPart = cEvent.GetParameter(kEventParamControlPart , typeControlPartCode ); -#ifdef __WXMAC_OSX__ if ( cEvent.GetParameter(kEventParamControlFocusEverything , &focusEverything ) == noErr ) { } -#endif if ( thisWindow->MacIsUserPane() ) result = noErr ; @@ -396,7 +373,10 @@ static pascal OSStatus wxMacWindowControlEventHandler( EventHandlerCallRef handl return result ; } -static pascal OSStatus wxMacWindowServiceEventHandler( EventHandlerCallRef handler , EventRef event , void *data ) +static pascal OSStatus +wxMacWindowServiceEventHandler(EventHandlerCallRef WXUNUSED(handler), + EventRef event, + void *data) { OSStatus result = eventNotHandledErr ; @@ -448,9 +428,13 @@ static pascal OSStatus wxMacWindowServiceEventHandler( EventHandlerCallRef handl textCtrl->GetSelection( &from , &to ) ; wxString val = textCtrl->GetValue() ; val = val.Mid( from , to - from ) ; - ScrapRef scrapRef = cEvent.GetParameter< ScrapRef > ( kEventParamScrapRef , typeScrapRef ) ; - verify_noerr( ClearScrap( &scrapRef ) ) ; - verify_noerr( PutScrapFlavor( scrapRef , kTXNTextData , 0 , val.length() , val.c_str() ) ) ; + PasteboardRef pasteboard = cEvent.GetParameter( kEventParamPasteboardRef, typePasteboardRef ); + verify_noerr( PasteboardClear( pasteboard ) ) ; + PasteboardSynchronize( pasteboard ); + // TODO add proper conversion + CFDataRef data = CFDataCreate( kCFAllocatorDefault, (const UInt8*)val.c_str(), val.length() ); + PasteboardPutItemFlavor( pasteboard, (PasteboardItemID) 1, CFSTR("com.apple.traditional-mac-plain-text"), data, 0); + CFRelease( data ); result = noErr ; } break ; @@ -458,22 +442,34 @@ static pascal OSStatus wxMacWindowServiceEventHandler( EventHandlerCallRef handl case kEventServicePaste : if ( textCtrl ) { - ScrapRef scrapRef = cEvent.GetParameter< ScrapRef > ( kEventParamScrapRef , typeScrapRef ) ; - Size textSize, pastedSize ; - verify_noerr( GetScrapFlavorSize(scrapRef, kTXNTextData, &textSize) ) ; - textSize++ ; - char *content = new char[textSize] ; - GetScrapFlavorData(scrapRef, kTXNTextData, &pastedSize, content ); - content[textSize - 1] = 0 ; - + PasteboardRef pasteboard = cEvent.GetParameter( kEventParamPasteboardRef, typePasteboardRef ); + PasteboardSynchronize( pasteboard ); + ItemCount itemCount; + verify_noerr( PasteboardGetItemCount( pasteboard, &itemCount ) ); + for( UInt32 itemIndex = 1; itemIndex <= itemCount; itemIndex++ ) + { + PasteboardItemID itemID; + if ( PasteboardGetItemIdentifier( pasteboard, itemIndex, &itemID ) == noErr ) + { + CFDataRef flavorData = NULL; + if ( PasteboardCopyItemFlavorData( pasteboard, itemID, CFSTR("com.apple.traditional-mac-plain-text"), &flavorData ) == noErr ) + { + CFIndex flavorDataSize = CFDataGetLength( flavorData ); + char *content = new char[flavorDataSize+1] ; + memcpy( content, CFDataGetBytePtr( flavorData ), flavorDataSize ); + content[flavorDataSize]=0; + CFRelease( flavorData ); #if wxUSE_UNICODE - textCtrl->WriteText( wxString( content , wxConvLocal ) ); + textCtrl->WriteText( wxString( content , wxConvLocal ) ); #else - textCtrl->WriteText( wxString( content ) ) ; + textCtrl->WriteText( wxString( content ) ) ; #endif - delete[] content ; - result = noErr ; + delete[] content ; + result = noErr ; + } + } + } } break ; @@ -540,7 +536,7 @@ pascal OSStatus wxMacUnicodeTextEventHandler( EventHandlerCallRef handler , Even On the other hand, it can be useful for some applications to react to uncommitted text (for example, to update a status display), as long as it does not disrupt the inline input session. Ideally, wx should add new event types to support advanced text input. For now, I would keep things as they are. - + However, the code that was being used caused additional problems: UInt32 message = (0 << 8) + ((char)uniChars[pos] ); Since it simply truncated the unichar to the last byte, it ended up causing weird bugs with inline @@ -611,7 +607,10 @@ pascal OSStatus wxMacUnicodeTextEventHandler( EventHandlerCallRef handler , Even return result ; } -static pascal OSStatus wxMacWindowCommandEventHandler( EventHandlerCallRef handler , EventRef event , void *data ) +static pascal OSStatus +wxMacWindowCommandEventHandler(EventHandlerCallRef WXUNUSED(handler), + EventRef event, + void *data) { OSStatus result = eventNotHandledErr ; wxWindowMac* focus = (wxWindowMac*) data ; @@ -632,74 +631,11 @@ static pascal OSStatus wxMacWindowCommandEventHandler( EventHandlerCallRef handl switch ( cEvent.GetKind() ) { case kEventProcessCommand : - { - if (item->IsCheckable()) - item->Check( !item->IsChecked() ) ; - - if ( itemMenu->SendEvent( id , item->IsCheckable() ? item->IsChecked() : -1 ) ) - result = noErr ; - else - { - wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED , id); - event.SetEventObject(focus); - event.SetInt(item->IsCheckable() ? item->IsChecked() : -1); - - if ( focus->GetEventHandler()->ProcessEvent(event) ) - result = noErr ; - } - } + result = itemMenu->MacHandleCommandProcess( item, id, focus ); break ; case kEventCommandUpdateStatus: - { - wxUpdateUIEvent event(id); - event.SetEventObject( itemMenu ); - - bool processed = false; - - // Try the menu's event handler - { - wxEvtHandler *handler = itemMenu->GetEventHandler(); - if ( handler ) - processed = handler->ProcessEvent(event); - } - - // Try the window the menu was popped up from - // (and up through the hierarchy) - if ( !processed ) - { - const wxMenuBase *menu = itemMenu; - while ( menu ) - { - wxWindow *win = menu->GetInvokingWindow(); - if ( win ) - { - processed = win->GetEventHandler()->ProcessEvent(event); - break; - } - - menu = menu->GetParent(); - } - } - - if ( !processed ) - { - processed = focus->GetEventHandler()->ProcessEvent(event); - } - - if ( processed ) - { - // if anything changed, update the changed attribute - if (event.GetSetText()) - itemMenu->SetLabel(id, event.GetText()); - if (event.GetSetChecked()) - itemMenu->Check(id, event.GetChecked()); - if (event.GetSetEnabled()) - itemMenu->Enable(id, event.GetEnabled()); - - result = noErr ; - } - } + result = itemMenu->MacHandleCommandUpdateStatus( item, id, focus ); break ; default : @@ -745,134 +681,6 @@ pascal OSStatus wxMacWindowEventHandler( EventHandlerCallRef handler , EventRef DEFINE_ONE_SHOT_HANDLER_GETTER( wxMacWindowEventHandler ) -#if !TARGET_API_MAC_OSX - -// --------------------------------------------------------------------------- -// UserPane events for non OSX builds -// --------------------------------------------------------------------------- - -static pascal void wxMacControlUserPaneDrawProc(ControlRef control, SInt16 part) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - win->MacControlUserPaneDrawProc(part) ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneDrawUPP , wxMacControlUserPaneDrawProc ) ; - -static pascal ControlPartCode wxMacControlUserPaneHitTestProc(ControlRef control, Point where) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - return win->MacControlUserPaneHitTestProc(where.h , where.v) ; - else - return kControlNoPart ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneHitTestUPP , wxMacControlUserPaneHitTestProc ) ; - -static pascal ControlPartCode wxMacControlUserPaneTrackingProc(ControlRef control, Point startPt, ControlActionUPP actionProc) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - return win->MacControlUserPaneTrackingProc( startPt.h , startPt.v , (void*) actionProc) ; - else - return kControlNoPart ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneTrackingUPP , wxMacControlUserPaneTrackingProc ) ; - -static pascal void wxMacControlUserPaneIdleProc(ControlRef control) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - win->MacControlUserPaneIdleProc() ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneIdleUPP , wxMacControlUserPaneIdleProc ) ; - -static pascal ControlPartCode wxMacControlUserPaneKeyDownProc(ControlRef control, SInt16 keyCode, SInt16 charCode, SInt16 modifiers) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - return win->MacControlUserPaneKeyDownProc(keyCode,charCode,modifiers) ; - else - return kControlNoPart ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneKeyDownUPP , wxMacControlUserPaneKeyDownProc ) ; - -static pascal void wxMacControlUserPaneActivateProc(ControlRef control, Boolean activating) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - win->MacControlUserPaneActivateProc(activating) ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneActivateUPP , wxMacControlUserPaneActivateProc ) ; - -static pascal ControlPartCode wxMacControlUserPaneFocusProc(ControlRef control, ControlFocusPart action) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - return win->MacControlUserPaneFocusProc(action) ; - else - return kControlNoPart ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneFocusUPP , wxMacControlUserPaneFocusProc ) ; - -static pascal void wxMacControlUserPaneBackgroundProc(ControlRef control, ControlBackgroundPtr info) -{ - wxWindow * win = wxFindControlFromMacControl(control) ; - if ( win ) - win->MacControlUserPaneBackgroundProc(info) ; -} -wxMAC_DEFINE_PROC_GETTER( ControlUserPaneBackgroundUPP , wxMacControlUserPaneBackgroundProc ) ; - -void wxWindowMac::MacControlUserPaneDrawProc(wxInt16 part) -{ - int x = 0 , y = 0; - RgnHandle rgn = NewRgn() ; - GetClip( rgn ) ; - MacWindowToRootWindow( &x, &y ) ; - OffsetRgn( rgn , -x , -y ) ; - wxMacWindowStateSaver sv( this ) ; - SectRgn( rgn , (RgnHandle) MacGetVisibleRegion().GetWXHRGN() , rgn ) ; - MacDoRedraw( rgn , 0 ) ; - DisposeRgn( rgn ) ; -} - -wxInt16 wxWindowMac::MacControlUserPaneHitTestProc(wxInt16 x, wxInt16 y) -{ - return kControlNoPart ; -} - -wxInt16 wxWindowMac::MacControlUserPaneTrackingProc(wxInt16 x, wxInt16 y, void* actionProc) -{ - return kControlNoPart ; -} - -void wxWindowMac::MacControlUserPaneIdleProc() -{ -} - -wxInt16 wxWindowMac::MacControlUserPaneKeyDownProc(wxInt16 keyCode, wxInt16 charCode, wxInt16 modifiers) -{ - return kControlNoPart ; -} - -void wxWindowMac::MacControlUserPaneActivateProc(bool activating) -{ -} - -wxInt16 wxWindowMac::MacControlUserPaneFocusProc(wxInt16 action) -{ - if ( AcceptsFocus() ) - return 1 ; - else - return kControlNoPart ; -} - -void wxWindowMac::MacControlUserPaneBackgroundProc(void* info) -{ -} - -#endif - // --------------------------------------------------------------------------- // Scrollbar Tracking for all // --------------------------------------------------------------------------- @@ -961,17 +769,15 @@ void wxWindowMac::Init() m_peer = NULL ; m_frozenness = 0 ; m_macAlpha = 255 ; - -#if wxMAC_USE_CORE_GRAPHICS m_cgContextRef = NULL ; -#endif // as all windows are created with WS_VISIBLE style... m_isShown = true; m_hScrollBar = NULL ; m_vScrollBar = NULL ; - m_macBackgroundBrush = wxNullBrush ; + m_hScrollBarAlwaysShown = false; + m_vScrollBarAlwaysShown = false; m_macIsUserPane = true; m_clipChildren = false ; @@ -1029,12 +835,14 @@ wxWindowMac::~wxWindowMac() if ( g_MacLastWindow == this ) g_MacLastWindow = NULL ; - wxFrame* frame = wxDynamicCast( wxGetTopLevelParent( this ) , wxFrame ) ; +#ifndef __WXUNIVERSAL__ + wxFrame* frame = wxDynamicCast( wxGetTopLevelParent( (wxWindow*)this ) , wxFrame ) ; if ( frame ) { if ( frame->GetLastFocus() == this ) frame->SetLastFocus( NULL ) ; } +#endif // delete our drop target if we've got one #if wxUSE_DRAG_AND_DROP @@ -1059,20 +867,6 @@ void wxWindowMac::MacInstallEventHandler( WXWidget control ) InstallControlEventHandler( (ControlRef)control , GetwxMacWindowEventHandlerUPP(), GetEventTypeCount(eventList), eventList, this, (EventHandlerRef *)&m_macControlEventHandler); - -#if !TARGET_API_MAC_OSX - if ( (ControlRef) control == m_peer->GetControlRef() ) - { - m_peer->SetData(kControlEntireControl, kControlUserPaneDrawProcTag, GetwxMacControlUserPaneDrawProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneHitTestProcTag, GetwxMacControlUserPaneHitTestProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneTrackingProcTag, GetwxMacControlUserPaneTrackingProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneIdleProcTag, GetwxMacControlUserPaneIdleProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneKeyDownProcTag, GetwxMacControlUserPaneKeyDownProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneActivateProcTag, GetwxMacControlUserPaneActivateProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneFocusProcTag, GetwxMacControlUserPaneFocusProc()) ; - m_peer->SetData(kControlEntireControl, kControlUserPaneBackgroundProcTag, GetwxMacControlUserPaneBackgroundProc()) ; - } -#endif } // Constructor @@ -1135,7 +929,7 @@ void wxWindowMac::MacChildAdded() m_hScrollBar->Raise() ; } -void wxWindowMac::MacPostControlCreate(const wxPoint& pos, const wxSize& size) +void wxWindowMac::MacPostControlCreate(const wxPoint& WXUNUSED(pos), const wxSize& size) { wxASSERT_MSG( m_peer != NULL && m_peer->Ok() , wxT("No valid mac control") ) ; @@ -1191,17 +985,9 @@ void wxWindowMac::DoSetWindowVariant( wxWindowVariant variant ) break ; case wxWINDOW_VARIANT_MINI : - if (UMAGetSystemVersion() >= 0x1030 ) - { - // not always defined in the headers - size = 3 ; - themeFont = 109 ; - } - else - { - size = kControlSizeSmall; - themeFont = kThemeSmallSystemFont ; - } + // not always defined in the headers + size = 3 ; + themeFont = 109 ; break ; case wxWINDOW_VARIANT_LARGE : @@ -1224,7 +1010,9 @@ void wxWindowMac::DoSetWindowVariant( wxWindowVariant variant ) void wxWindowMac::MacUpdateControlFont() { m_peer->SetFont( GetFont() , GetForegroundColour() , GetWindowStyle() ) ; - Refresh() ; + // do not trigger refreshes upon invisible and possible partly created objects + if ( MacIsReallyShown() ) + Refresh() ; } bool wxWindowMac::SetFont(const wxFont& font) @@ -1251,28 +1039,11 @@ bool wxWindowMac::SetBackgroundColour(const wxColour& col ) if ( !wxWindowBase::SetBackgroundColour(col) && m_hasBgCol ) return false ; - wxBrush brush ; - wxColour newCol(GetBackgroundColour()); - - if ( newCol == wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ) - brush.MacSetTheme( kThemeBrushDocumentWindowBackground ) ; - else if ( newCol == wxSystemSettings::GetColour( wxSYS_COLOUR_3DFACE ) ) - brush.MacSetTheme( kThemeBrushDialogBackgroundActive ) ; - else - brush.SetColour( newCol ) ; - - MacSetBackgroundBrush( brush ) ; - MacUpdateControlFont() ; + m_peer->SetBackgroundColour( col ) ; return true ; } -void wxWindowMac::MacSetBackgroundBrush( const wxBrush &brush ) -{ - m_macBackgroundBrush = brush ; - m_peer->SetBackground( brush ) ; -} - bool wxWindowMac::MacCanFocus() const { // TODO : evaluate performance hits by looking up this value, eventually cache the results for a 1 sec or so @@ -1311,43 +1082,6 @@ void wxWindowMac::SetFocus() return ; SetUserFocusWindow( (WindowRef)MacGetTopLevelWindowRef() ); - -#if !TARGET_API_MAC_OSX - // emulate carbon events when running under CarbonLib where they are not natively available - if ( former ) - { - EventRef evRef = NULL ; - - err = MacCreateEvent( - NULL , kEventClassControl , kEventControlSetFocusPart , TicksToEventTime( TickCount() ) , - kEventAttributeUserEvent , &evRef ); - verify_noerr( err ); - - wxMacCarbonEvent cEvent( evRef ) ; - cEvent.SetParameter( kEventParamDirectObject , (ControlRef) former->GetHandle() ) ; - cEvent.SetParameter(kEventParamControlPart , typeControlPartCode , kControlFocusNoPart ) ; - - wxMacWindowEventHandler( NULL , evRef , former ) ; - ReleaseEvent( evRef ) ; - } - - // send new focus event - { - EventRef evRef = NULL ; - - err = MacCreateEvent( - NULL , kEventClassControl , kEventControlSetFocusPart , TicksToEventTime( TickCount() ) , - kEventAttributeUserEvent , &evRef ); - verify_noerr( err ); - - wxMacCarbonEvent cEvent( evRef ) ; - cEvent.SetParameter( kEventParamDirectObject , (ControlRef) GetHandle() ) ; - cEvent.SetParameter(kEventParamControlPart , typeControlPartCode , kControlFocusNextPart ) ; - - wxMacWindowEventHandler( NULL , evRef , this ) ; - ReleaseEvent( evRef ) ; - } -#endif } void wxWindowMac::DoCaptureMouse() @@ -1382,7 +1116,7 @@ void wxWindowMac::SetDropTarget(wxDropTarget *pDropTarget) #endif // Old-style File Manager Drag & Drop -void wxWindowMac::DragAcceptFiles(bool accept) +void wxWindowMac::DragAcceptFiles(bool WXUNUSED(accept)) { // TODO: } @@ -1390,8 +1124,10 @@ void wxWindowMac::DragAcceptFiles(bool accept) // Returns the size of the native control. In the case of the toplevel window // this is the content area root control -void wxWindowMac::MacGetPositionAndSizeFromControl(int& x, int& y, - int& w, int& h) const +void wxWindowMac::MacGetPositionAndSizeFromControl(int& WXUNUSED(x), + int& WXUNUSED(y), + int& WXUNUSED(w), + int& WXUNUSED(h)) const { wxFAIL_MSG( wxT("Not currently supported") ) ; } @@ -1751,24 +1487,18 @@ bool wxWindowMac::SetCursor(const wxCursor& cursor) HIGetMousePosition(kHICoordSpaceWindow, window, &hiPoint); pt.h = hiPoint.x; pt.v = hiPoint.y; - #else - CGrafPtr savePort ; - Boolean swapped = QDSwapPort( GetWindowPort( window ) , &savePort ) ; - - // TODO: If we ever get a GetCurrentEvent... replacement - // for the mouse position, use it... - - - GetMouse( &pt ) ; + #else + GetGlobalMouse( &pt ); + int x = pt.h; + int y = pt.v; + ScreenToClient(&x, &y); + pt.h = x; + pt.v = y; #endif - control = wxMacFindControlUnderMouse( tlw , pt , window , &part ) ; + control = FindControlUnderMouse( pt , window , &part ) ; if ( control ) mouseWin = wxFindControlFromMacControl( control ) ; -#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 - if ( swapped ) - QDSwapPort( savePort , NULL ) ; -#endif } if ( mouseWin == this && !wxIsBusy() ) @@ -1780,7 +1510,8 @@ bool wxWindowMac::SetCursor(const wxCursor& cursor) #if wxUSE_MENUS bool wxWindowMac::DoPopupMenu(wxMenu *menu, int x, int y) { - menu->SetInvokingWindow(this); +#ifndef __WXUNIVERSAL__ + menu->SetInvokingWindow((wxWindow*)this); menu->UpdateUI(); if ( x == wxDefaultCoord && y == wxDefaultCoord ) @@ -1817,6 +1548,10 @@ bool wxWindowMac::DoPopupMenu(wxMenu *menu, int x, int y) menu->SetInvokingWindow( NULL ); return true; +#else + // actually this shouldn't be called, because universal is having its own implementation + return false; +#endif } #endif @@ -1868,13 +1603,7 @@ void wxWindowMac::MacInvalidateBorders() RectRgn( updateOuter, &rect ) ; DiffRgn( updateOuter, updateInner , updateOuter ) ; -#ifdef __WXMAC_OSX__ GetParent()->m_peer->SetNeedsDisplay( updateOuter ) ; -#else - WindowRef tlw = (WindowRef) MacGetTopLevelWindowRef() ; - if ( tlw ) - InvalWindowRgn( tlw , updateOuter ) ; -#endif DisposeRgn( updateOuter ) ; DisposeRgn( updateInner ) ; @@ -2110,12 +1839,14 @@ void wxWindowMac::DoSetClientSize(int clientwidth, int clientheight) void wxWindowMac::SetLabel(const wxString& title) { - m_label = wxStripMenuCodes(title, wxStrip_Mnemonics) ; + m_label = title ; if ( m_peer && m_peer->Ok() ) - m_peer->SetLabel( m_label ) ; + m_peer->SetLabel( wxStripMenuCodes(m_label, wxStrip_Mnemonics) ) ; - Refresh() ; + // do not trigger refreshes upon invisible and possible partly created objects + if ( MacIsReallyShown() ) + Refresh() ; } wxString wxWindowMac::GetLabel() const @@ -2125,17 +1856,12 @@ wxString wxWindowMac::GetLabel() const bool wxWindowMac::Show(bool show) { - bool former = MacIsReallyShown() ; if ( !wxWindowBase::Show(show) ) return false; - // TODO: use visibilityChanged Carbon Event for OSX if ( m_peer ) m_peer->SetVisibility( show , true ) ; - if ( former != MacIsReallyShown() ) - MacPropagateVisibilityChanged() ; - return true; } @@ -2144,53 +1870,6 @@ void wxWindowMac::DoEnable(bool enable) m_peer->Enable( enable ) ; } -// -// status change propagations (will be not necessary for OSX later ) -// - -void wxWindowMac::MacPropagateVisibilityChanged() -{ -#if !TARGET_API_MAC_OSX - MacVisibilityChanged() ; - - wxWindowMac *child; - wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); - while ( node ) - { - child = node->GetData(); - if ( child->IsShown() ) - child->MacPropagateVisibilityChanged() ; - - node = node->GetNext(); - } -#endif -} - -void wxWindowMac::OnEnabled(bool enabled) -{ -#if !TARGET_API_MAC_OSX - MacEnabledStateChanged() ; -#endif -} - -void wxWindowMac::MacPropagateHiliteChanged() -{ -#if !TARGET_API_MAC_OSX - MacHiliteChanged() ; - - wxWindowMac *child; - wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); - while ( node ) - { - child = node->GetData(); - if (child /* && child->IsEnabled() */) - child->MacPropagateHiliteChanged() ; - - node = node->GetNext(); - } -#endif -} - // // status change notifications // @@ -2205,6 +1884,7 @@ void wxWindowMac::MacHiliteChanged() void wxWindowMac::MacEnabledStateChanged() { + OnEnabled( m_peer->IsEnabled() ); } // @@ -2292,7 +1972,7 @@ void wxWindowMac::GetTextExtent(const wxString& string, int *x, int *y, * we always intersect with the entire window, not only with the client area */ -void wxWindowMac::Refresh(bool eraseBack, const wxRect *rect) +void wxWindowMac::Refresh(bool WXUNUSED(eraseBack), const wxRect *rect) { if ( m_peer == NULL ) return ; @@ -2352,7 +2032,7 @@ wxWindowMac *wxGetActiveWindow() } // Coordinates relative to the window -void wxWindowMac::WarpPointer(int x_pos, int y_pos) +void wxWindowMac::WarpPointer(int WXUNUSED(x_pos), int WXUNUSED(y_pos)) { // We really don't move the mouse programmatically under Mac. } @@ -2363,7 +2043,7 @@ void wxWindowMac::OnEraseBackground(wxEraseEvent& event) return ; #if TARGET_API_MAC_OSX - if ( !m_macBackgroundBrush.Ok() || m_macBackgroundBrush.GetStyle() == wxTRANSPARENT ) + if ( !m_backgroundColour.Ok() || GetBackgroundStyle() == wxBG_STYLE_TRANSPARENT ) { event.Skip() ; } @@ -2429,7 +2109,7 @@ int wxWindowMac::GetScrollThumb(int orient) const return 0; } -void wxWindowMac::SetScrollPos(int orient, int pos, bool refresh) +void wxWindowMac::SetScrollPos(int orient, int pos, bool WXUNUSED(refresh)) { if ( orient == wxHORIZONTAL ) { @@ -2443,25 +2123,76 @@ void wxWindowMac::SetScrollPos(int orient, int pos, bool refresh) } } +void +wxWindowMac::AlwaysShowScrollbars(bool hflag, bool vflag) +{ + bool needVisibilityUpdate = false; + + if ( m_hScrollBarAlwaysShown != hflag ) + { + m_hScrollBarAlwaysShown = hflag; + needVisibilityUpdate = true; + } + + if ( m_vScrollBarAlwaysShown != vflag ) + { + m_vScrollBarAlwaysShown = vflag; + needVisibilityUpdate = true; + } + + if ( needVisibilityUpdate ) + DoUpdateScrollbarVisibility(); +} + // // we draw borders and grow boxes, are already set up and clipped in the current port / cgContextRef // our own window origin is at leftOrigin/rightOrigin // -void wxWindowMac::MacPaintBorders( int leftOrigin , int rightOrigin ) +void wxWindowMac::MacPaintGrowBox() +{ + if ( IsTopLevel() ) + return ; + + if ( MacHasScrollBarCorner() ) + { + Rect rect ; + + CGContextRef cgContext = (CGContextRef) MacGetCGContextRef() ; + wxASSERT( cgContext ) ; + + m_peer->GetRect( &rect ) ; + + 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() ) + { + CGContextSetFillColorWithColor( cgContext, m_backgroundColour.GetCGColor() ); + } + else + { + CGContextSetRGBFillColor( cgContext, 1.0, 1.0 , 1.0 , 1.0 ); + } + CGContextFillRect( cgContext, cgrect ); + CGContextRestoreGState( cgContext ); + } +} + +void wxWindowMac::MacPaintBorders( int WXUNUSED(leftOrigin) , int WXUNUSED(rightOrigin) ) { if ( IsTopLevel() ) return ; Rect rect ; bool hasFocus = m_peer->NeedsFocusRect() && m_peer->HasFocus() ; - bool hasBothScrollbars = (m_hScrollBar && m_hScrollBar->IsShown()) && (m_vScrollBar && m_vScrollBar->IsShown()) ; // back to the surrounding frame rectangle m_peer->GetRect( &rect ) ; InsetRect( &rect, -1 , -1 ) ; -#if wxMAC_USE_CORE_GRAPHICS { CGRect cgrect = CGRectMake( rect.left , rect.top , rect.right - rect.left , rect.bottom - rect.top ) ; @@ -2491,11 +2222,12 @@ void wxWindowMac::MacPaintBorders( int leftOrigin , int rightOrigin ) { 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 ( hasBothScrollbars ) + if ( MacHasScrollBarCorner() ) { - int size = m_hScrollBar->GetWindowVariant() == wxWINDOW_VARIANT_NORMAL ? 16 : 12 ; + 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 ; @@ -2503,36 +2235,13 @@ void wxWindowMac::MacPaintBorders( int leftOrigin , int rightOrigin ) info.version = 0 ; info.state = IsEnabled() ? kThemeStateActive : kThemeStateInactive ; info.kind = kHIThemeGrowBoxKindNone ; + // contrary to the docs ...SizeSmall does not work info.size = kHIThemeGrowBoxSizeNormal ; - info.direction = kThemeGrowRight | kThemeGrowDown ; + info.direction = 0 ; HIThemeDrawGrowBox( &cgpoint , &info , cgContext , kHIThemeOrientationNormal ) ; } - } - #else - { - wxTopLevelWindowMac* top = MacGetTopLevelWindow(); - if ( top ) - { - wxPoint pt(0, 0) ; - wxMacControl::Convert( &pt , GetParent()->m_peer , top->m_peer ) ; - OffsetRect( &rect , pt.x , pt.y ) ; - } - - if ( HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) ) - DrawThemeEditTextFrame( &rect, IsEnabled() ? kThemeStateActive : kThemeStateInactive ) ; - else if ( HasFlag(wxSIMPLE_BORDER) ) - DrawThemeListBoxFrame( &rect, IsEnabled() ? kThemeStateActive : kThemeStateInactive ) ; - - if ( hasFocus ) - DrawThemeFocusRect( &rect , true ) ; - - if ( hasBothScrollbars ) - { - // GetThemeStandaloneGrowBoxBounds - // DrawThemeStandaloneNoGrowBox - } - } #endif + } } void wxWindowMac::RemoveChild( wxWindowBase *child ) @@ -2545,39 +2254,29 @@ void wxWindowMac::RemoveChild( wxWindowBase *child ) wxWindowBase::RemoveChild( child ) ; } -// New function that will replace some of the above. -void wxWindowMac::SetScrollbar(int orient, int pos, int thumbVisible, - int range, bool refresh) +void wxWindowMac::DoUpdateScrollbarVisibility() { - bool showScroller; bool triggerSizeEvent = false; - if ( orient == wxHORIZONTAL ) + if ( m_hScrollBar ) { - if ( m_hScrollBar ) - { - showScroller = ((range != 0) && (range > thumbVisible)); - if ( m_hScrollBar->IsShown() != showScroller ) - { - m_hScrollBar->Show( showScroller ); - triggerSizeEvent = true; - } + bool showHScrollBar = m_hScrollBarAlwaysShown || m_hScrollBar->IsNeeded(); - m_hScrollBar->SetScrollbar( pos , thumbVisible , range , thumbVisible , refresh ) ; + if ( m_hScrollBar->IsShown() != showHScrollBar ) + { + m_hScrollBar->Show( showHScrollBar ); + triggerSizeEvent = true; } } - else + + if ( m_vScrollBar) { - if ( m_vScrollBar ) - { - showScroller = ((range != 0) && (range > thumbVisible)); - if ( m_vScrollBar->IsShown() != showScroller ) - { - m_vScrollBar->Show( showScroller ) ; - triggerSizeEvent = true; - } + bool showVScrollBar = m_vScrollBarAlwaysShown || m_vScrollBar->IsNeeded(); - m_vScrollBar->SetScrollbar( pos , thumbVisible , range , thumbVisible , refresh ) ; + if ( m_vScrollBar->IsShown() != showVScrollBar ) + { + m_vScrollBar->Show( showVScrollBar ) ; + triggerSizeEvent = true; } } @@ -2590,6 +2289,18 @@ void wxWindowMac::SetScrollbar(int orient, int pos, int thumbVisible, } } +// New function that will replace some of the above. +void wxWindowMac::SetScrollbar(int orient, int pos, int thumb, + int range, bool refresh) +{ + if ( orient == wxHORIZONTAL && m_hScrollBar ) + m_hScrollBar->SetScrollbar(pos, thumb, range, thumb, refresh); + else if ( orient == wxVERTICAL && m_vScrollBar ) + m_vScrollBar->SetScrollbar(pos, thumb, range, thumb, refresh); + + DoUpdateScrollbarVisibility(); +} + // Does a physical scroll void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect) { @@ -2617,13 +2328,7 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect) m_peer->SetNeedsDisplay() ; #else // this would be the preferred version for fast drawing controls - -#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3 - if ( UMAGetSystemVersion() >= 0x1030 ) - HIViewRender(m_peer->GetControlRef()) ; - else -#endif - Update() ; + HIViewRender(m_peer->GetControlRef()) ; #endif } @@ -2719,14 +2424,12 @@ void wxWindowMac::OnSetFocus( wxFocusEvent& event ) if ( MacGetTopLevelWindow() && m_peer->NeedsFocusRect() ) { -#if wxMAC_USE_CORE_GRAPHICS GetParent()->Refresh() ; -#else wxMacWindowStateSaver sv( this ) ; Rect rect ; m_peer->GetRect( &rect ) ; - // auf den umgebenden Rahmen zurÂŸck + // auf den umgebenden Rahmen zurチᅡ゚ck InsetRect( &rect, -1 , -1 ) ; wxTopLevelWindowMac* top = MacGetTopLevelWindow(); @@ -2749,7 +2452,6 @@ void wxWindowMac::OnSetFocus( wxFocusEvent& event ) // we have to invalidate things, we cannot simple redraw MacInvalidateBorders() ; } -#endif } event.Skip(); @@ -2759,7 +2461,7 @@ void wxWindowMac::OnInternalIdle() { // This calls the UI-update mechanism (querying windows for // menu/toolbar/control state information) - if (wxUpdateUIEvent::CanUpdate(this)) + if (wxUpdateUIEvent::CanUpdate(this) && IsShown()) UpdateWindowUI(wxUPDATE_UI_FROMIDLE); } @@ -2813,7 +2515,7 @@ bool wxWindowMac::MacSetupCursor( const wxPoint& pt ) return cursor.Ok() ; } -wxString wxWindowMac::MacGetToolTipString( wxPoint &pt ) +wxString wxWindowMac::MacGetToolTipString( wxPoint &WXUNUSED(pt) ) { #if wxUSE_TOOLTIPS if ( m_tooltip ) @@ -2831,11 +2533,9 @@ void wxWindowMac::ClearBackground() void wxWindowMac::Update() { -#if TARGET_API_MAC_OSX - MacGetTopLevelWindow()->MacPerformUpdates() ; -#else - ::Draw1Control( m_peer->GetControlRef() ) ; -#endif + wxTopLevelWindowMac* top = MacGetTopLevelWindow(); + if (top) + top->MacPerformUpdates() ; } wxTopLevelWindowMac* wxWindowMac::MacGetTopLevelWindow() const @@ -2977,7 +2677,7 @@ void wxWindowMac::MacUpdateClippedRects() const /* This function must not change the updatergn ! */ -bool wxWindowMac::MacDoRedraw( WXHRGN updatergnr , long time ) +bool wxWindowMac::MacDoRedraw( void* updatergnr , long time ) { bool handled = false ; Rect updatebounds ; @@ -3002,9 +2702,9 @@ bool wxWindowMac::MacDoRedraw( WXHRGN updatergnr , long time ) // the grow-box area of a scrolled window (scroll sample) wxDC* dc = new wxWindowDC(this); if ( IsTopLevel() ) - dc->SetClippingRegion(wxRegion(updatergn)); + dc->SetClippingRegion(wxRegion(HIShapeCreateWithQDRgn(updatergn))); else - dc->SetClippingRegion(wxRegion(newupdate)); + dc->SetClippingRegion(wxRegion(HIShapeCreateWithQDRgn(newupdate))); wxEraseEvent eevent( GetId(), dc ); eevent.SetEventObject( this ); @@ -3012,9 +2712,11 @@ bool wxWindowMac::MacDoRedraw( WXHRGN updatergnr , long time ) delete dc ; } + MacPaintGrowBox(); + // calculate a client-origin version of the update rgn and set m_updateRegion to that OffsetRgn( newupdate , -origin.x , -origin.y ) ; - m_updateRegion = newupdate ; + m_updateRegion = wxRegion(HIShapeCreateWithQDRgn(newupdate)) ; DisposeRgn( newupdate ) ; if ( !m_updateRegion.Empty() ) @@ -3065,16 +2767,7 @@ bool wxWindowMac::MacDoRedraw( WXHRGN updatergnr , long time ) eventNc.SetEventObject( child ); if ( !child->GetEventHandler()->ProcessEvent( eventNc ) ) { -#if wxMAC_USE_CORE_GRAPHICS child->MacPaintBorders(0, 0) ; -#else - { - wxWindowDC dc(this) ; - dc.SetClippingRegion(wxRegion(updatergn)); - wxMacPortSetter helper(&dc) ; - child->MacPaintBorders(0, 0) ; - } -#endif } } } @@ -3091,28 +2784,99 @@ WXWindow wxWindowMac::MacGetTopLevelWindowRef() const while ( iter ) { if ( iter->IsTopLevel() ) - return ((wxTopLevelWindow*)iter)->MacGetWindowRef() ; - + { + wxTopLevelWindow* toplevel = wxDynamicCast(iter,wxTopLevelWindow); + if ( toplevel ) + return toplevel->MacGetWindowRef(); +#if wxUSE_POPUPWIN + wxPopupWindow* popupwin = wxDynamicCast(iter,wxPopupWindow); + if ( popupwin ) + return popupwin->MacGetPopupWindowRef(); +#endif + } iter = iter->GetParent() ; } return NULL ; } +bool wxWindowMac::MacHasScrollBarCorner() const +{ + /* Returns whether the scroll bars in a wxScrolledWindow should be + * shortened. Scroll bars should be shortened if either: + * + * - both scroll bars are visible, or + * + * - there is a resize box in the parent frame's corner and this + * window shares the bottom and right edge with the parent + * frame. + */ + + if ( m_hScrollBar == NULL && m_vScrollBar == NULL ) + return false; + + if ( ( m_hScrollBar && m_hScrollBar->IsShown() ) + && ( m_vScrollBar && m_vScrollBar->IsShown() ) ) + { + // Both scroll bars visible + return true; + } + else + { + wxPoint thisWindowBottomRight = GetScreenRect().GetBottomRight(); + + for ( const wxWindow *win = this; win; win = win->GetParent() ) + { + const wxFrame *frame = wxDynamicCast( win, wxFrame ) ; + if ( frame ) + { + if ( frame->GetWindowStyleFlag() & wxRESIZE_BORDER ) + { + // Parent frame has resize handle + wxPoint frameBottomRight = frame->GetScreenRect().GetBottomRight(); + + // Note: allow for some wiggle room here as wxMac's + // window rect calculations seem to be imprecise + if ( abs( thisWindowBottomRight.x - frameBottomRight.x ) <= 2 + && abs( thisWindowBottomRight.y - frameBottomRight.y ) <= 2 ) + { + // Parent frame has resize handle and shares + // right bottom corner + return true ; + } + else + { + // Parent frame has resize handle but doesn't + // share right bottom corner + return false ; + } + } + else + { + // Parent frame doesn't have resize handle + return false ; + } + } + } + + // No parent frame found + return false ; + } +} + void wxWindowMac::MacCreateScrollBars( long style ) { wxASSERT_MSG( m_vScrollBar == NULL && m_hScrollBar == NULL , wxT("attempt to create window twice") ) ; if ( style & ( wxVSCROLL | wxHSCROLL ) ) { - bool hasBoth = ( style & wxVSCROLL ) && ( style & wxHSCROLL ) ; int scrlsize = MAC_SCROLLBAR_SIZE ; if ( GetWindowVariant() == wxWINDOW_VARIANT_SMALL || GetWindowVariant() == wxWINDOW_VARIANT_MINI ) { scrlsize = MAC_SMALL_SCROLLBAR_SIZE ; } - int adjust = hasBoth ? scrlsize - 1: 0 ; + int adjust = MacHasScrollBarCorner() ? scrlsize - 1: 0 ; int width, height ; GetClientSize( &width , &height ) ; @@ -3121,11 +2885,18 @@ void wxWindowMac::MacCreateScrollBars( long style ) wxPoint hPoint(0, height - scrlsize) ; wxSize hSize(width - adjust, scrlsize) ; + // we have to set the min size to a smaller value, otherwise they cannot get smaller (InitialSize sets MinSize) if ( style & wxVSCROLL ) - m_vScrollBar = new wxScrollBar(this, wxID_ANY, vPoint, vSize , wxVERTICAL); + { + m_vScrollBar = new wxScrollBar((wxWindow*)this, wxID_ANY, vPoint, vSize , wxVERTICAL); + m_vScrollBar->SetMinSize( wxDefaultSize ); + } if ( style & wxHSCROLL ) - m_hScrollBar = new wxScrollBar(this, wxID_ANY, hPoint, hSize , wxHORIZONTAL); + { + m_hScrollBar = new wxScrollBar((wxWindow*)this, wxID_ANY, hPoint, hSize , wxHORIZONTAL); + m_hScrollBar->SetMinSize( wxDefaultSize ); + } } // because the create does not take into account the client area origin @@ -3145,9 +2916,8 @@ void wxWindowMac::MacRepositionScrollBars() if ( !m_hScrollBar && !m_vScrollBar ) return ; - bool hasBoth = (m_hScrollBar && m_hScrollBar->IsShown()) && ( m_vScrollBar && m_vScrollBar->IsShown()) ; int scrlsize = m_hScrollBar ? m_hScrollBar->GetSize().y : ( m_vScrollBar ? m_vScrollBar->GetSize().x : MAC_SCROLLBAR_SIZE ) ; - int adjust = hasBoth ? scrlsize - 1 : 0 ; + int adjust = MacHasScrollBarCorner() ? scrlsize - 1 : 0 ; // get real client area int width, height ; @@ -3339,15 +3109,18 @@ void wxWindowMac::OnMouseEvent( wxMouseEvent &event ) } } -void wxWindowMac::OnPaint( wxPaintEvent & event ) +void wxWindowMac::OnPaint( wxPaintEvent & WXUNUSED(event) ) { - if ( wxTheApp->MacGetCurrentEvent() != NULL && wxTheApp->MacGetCurrentEventHandlerCallRef() != NULL ) + if ( wxTheApp->MacGetCurrentEvent() != NULL && wxTheApp->MacGetCurrentEventHandlerCallRef() != NULL + && GetBackgroundStyle() != wxBG_STYLE_TRANSPARENT ) CallNextEventHandler( (EventHandlerCallRef)wxTheApp->MacGetCurrentEventHandlerCallRef() , (EventRef) wxTheApp->MacGetCurrentEvent() ) ; } -void wxWindowMac::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED( mouseStillDown ) ) +void wxWindowMac::MacHandleControlClick(WXWidget WXUNUSED(control), + wxInt16 WXUNUSED(controlpart), + bool WXUNUSED(mouseStillDown)) { } @@ -3384,29 +3157,23 @@ bool wxWindowMac::Reparent(wxWindowBase *newParentBase) bool wxWindowMac::SetTransparent(wxByte alpha) { -#if wxMAC_USE_CORE_GRAPHICS + SetBackgroundStyle(wxBG_STYLE_TRANSPARENT); + if ( alpha != m_macAlpha ) { m_macAlpha = alpha ; Refresh() ; } return true ; -#else - return false ; -#endif } bool wxWindowMac::CanSetTransparent() { -#if wxMAC_USE_CORE_GRAPHICS return true ; -#else - return false ; -#endif } -wxByte wxWindowMac::GetTransparent() const +wxByte wxWindowMac::GetTransparent() const { return m_macAlpha ; }