#define wxWINDOW_VSCROLL 5997
#define MAC_SCROLLBAR_SIZE 16
-#include <wx/mac/uma.h>
+#include "wx/mac/uma.h"
#if wxUSE_DRAG_AND_DROP
#include "wx/dnd.h"
}
#endif // wxUSE_CARET
// panel wants to track the window which was the last to have focus in it
- wxPanel *panel = wxDynamicCast(GetParent(), wxPanel);
- if ( panel )
- {
- panel->SetLastFocus((wxWindow*)this);
- }
+ wxChildFocusEvent eventFocus(this);
+ (void)GetEventHandler()->ProcessEvent(eventFocus);
+
#ifndef __WXUNIVERSAL__
wxControl* control = wxDynamicCast( gFocusWindow , wxControl ) ;
if ( control && control->GetMacControl() )
{
if ( m_macWindowData == NULL)
{
- if(x) *x += m_x ;
- if(y) *y += m_y ;
+ if(x) *x += m_x + MacGetLeftBorderSize();
+ if(y) *y += m_y + MacGetTopBorderSize();
GetParent()->MacClientToRootWindow( x , y ) ;
}
}
{
if ( m_macWindowData == NULL)
{
- if(x) *x -= m_x ;
- if(y) *y -= m_y ;
+ if(x) *x -= m_x + MacGetLeftBorderSize();
+ if(y) *y -= m_y + MacGetTopBorderSize();
GetParent()->MacRootWindowToClient( x , y ) ;
}
}
void wxWindowMac::DoMoveWindow(int x, int y, int width, int height)
{
- DoSetSize( x,y, width, height ) ;
-}
-
-// set the size of the window: if the dimensions are positive, just use them,
-// but if any of them is equal to -1, it means that we must find the value for
-// it ourselves (unless sizeFlags contains wxSIZE_ALLOW_MINUS_ONE flag, in
-// which case -1 is a valid value for x and y)
-//
-// If sizeFlags contains wxSIZE_AUTO_WIDTH/HEIGHT flags (default), we calculate
-// the width/height to best suit our contents, otherwise we reuse the current
-// width/height
-void wxWindowMac::DoSetSize(int x, int y, int width, int height, int sizeFlags)
-{
-
int former_x = m_x ;
int former_y = m_y ;
int former_w = m_width ;
int former_h = m_height ;
- int currentX, currentY;
- GetPosition(¤tX, ¤tY);
- int currentW,currentH;
- GetSize(¤tW, ¤tH);
-
int actualWidth = width;
int actualHeight = height;
int actualX = x;
int actualY = y;
- if (x == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
- actualX = currentX;
- if (y == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
- actualY = currentY;
- wxSize size( -1 , -1 ) ;
-
- if (width == -1 || height == -1 )
- {
- size = DoGetBestSize() ;
- }
-
- if ( width == -1 )
- {
- if ( sizeFlags & wxSIZE_AUTO_WIDTH )
- {
- actualWidth = size.x ;
- if ( actualWidth == -1 )
- actualWidth = 80 ;
- }
- else
- {
- actualWidth = currentW ;
- }
- }
- if (height == -1)
- {
- if ( sizeFlags & wxSIZE_AUTO_HEIGHT )
- {
- actualHeight = size.y ;
- if ( actualHeight == -1 )
- actualHeight = 26 ;
- }
- else
- {
- actualHeight = currentH ;
- }
- }
-
if ((m_minWidth != -1) && (actualWidth < m_minWidth))
actualWidth = m_minWidth;
if ((m_minHeight != -1) && (actualHeight < m_minHeight))
actualWidth = m_maxWidth;
if ((m_maxHeight != -1) && (actualHeight > m_maxHeight))
actualHeight = m_maxHeight;
- if ( actualX == currentX && actualY == currentY && actualWidth == currentW && actualHeight == currentH)
- {
- MacRepositionScrollBars() ; // we might have a real position shift
- return ;
- }
- AdjustForParentClientOrigin(actualX, actualY, sizeFlags);
-
-
bool doMove = false ;
bool doResize = false ;
frame->PositionStatusBar();
frame->PositionToolBar();
}
+ if ( doMove )
+ wxWindowMac::MacTopLevelWindowChangedPosition() ; // like this only children will be notified
}
else
{
GetEventHandler()->ProcessEvent(event);
}
}
+
+}
+
+// set the size of the window: if the dimensions are positive, just use them,
+// but if any of them is equal to -1, it means that we must find the value for
+// it ourselves (unless sizeFlags contains wxSIZE_ALLOW_MINUS_ONE flag, in
+// which case -1 is a valid value for x and y)
+//
+// If sizeFlags contains wxSIZE_AUTO_WIDTH/HEIGHT flags (default), we calculate
+// the width/height to best suit our contents, otherwise we reuse the current
+// width/height
+void wxWindowMac::DoSetSize(int x, int y, int width, int height, int sizeFlags)
+{
+ // get the current size and position...
+ int currentX, currentY;
+ GetPosition(¤tX, ¤tY);
+ int currentW,currentH;
+ GetSize(¤tW, ¤tH);
+
+ // ... and don't do anything (avoiding flicker) if it's already ok
+ if ( x == currentX && y == currentY &&
+ width == currentW && height == currentH )
+ {
+ MacRepositionScrollBars() ; // we might have a real position shift
+ return;
+ }
+
+ if ( x == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) )
+ x = currentX;
+ if ( y == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) )
+ y = currentY;
+
+ AdjustForParentClientOrigin(x, y, sizeFlags);
+
+ wxSize size(-1, -1);
+ if ( width == -1 )
+ {
+ if ( sizeFlags & wxSIZE_AUTO_WIDTH )
+ {
+ size = DoGetBestSize();
+ width = size.x;
+ }
+ else
+ {
+ // just take the current one
+ width = currentW;
+ }
+ }
+
+ if ( height == -1 )
+ {
+ if ( sizeFlags & wxSIZE_AUTO_HEIGHT )
+ {
+ if ( size.x == -1 )
+ {
+ size = DoGetBestSize();
+ }
+ //else: already called DoGetBestSize() above
+
+ height = size.y;
+ }
+ else
+ {
+ // just take the current one
+ height = currentH;
+ }
+ }
+
+ DoMoveWindow(x, y, width, height);
+
}
// For implementation purposes - sometimes decorations make the client area
// smaller
{
if (show)
{
- UMAShowWindow( m_macWindowData->m_macWindow ) ;
- UMASelectWindow( m_macWindowData->m_macWindow ) ;
+ ::ShowWindow( m_macWindowData->m_macWindow ) ;
+ ::SelectWindow( m_macWindowData->m_macWindow ) ;
// no need to generate events here, they will get them triggered by macos
// actually they should be , but apparently they are not
wxSize size(m_width, m_height);
}
else
{
- UMAHideWindow( m_macWindowData->m_macWindow ) ;
+ ::HideWindow( m_macWindowData->m_macWindow ) ;
}
}
MacSuperShown( show ) ;
attr |= kWindowCloseBoxAttribute ;
}
- UMACreateNewWindow( wclass , attr , &theBoundsRect , &m_macWindowData->m_macWindow ) ;
+ ::CreateNewWindow( wclass , attr , &theBoundsRect , &m_macWindowData->m_macWindow ) ;
wxAssociateWinWithMacWindow( m_macWindowData->m_macWindow , this ) ;
wxString label ;
if( wxApp::s_macDefaultEncodingIsPC )
else
label = title ;
UMASetWTitleC( m_macWindowData->m_macWindow , label ) ;
- UMACreateRootControl( m_macWindowData->m_macWindow , &m_macWindowData->m_macRootControl ) ;
+ ::CreateRootControl( m_macWindowData->m_macWindow , &m_macWindowData->m_macRootControl ) ;
m_macWindowData->m_macFocus = NULL ;
m_macWindowData->m_macHasReceivedFirstActivate = true ;
if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) || HasFlag(wxDOUBLE_BORDER) )
{
bool sunken = HasFlag( wxSUNKEN_BORDER ) ;
- RGBColor pen1 = sunken ? white : black ;
- RGBColor pen2 = sunken ? shadow : face ;
- RGBColor pen3 = sunken ? face : shadow ;
- RGBColor pen4 = sunken ? black : white ;
-
- RGBForeColor( &pen1 ) ;
- {
- Rect rect = { 0 , 0 , m_height , m_width } ;
- FrameRect( &rect ) ;
- }
- RGBForeColor( &pen2 ) ;
- {
- Rect rect = { 1 , 1 , m_height -1 , m_width -1} ;
- FrameRect( &rect ) ;
- }
- RGBForeColor( &pen3 ) ;
- {
- Rect rect = { 0 , 0 , m_height -2 , m_width -2} ;
- FrameRect( &rect ) ;
- }
- RGBForeColor( &pen4 ) ;
- {
- MoveTo( 0 , 0 ) ;
- LineTo( m_width - 3 , 0 ) ;
- MoveTo( 0 , 0 ) ;
- LineTo( 0 , m_height - 3 ) ;
- }
+ RGBForeColor( &face );
+ MoveTo( 0 , m_height - 2 );
+ LineTo( 0 , 0 );
+ LineTo( m_width - 2 , 0 );
+
+ MoveTo( 2 , m_height - 3 );
+ LineTo( m_width - 3 , m_height - 3 );
+ LineTo( m_width - 3 , 2 );
+
+ RGBForeColor( sunken ? &face : &black );
+ MoveTo( 0 , m_height - 1 );
+ LineTo( m_width - 1 , m_height - 1 );
+ LineTo( m_width - 1 , 0 );
+
+ RGBForeColor( sunken ? &shadow : &white );
+ MoveTo( 1 , m_height - 3 );
+ LineTo( 1, 1 );
+ LineTo( m_width - 3 , 1 );
+
+ RGBForeColor( sunken ? &white : &shadow );
+ MoveTo( 1 , m_height - 2 );
+ LineTo( m_width - 2 , m_height - 2 );
+ LineTo( m_width - 2 , 1 );
+
+ RGBForeColor( sunken ? &black : &face );
+ MoveTo( 2 , m_height - 4 );
+ LineTo( 2 , 2 );
+ LineTo( m_width - 4 , 2 );
}
else if (HasFlag(wxSIMPLE_BORDER))
{
RGBForeColor( &black ) ;
FrameRect( &rect ) ;
}
-/*
- if ( this->GetParent() )
- {
- wxPaintDC dc(GetParent());
- GetParent()->PrepareDC(dc);
-
- if (HasFlag(wxRAISED_BORDER) || HasFlag( wxSUNKEN_BORDER) )
- {
- bool sunken = HasFlag( wxSUNKEN_BORDER ) ;
-
- wxPen m_penButton3DShadow( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_3DSHADOW ), 1, wxSOLID ) ;
- wxPen m_penButton3DFace( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_3DFACE ), 1, wxSOLID ) ;
-
- wxPen wxPen1 = sunken ? *wxWHITE_PEN : *wxBLACK_PEN;
- wxPen wxPen2 = sunken ? m_penButton3DShadow : m_penButton3DShadow;
- wxPen wxPen3 = sunken ? m_penButton3DFace : m_penButton3DShadow;
- wxPen wxPen4 = sunken ? *wxBLACK_PEN : *wxWHITE_PEN;
-
- dc.SetPen(wxPen1);
- dc.DrawRectangle(m_x, m_y, m_width, m_height); // outer - right and button
-
- dc.SetPen(wxPen2);
- dc.DrawRectangle(m_x+1, m_y+1, m_width-1, m_height-1); // outer - left and top
-
- dc.SetPen(wxPen3);
- dc.DrawRectangle(m_x, m_y, m_width-2, m_height-2); // inner - right and button
-
- dc.SetPen(wxPen4);
- dc.DrawLine(m_x, m_y, m_x + m_width-3, m_y); // inner - left and top
- dc.DrawLine(m_x, m_y, m_x, m_y + m_height-3);
- }
- else if (HasFlag(wxDOUBLE_BORDER))
- {
- bool sunken = HasFlag( wxSUNKEN_BORDER ) ;
-
- wxPen m_penButton3DShadow( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_3DSHADOW ), 1, wxSOLID ) ;
- wxPen m_penButton3DFace( wxSystemSettings::GetSystemColour( wxSYS_COLOUR_3DFACE ), 1, wxSOLID ) ;
-
- wxPen wxPen1 = sunken ? *wxWHITE_PEN : *wxBLACK_PEN;
- wxPen wxPen2 = sunken ? m_penButton3DShadow : m_penButton3DShadow;
- wxPen wxPen3 = sunken ? m_penButton3DFace : m_penButton3DShadow;
- wxPen wxPen4 = sunken ? *wxBLACK_PEN : *wxWHITE_PEN;
-
- dc.SetPen(wxPen1);
- dc.DrawRectangle(m_x, m_y, m_width, m_height); // outer - right and button
-
- dc.SetPen(wxPen2);
- dc.DrawRectangle(m_x+1, m_y+1, m_width-1, m_height-1); // outer - left and top
-
- dc.SetPen(wxPen3);
- dc.DrawRectangle(m_x, m_y, m_width-2, m_height-2); // inner - right and button
-
- dc.SetPen(wxPen4);
- dc.DrawLine(m_x, m_y, m_x + m_width-3, m_y); // inner - left and top
- dc.DrawLine(m_x, m_y, m_x, m_y + m_height-3);
- }
- else if (HasFlag(wxSIMPLE_BORDER))
- {
- dc.SetPen(*wxBLACK_PEN);
- dc.DrawRectangle(m_x, m_y, m_width, m_height);
- }
- }
- */
}
// New function that will replace some of the above.
// notice that it's also important to do it upwards the tree becaus
// otherwise when the top level panel gets focus, it won't set it back to
// us, but to some other sibling
- wxWindowMac *win = this;
- while ( win )
- {
- wxWindowMac *parent = win->GetParent();
- wxPanel *panel = wxDynamicCast(parent, wxPanel);
- if ( panel )
- {
- panel->SetLastFocus(win);
- }
-
- win = parent;
- }
+
+ // CS:don't know if this is still needed:
+ //wxChildFocusEvent eventFocus(this);
+ //(void)GetEventHandler()->ProcessEvent(eventFocus);
event.Skip();
}
int w ,h ;
wxPoint origin = GetClientAreaOrigin() ;
GetClientSize( &w , &h ) ;
- UMASetThemeWindowBackground( m_macWindowData->m_macWindow , m_macWindowData->m_macWindowBackgroundTheme , false ) ;
+ ::SetThemeWindowBackground( m_macWindowData->m_macWindow , m_macWindowData->m_macWindowBackgroundTheme , false ) ;
Rect r = { origin.y , origin.x, origin.y+h , origin.x+w } ;
EraseRect( &r ) ;
}
{
if ( m_macWindowData )
{
- UMABringToFront( m_macWindowData->m_macWindow ) ;
+ ::BringToFront( m_macWindowData->m_macWindow ) ;
}
}
{
if ( m_macWindowData )
{
- UMASendBehind( m_macWindowData->m_macWindow , NULL ) ;
+ ::SendBehind( m_macWindowData->m_macWindow , NULL ) ;
}
}
eraseBackground = true ;
if ( m_backgroundColour == wxSystemSettings::GetSystemColour(wxSYS_COLOUR_APPWORKSPACE) )
{
- UMASetThemeWindowBackground( window , kThemeBrushDocumentWindowBackground , false ) ;
+ ::SetThemeWindowBackground( window , kThemeBrushDocumentWindowBackground , false ) ;
}
else if ( m_backgroundColour == wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE ) )
{
{
Rect box ;
GetRegionBounds( updatergn , &box) ;
- UMAApplyThemeBackground(kThemeBackgroundTabPane, &box , kThemeStateActive,8,true);
+ ::ApplyThemeBackground(kThemeBackgroundTabPane, &box , kThemeStateActive,8,true);
break ;
}
}
if ( !parent )
{
// if there is nothing special -> use default
- UMASetThemeWindowBackground( window , kThemeBrushDialogBackgroundActive , false ) ;
+ ::SetThemeWindowBackground( window , kThemeBrushDialogBackgroundActive , false ) ;
}
}
else
}
}
+void wxWindowMac::MacTopLevelWindowChangedPosition()
+{
+ // only screen-absolute structures have to be moved i.e. glcanvas
+
+ wxNode *node = GetChildren().First();
+ while ( node )
+ {
+ wxWindowMac *child = (wxWindowMac *)node->Data();
+ child->MacTopLevelWindowChangedPosition() ;
+ node = node->Next();
+ }
+}
+
bool wxWindowMac::MacSetPortFocusParams( const Point & localOrigin, const Rect & clipRect, WindowRef window , wxWindowMac* win )
{
if ( window == NULL )
Pattern whiteColor ;
::BackPat( GetQDGlobalsWhite( &whiteColor) ) ;
- ::UMASetThemeWindowBackground( win->m_macWindowData->m_macWindow , win->m_macWindowData->m_macWindowBackgroundTheme , false ) ;
+ ::SetThemeWindowBackground( win->m_macWindowData->m_macWindow , win->m_macWindowData->m_macWindowBackgroundTheme , false ) ;
return true;
}
if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
{
- return 2 ;
+ return 3 ;
}
else if ( m_windowStyle &wxDOUBLE_BORDER)
{
- return 2 ;
+ return 3 ;
}
else if (m_windowStyle &wxSIMPLE_BORDER)
{
}
else if (m_windowStyle &wxSIMPLE_BORDER)
{
- return 3 ;
+ return 1 ;
}
return 0 ;
}
if (m_windowStyle & wxRAISED_BORDER || m_windowStyle & wxSUNKEN_BORDER )
{
- return 2 ;
+ return 3 ;
}
else if ( m_windowStyle &wxDOUBLE_BORDER)
{
- return 2 ;
+ return 3 ;
}
else if (m_windowStyle &wxSIMPLE_BORDER)
{
}
else if (m_windowStyle &wxSIMPLE_BORDER)
{
- return 3 ;
+ return 1 ;
}
return 0 ;
}