]> git.saurik.com Git - wxWidgets.git/commitdiff
Applied patch [ 598016 ] remove flicker during combo box creation
authorJulian Smart <julian@anthemion.co.uk>
Thu, 22 Aug 2002 09:41:05 +0000 (09:41 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Thu, 22 Aug 2002 09:41:05 +0000 (09:41 +0000)
By Benjamin I. Williams (biwillia76)

The attached patch completely fixes the flicker problem when
creating combo boxes.  It also will make it elementary to
remove flicker during the creation of other controls
(although all the other controls are flicker free, AFAIK).
It does this by adding an optional 'visible' parameter to
the internal MSWCreateControl method, whereby the caller can
create a control invisibly by default, perform some
complicated sizing calculations, and then finally show the
control before the Create finished.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16676 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

distrib/msw/generic.rsp
distrib/msw/zipdistinno.bat
include/wx/msw/control.h
src/msw/combobox.cpp
src/msw/control.cpp

index 1d0ecd155f2d86ae945db5585453583aa07065cc..7e61bcc925397f1329c88f75cb3e0ed68bd10e10 100644 (file)
@@ -32,6 +32,7 @@ distrib/gtk/*
 
 locale/*.po
 locale/*.mo
+locale/Makefile
 
 art/*.xpm
 art/motif/*.xpm
index 8e7fc0a2653510d6122b13364e913a2d4ba91bc4..e0b638342ac35c6636d91c0dadacc09bc91ff7f3 100755 (executable)
@@ -239,7 +239,11 @@ erase /Y distrib
 rem Now copy some binary files to 'bin'
 if not isdir bin mkdir bin
 copy %src\bin\dialoged.exe bin
+copy %src\bin\dialoged.hlp bin
+copy %src\bin\dialoged.chm bin
 copy %src\bin\tex2rtf.exe bin
+copy %src\bin\tex2rtf.hlp bin
+copy %src\bin\tex2rtf.cnt bin
 copy %src\bin\dbgview.* bin
 copy %src\bin\widgets.exe bin
 copy %src\bin\widgets.exe.manifest bin
index e5e7f5c918ca0f6a7509761136c24775f12ca816..3dde9eef15fc3ccd3f1f49484c317d5e142fb185 100644 (file)
@@ -92,12 +92,15 @@ protected:
 
     virtual wxSize DoGetBestSize() const;
 
+
     // create the control of the given Window class
     bool MSWCreateControl(const wxChar *classname,
                           const wxString& label,
                           const wxPoint& pos,
                           const wxSize& size,
-                          long style);
+                          long style,
+                          bool visible = true);
+
 
     // NB: the method below is deprecated now, with MSWGetStyle() the method
     //     above should be used instead! Once all the controls are updated to
@@ -117,7 +120,8 @@ protected:
                           const wxPoint& pos = wxDefaultPosition,
                           const wxSize& size = wxDefaultSize,
                           const wxString& label = wxEmptyString,
-                          WXDWORD exstyle = (WXDWORD)-1);
+                          WXDWORD exstyle = (WXDWORD)-1,
+                          bool visible = true);
 
     // default style for the control include WS_TABSTOP if it AcceptsFocus()
     virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const;
index ceb2d59b8e8b51cc9220a852490674cfc8d4b6f3..7b65a4701d6aa952fd1b199d01e869758e19f470 100644 (file)
@@ -326,7 +326,7 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
 
 
     // and now create the MSW control
-    if ( !MSWCreateControl(_T("COMBOBOX"), msStyle) )
+    if ( !MSWCreateControl(_T("COMBOBOX"), msStyle, pos, size, wxEmptyString, (WXDWORD)-1, false) )
         return FALSE;
 
     // A choice/combobox normally has a white background (or other, depending
@@ -360,6 +360,9 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
                                       );
     }
 
+    // finally, show the combo box
+    Show(true);
+
     return TRUE;
 }
 
index 930d7542ce8ff106fbfb3ad4a5afffed908ee7f7..1beeb2b8d266e7305f3b3d375b8e06c342280bc0 100644 (file)
@@ -79,12 +79,13 @@ bool wxControl::MSWCreateControl(const wxChar *classname,
                                  const wxString& label,
                                  const wxPoint& pos,
                                  const wxSize& size,
-                                 long style)
+                                 long style,
+                                 bool visible)
 {
     WXDWORD exstyle;
     WXDWORD msStyle = MSWGetStyle(style, &exstyle);
 
-    return MSWCreateControl(classname, msStyle, pos, size, label, exstyle);
+    return MSWCreateControl(classname, msStyle, pos, size, label, exstyle, visible);
 }
 
 bool wxControl::MSWCreateControl(const wxChar *classname,
@@ -92,7 +93,8 @@ bool wxControl::MSWCreateControl(const wxChar *classname,
                                  const wxPoint& pos,
                                  const wxSize& size,
                                  const wxString& label,
-                                 WXDWORD exstyle)
+                                 WXDWORD exstyle,
+                                 bool visible)
 {
     // want3D tells us whether or not the style specified a 3D border.
     // If so, under WIN16 we can use Ctl3D to give it an appropriate style.
@@ -108,7 +110,18 @@ bool wxControl::MSWCreateControl(const wxChar *classname,
 
     // all controls should have these styles (wxWindows creates all controls
     // visible by default)
-    style |= WS_CHILD | WS_VISIBLE;
+    style |= WS_CHILD;
+    
+    // sometimes, controls will defer showing the window until
+    // all configuration, sizing, and positioning is completed
+    if (!visible)
+    {
+        m_isShown = FALSE;
+    }
+     else
+    {
+        style |= WS_VISIBLE;
+    }
 
     int x = pos.x == -1 ? 0 : pos.x,
         y = pos.y == -1 ? 0 : pos.y,