]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/topluniv.cpp
Add missing WXK constants for the control keys
[wxWidgets.git] / src / univ / topluniv.cpp
index 3d0f437c5b7fd331c056b3b29771b49db6ad1aac..f6dbfa3c497631cbe862f171fdc1d8bf8856b098 100644 (file)
@@ -80,6 +80,15 @@ int wxTopLevelWindow::ms_canIconize = -1;
 
 void wxTopLevelWindow::Init()
 {
+    // once-only ms_drawDecorations initialization
+    if ( ms_drawDecorations == -1 )
+    {
+        ms_drawDecorations =
+            !wxSystemSettings::HasFeature(wxSYS_CAN_DRAW_FRAME_DECORATIONS) ||
+            wxGetEnv(wxT("WXDECOR"), NULL);
+    }
+
+    m_usingNativeDecorations = ms_drawDecorations == 0;
     m_isActive = false;
     m_windowStyle = 0;
     m_pressedButton = 0;
@@ -97,30 +106,15 @@ bool wxTopLevelWindow::Create(wxWindow *parent,
     long styleOrig = 0,
          exstyleOrig = 0;
 
-    if ( ms_drawDecorations == -1 )
-    {
-        ms_drawDecorations =
-            !wxSystemSettings::HasFeature(wxSYS_CAN_DRAW_FRAME_DECORATIONS)
-            || wxGetEnv(wxT("WXDECOR"), NULL);
-        // FIXME -- wxUniv should provide a way to force non-native decorations!
-        //          $WXDECOR is just a hack in absence of better wxUniv solution
-    }
-
-    if ( ms_canIconize == -1 )
-    {
-        ms_canIconize = wxSystemSettings::HasFeature(wxSYS_CAN_ICONIZE_FRAME);
-    }
-
-    if ( ms_drawDecorations )
+    if ( !m_usingNativeDecorations )
     {
         CreateInputHandler(wxINP_HANDLER_TOPLEVEL);
 
         styleOrig = style;
         exstyleOrig = GetExtraStyle();
         style &= ~(wxCAPTION | wxMINIMIZE_BOX | wxMAXIMIZE_BOX |
-                   wxSYSTEM_MENU | wxRESIZE_BORDER | wxFRAME_TOOL_WINDOW |
-                   wxRESIZE_BORDER);
-        style |= wxSIMPLE_BORDER;
+                   wxSYSTEM_MENU | wxFRAME_TOOL_WINDOW | wxRESIZE_BORDER);
+        style |= wxBORDER_NONE;
         SetExtraStyle(exstyleOrig & ~wxWS_EX_CONTEXTHELP);
     }
 
@@ -128,7 +122,7 @@ bool wxTopLevelWindow::Create(wxWindow *parent,
                                          size, style, name) )
         return false;
 
-    if ( ms_drawDecorations )
+    if ( !m_usingNativeDecorations )
     {
         m_windowStyle = styleOrig;
         m_exStyle = exstyleOrig;
@@ -141,7 +135,7 @@ bool wxTopLevelWindow::ShowFullScreen(bool show, long style)
 {
     if ( show == IsFullScreen() ) return false;
 
-    if ( ms_drawDecorations )
+    if ( !m_usingNativeDecorations )
     {
         if ( show )
         {
@@ -160,13 +154,38 @@ bool wxTopLevelWindow::ShowFullScreen(bool show, long style)
     return wxTopLevelWindowNative::ShowFullScreen(show, style);
 }
 
+/* static */
+void wxTopLevelWindow::UseNativeDecorationsByDefault(bool native)
+{
+    ms_drawDecorations = !native;
+}
+
+void wxTopLevelWindow::UseNativeDecorations(bool native)
+{
+    wxASSERT_MSG( !m_windowStyle, wxT("must be called before Create()") );
+
+    m_usingNativeDecorations = native;
+}
+
+bool wxTopLevelWindow::IsUsingNativeDecorations() const
+{
+    return m_usingNativeDecorations;
+}
+
 long wxTopLevelWindow::GetDecorationsStyle() const
 {
     long style = 0;
 
     if ( m_windowStyle & wxCAPTION )
     {
-        style |= wxTOPLEVEL_TITLEBAR | wxTOPLEVEL_BUTTON_CLOSE;
+        if ( ms_canIconize == -1 )
+        {
+            ms_canIconize = wxSystemSettings::HasFeature(wxSYS_CAN_ICONIZE_FRAME);
+        }
+
+        style |= wxTOPLEVEL_TITLEBAR;
+        if ( m_windowStyle & wxCLOSE_BOX )
+            style |= wxTOPLEVEL_BUTTON_CLOSE;
         if ( (m_windowStyle & wxMINIMIZE_BOX) && ms_canIconize )
             style |= wxTOPLEVEL_BUTTON_ICONIZE;
         if ( m_windowStyle & wxMAXIMIZE_BOX )
@@ -183,12 +202,12 @@ long wxTopLevelWindow::GetDecorationsStyle() const
     }
     if ( (m_windowStyle & (wxSIMPLE_BORDER | wxNO_BORDER)) == 0 )
         style |= wxTOPLEVEL_BORDER;
-    if ( m_windowStyle & (wxRESIZE_BORDER | wxRESIZE_BORDER) )
+    if ( m_windowStyle & wxRESIZE_BORDER )
         style |= wxTOPLEVEL_RESIZEABLE;
 
     if ( IsMaximized() )
         style |= wxTOPLEVEL_MAXIMIZED;
-    if ( GetIcon().Ok() )
+    if ( GetIcon().IsOk() )
         style |= wxTOPLEVEL_ICON;
     if ( m_isActive )
         style |= wxTOPLEVEL_ACTIVE;
@@ -209,7 +228,7 @@ void wxTopLevelWindow::RefreshTitleBar()
 
 wxPoint wxTopLevelWindow::GetClientAreaOrigin() const
 {
-    if ( ms_drawDecorations )
+    if ( !m_usingNativeDecorations )
     {
         int w, h;
         wxTopLevelWindowNative::DoGetClientSize(&w, &h);
@@ -227,7 +246,7 @@ wxPoint wxTopLevelWindow::GetClientAreaOrigin() const
 
 void wxTopLevelWindow::DoGetClientSize(int *width, int *height) const
 {
-    if ( ms_drawDecorations )
+    if ( !m_usingNativeDecorations )
     {
         int w, h;
         wxTopLevelWindowNative::DoGetClientSize(&w, &h);
@@ -246,7 +265,7 @@ void wxTopLevelWindow::DoGetClientSize(int *width, int *height) const
 
 void wxTopLevelWindow::DoSetClientSize(int width, int height)
 {
-    if ( ms_drawDecorations )
+    if ( !m_usingNativeDecorations )
     {
         wxSize size = m_renderer->GetFrameTotalSize(wxSize(width, height),
                                                GetDecorationsStyle());
@@ -258,9 +277,11 @@ void wxTopLevelWindow::DoSetClientSize(int width, int height)
 
 void wxTopLevelWindow::OnNcPaint(wxNcPaintEvent& event)
 {
-    if ( !ms_drawDecorations || !m_renderer )
+    if ( m_usingNativeDecorations || !m_renderer )
+    {
         event.Skip();
-    else
+    }
+    else // we're drawing the decorations ourselves
     {
         // get the window rect
         wxRect rect(GetSize());
@@ -283,26 +304,15 @@ long wxTopLevelWindow::HitTest(const wxPoint& pt) const
     return m_renderer->HitTestFrame(rect, pt+GetClientAreaOrigin(), GetDecorationsStyle());
 }
 
-int wxTopLevelWindow::GetMinWidth() const
+wxSize wxTopLevelWindow::GetMinSize() const
 {
-    if ( ms_drawDecorations )
+    wxSize size = wxTopLevelWindowNative::GetMinSize();
+    if ( !m_usingNativeDecorations )
     {
-        return wxMax(wxTopLevelWindowNative::GetMinWidth(),
-                     m_renderer->GetFrameMinSize(GetDecorationsStyle()).x);
+        size.IncTo(m_renderer->GetFrameMinSize(GetDecorationsStyle()));
     }
-    else
-        return wxTopLevelWindowNative::GetMinWidth();
-}
 
-int wxTopLevelWindow::GetMinHeight() const
-{
-    if ( ms_drawDecorations )
-    {
-        return wxMax(wxTopLevelWindowNative::GetMinHeight(),
-                     m_renderer->GetFrameMinSize(GetDecorationsStyle()).y);
-    }
-    else
-        return wxTopLevelWindowNative::GetMinHeight();
+    return size;
 }
 
 // ----------------------------------------------------------------------------
@@ -313,18 +323,18 @@ void wxTopLevelWindow::SetIcons(const wxIconBundle& icons)
 {
     wxTopLevelWindowNative::SetIcons(icons);
 
-    if ( ms_drawDecorations && m_renderer )
+    if ( !m_usingNativeDecorations && m_renderer )
     {
         wxSize size = m_renderer->GetFrameIconSize();
         const wxIcon& icon = icons.GetIcon( size );
 
-        if ( !icon.Ok() || size.x == wxDefaultCoord  )
+        if ( !icon.IsOk() || size.x == wxDefaultCoord  )
             m_titlebarIcon = icon;
         else
         {
             wxBitmap bmp1;
             bmp1.CopyFromIcon(icon);
-            if ( !bmp1.Ok() )
+            if ( !bmp1.IsOk() )
                 m_titlebarIcon = wxNullIcon;
             else if ( bmp1.GetWidth() == size.x && bmp1.GetHeight() == size.y )
                 m_titlebarIcon = icon;