X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/22f3361e1cf25c52a2da8fdfc5cb081809e18fb9..46b24ef914e83d93f4ff01c41ef472ff29c18198:/src/generic/treectlg.cpp diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp index c02717df41..5a2ae98fb0 100644 --- a/src/generic/treectlg.cpp +++ b/src/generic/treectlg.cpp @@ -5,7 +5,7 @@ // Created: 01/02/97 // Modified: 22/10/98 - almost total rewrite, simpler interface (VZ) // Id: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling and Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -38,6 +38,10 @@ #include "wx/settings.h" #include "wx/dcclient.h" +#ifdef __WXMAC__ + #include "wx/mac/private.h" +#endif + // ----------------------------------------------------------------------------- // array types // ----------------------------------------------------------------------------- @@ -292,7 +296,7 @@ private: short m_images[wxTreeItemIcon_Max]; wxCoord m_x; // (virtual) offset from top - short m_y; // (virtual) offset from left + wxCoord m_y; // (virtual) offset from left short m_width; // width of this item unsigned char m_height; // height of this item @@ -2128,7 +2132,20 @@ void wxGenericTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc) if ( item->IsSelected() ) { +// under mac selections are only a rectangle in case they don't have the focus +#ifdef __WXMAC__ + if ( !m_hasFocus ) + { + dc.SetBrush( *wxTRANSPARENT_BRUSH ) ; + dc.SetPen( wxPen( wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHT ) , 1 , wxSOLID ) ) ; + } + else + { + dc.SetBrush( *m_hilightBrush ) ; + } +#else dc.SetBrush(*(m_hasFocus ? m_hilightBrush : m_hilightUnfocusedBrush)); +#endif } else { @@ -2309,10 +2326,26 @@ void wxGenericTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level if (HasFlag(wxTR_AQUA_BUTTONS)) { + // This causes update problems, so disabling for now. +#if 0 // def __WXMAC__ + wxMacPortSetter helper(&dc) ; + wxMacWindowClipper clipper(this) ; + wxDC::MacSetupBackgroundForCurrentPort( MacGetBackgroundBrush() ) ; + + int loc_x = x - 5 ; + int loc_y = y_mid - 6 ; + MacWindowToRootWindow( & loc_x , & loc_y ) ; + Rect bounds = { loc_y , loc_x , loc_y + 18 , loc_x + 12 } ; + ThemeButtonDrawInfo info = { kThemeStateActive , item->IsExpanded() ? kThemeDisclosureDown : kThemeDisclosureRight , + kThemeAdornmentNone }; + DrawThemeButton( &bounds, kThemeDisclosureButton , + &info , NULL , NULL , NULL , NULL ) ; +#else if (item->IsExpanded()) dc.DrawBitmap( *m_arrowDown, x-5, y_mid-6, TRUE ); else dc.DrawBitmap( *m_arrowRight, x-5, y_mid-6, TRUE ); +#endif } else { @@ -2385,7 +2418,23 @@ void wxGenericTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level // draw line down to last child oldY += GetLineHeight(children[n-1])>>1; if (HasButtons()) y_mid += 5; - dc.DrawLine(x, y_mid, x, oldY); + + // Only draw the portion of the line that is visible, in case it is huge + wxCoord xOrigin=0, yOrigin=0, width, height; + dc.GetDeviceOrigin(&xOrigin, &yOrigin); + yOrigin = abs(yOrigin); + GetClientSize(&width, &height); + + // Move end points to the begining/end of the view? + if (y_mid < yOrigin) + y_mid = yOrigin; + if (oldY > yOrigin + height) + oldY = yOrigin + height; + + // after the adjustments if y_mid is larger than oldY then the line + // isn't visible at all so don't draw anything + if (y_mid < oldY) + dc.DrawLine(x, y_mid, x, oldY); } } } @@ -2529,7 +2578,7 @@ void wxGenericTreeCtrl::OnChar( wxKeyEvent &event ) // home : go to root // end : go to last item without opening parents // alnum : start or continue searching for the item with this prefix - int keyCode = event.KeyCode(); + int keyCode = event.GetKeyCode(); switch ( keyCode ) { case '+':