]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/window.cpp
added pragmas to disable icc warning when va_arg is used with a pointer type
[wxWidgets.git] / src / motif / window.cpp
index aa4453bd4f567d2122854cff85efc06a9e87a4df..57aa52ecd546d686e22906619d820006578dfb85 100644 (file)
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "window.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 
 #include <string.h>
 
-// ----------------------------------------------------------------------------
-// constants
-// ----------------------------------------------------------------------------
-
-static const int SCROLL_MARGIN = 4;
-
 // ----------------------------------------------------------------------------
 // global variables for this module
 // ----------------------------------------------------------------------------
@@ -253,7 +243,7 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
     //// drawing area, since otherwise the translations are different.
 
     // New translations for getting mouse motion feedback
-    static const String translations =
+    static const String translations = wxMOTIF_STR(
 "<Btn1Motion>: wxCanvasMotionEvent() DrawingAreaInput() ManagerGadgetButtonMotion()\n\
 <Btn2Motion>: wxCanvasMotionEvent() DrawingAreaInput() ManagerGadgetButtonMotion()\n\
 <Btn3Motion>: wxCanvasMotionEvent() DrawingAreaInput() ManagerGadgetButtonMotion()\n\
@@ -267,10 +257,10 @@ bool wxWindow::Create(wxWindow *parent, wxWindowID id,
 <Motion>: wxCanvasMotionEvent() DrawingAreaInput()\n\
 <EnterWindow>: wxCanvasMotionEvent() DrawingAreaInput()\n\
 <LeaveWindow>: wxCanvasMotionEvent() DrawingAreaInput()\n\
-<Key>: DrawingAreaInput()";
+<Key>: DrawingAreaInput()");
 
     XtActionsRec actions[1];
-    actions[0].string = "wxCanvasMotionEvent";
+    actions[0].string = wxMOTIF_STR("wxCanvasMotionEvent");
     actions[0].proc = (XtActionProc) wxCanvasMotionEvent;
     XtAppAddActions ((XtAppContext) wxTheApp->GetAppContext(), actions, 1);
 
@@ -364,7 +354,7 @@ wxWindow::~wxWindow()
         g_captureWindow = NULL;
     
     m_isBeingDeleted = true;
-    
+
     // Motif-specific actions first
     WXWidget wMain = GetMainWidget();
     if ( wMain )
@@ -1372,13 +1362,6 @@ void wxWindow::DoSetClientSize(int width, int height)
         XtVaSetValues(widget, XmNheight, height, NULL);
 }
 
-// For implementation purposes - sometimes decorations make the client area
-// smaller
-wxPoint wxWindow::GetClientAreaOrigin() const
-{
-    return wxPoint(0, 0);
-}
-
 void wxWindow::DoMoveWindowIntr(int xx, int yy, int w, int h,
                                 int flags)
 {
@@ -1443,6 +1426,8 @@ void wxWindow::DoMoveWindowIntr(int xx, int yy, int w, int h,
     }
     else
     {
+        if( xx < 0 ) xx = 0;
+        if( yy < 0 ) yy = 0;
         if( w < 1 ) w = 1;
         if( h < 1 ) h = 1;
 
@@ -1469,29 +1454,24 @@ int wxWindow::GetCharHeight() const
 {
     wxCHECK_MSG( m_font.Ok(), 0, "valid window font needed" );
 
-    WXFontStructPtr pFontStruct = m_font.GetFontStruct(1.0, GetXDisplay());
-
-    int direction, ascent, descent;
-    XCharStruct overall;
-    XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent,
-        &descent, &overall);
+    int height;
+    
+    wxGetTextExtent (GetXDisplay(), m_font, 1.0,
+                     "x", NULL, &height, NULL, NULL);
 
-    //  return (overall.ascent + overall.descent);
-    return (ascent + descent);
+    return height;
 }
 
 int wxWindow::GetCharWidth() const
 {
     wxCHECK_MSG( m_font.Ok(), 0, "valid window font needed" );
 
-    WXFontStructPtr pFontStruct = m_font.GetFontStruct(1.0, GetXDisplay());
-
-    int direction, ascent, descent;
-    XCharStruct overall;
-    XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent,
-        &descent, &overall);
+    int width;
+    
+    wxGetTextExtent (GetXDisplay(), m_font, 1.0,
+                     "x", &width, NULL, NULL, NULL);
 
-    return overall.width;
+    return width;
 }
 
 void wxWindow::GetTextExtent(const wxString& string,
@@ -1499,36 +1479,14 @@ void wxWindow::GetTextExtent(const wxString& string,
                              int *descent, int *externalLeading,
                              const wxFont *theFont) const
 {
-    wxFont *fontToUse = (wxFont *)theFont;
-    if (!fontToUse)
-        fontToUse = (wxFont *) & m_font;
+    const wxFont *fontToUse = theFont ? theFont : &m_font;
 
     wxCHECK_RET( fontToUse->Ok(), "valid window font needed" );
-    
-    WXFontStructPtr pFontStruct = fontToUse->GetFontStruct(1.0, GetXDisplay());
-
-    int direction, ascent, descent2;
-    XCharStruct overall;
-    int slen = string.Len();
-
-#if 0
-    if (use16)
-        XTextExtents16((XFontStruct*) pFontStruct, (XChar2b *) (char*) (const char*) string, slen, &direction,
-        &ascent, &descent2, &overall);
-#endif
-
-    XTextExtents((XFontStruct*) pFontStruct, string, slen,
-                 &direction, &ascent, &descent2, &overall);
 
-    if ( x )
-        *x = (overall.width);
-    if ( y )
-        *y = (ascent + descent2);
-    if (descent)
-        *descent = descent2;
     if (externalLeading)
         *externalLeading = 0;
-
+    wxGetTextExtent (GetXDisplay(), *fontToUse, 1.0,
+                     string, x, y, NULL, descent);
 }
 
 // ----------------------------------------------------------------------------
@@ -1775,18 +1733,18 @@ bool wxWindow::ProcessAccelerator(wxKeyEvent& event)
 
 bool wxAddWindowToTable(Widget w, wxWindow *win)
 {
-    wxWindow *oldItem = NULL;
-    if ((oldItem = (wxWindow *)wxWidgetHashTable->Get ((long) w)))
+    const long key = (long)w;
+    if ( wxWidgetHashTable->Get(key))
     {
         wxLogDebug("Widget table clash: new widget is %ld, %s",
-                   (long)w, win->GetClassInfo()->GetClassName());
+                   key, win->GetClassInfo()->GetClassName());
         return false;
     }
 
-    wxWidgetHashTable->Put((long) w, win);
+    wxWidgetHashTable->Put(key, win);
 
     wxLogTrace("widget", "Widget 0x%p <-> window %p (%s)",
-               (WXWidget)w, win, win->GetClassInfo()->GetClassName());
+               w, win, win->GetClassInfo()->GetClassName());
 
     return true;
 }
@@ -1843,9 +1801,9 @@ bool wxWindow::AttachWidget (wxWindow* WXUNUSED(parent), WXWidget mainWidget,
         x = 0;
     if (y == -1)
         y = 0;
-    SetSize (x, y, width, height);
+    DoSetSize (x, y, width, height, wxSIZE_USE_EXISTING);
 
-    return TRUE;
+    return true;
 }
 
 // Remove event handler, remove from hash table
@@ -2126,7 +2084,7 @@ static void wxScrollBarCallback(Widget scrollbar,
                                 XmScrollBarCallbackStruct *cbs)
 {
     wxWindow *win = wxGetWindowFromTable(scrollbar);
-    wxOrientation orientation = (wxOrientation)(int)clientData;
+    wxOrientation orientation = (wxOrientation)wxPtrToUInt(clientData);
 
     wxEventType eventType = wxEVT_NULL;
     switch (cbs->reason)
@@ -2189,24 +2147,18 @@ static void wxScrollBarCallback(Widget scrollbar,
 // For repainting arbitrary windows
 void wxUniversalRepaintProc(Widget w, XtPointer WXUNUSED(c_data), XEvent *event, char *)
 {
-    Window window;
-    Display *display;
-
     wxWindow* win = wxGetWindowFromTable(w);
     if (!win)
         return;
 
-    switch(event -> type)
+    switch ( event->type )
     {
-    case Expose:
+        case Expose:
         {
-            window = (Window) win -> GetXWindow();
-            display = (Display *) win -> GetXDisplay();
-
             win->AddUpdateRect(event->xexpose.x, event->xexpose.y,
                                event->xexpose.width, event->xexpose.height);
 
-            if (event -> xexpose.count == 0)
+            if ( event->xexpose.count == 0 )
             {
                 win->DoPaint();
             }
@@ -2493,6 +2445,8 @@ void wxWindow::ChangeBackgroundColour()
     WXWidget mainWidget = GetMainWidget();
     if ( mainWidget )
         wxDoChangeBackgroundColour(mainWidget, m_backgroundColour);
+    if ( m_scrolledWindow && mainWidget != m_scrolledWindow )
+        wxDoChangeForegroundColour(m_scrolledWindow, m_backgroundColour);
 }
 
 void wxWindow::ChangeForegroundColour()
@@ -2567,7 +2521,8 @@ wxWindow *wxWindowBase::GetCapture()
 // position.
 wxWindow* wxFindWindowAtPointer(wxPoint& pt)
 {
-    return wxFindWindowAtPoint(wxGetMousePosition());
+    pt = wxGetMousePosition();
+    return wxFindWindowAtPoint(pt);
 }
 
 // Get the current mouse position.