Added scrolling of widgets and sample

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2343 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
1999-05-05 10:25:38 +00:00
parent aeab10d07c
commit fdd3ed7a8f
22 changed files with 579 additions and 224 deletions

View File

@@ -110,7 +110,7 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
if (newSize.x == -1)
newSize.x = 100;
if (newSize.y == -1)
newSize.y = 22;
newSize.y = 26;
SetSize( newSize.x, newSize.y );
GtkWidget *list = GTK_COMBO(m_widget)->list;
@@ -583,6 +583,8 @@ void wxComboBox::OnChar( wxKeyEvent &event )
void wxComboBox::OnSize( wxSizeEvent &event )
{
wxControl::OnSize( event );
return;
int w = 21;
gtk_widget_set_usize( GTK_COMBO(m_widget)->entry, m_width-w-1, m_height );

View File

@@ -267,7 +267,9 @@ static void wxInsertChildInFrame( wxWindow* parent, wxWindow* child )
gtk_myfixed_put( GTK_MYFIXED(frame->m_mainWidget),
GTK_WIDGET(child->m_widget),
child->m_x,
child->m_y );
child->m_y,
child->m_width,
child->m_height );
/* we connect to these events for recalculating the client area
space when the toolbar is floating */
@@ -290,13 +292,11 @@ static void wxInsertChildInFrame( wxWindow* parent, wxWindow* child )
gtk_myfixed_put( GTK_MYFIXED(parent->m_wxwindow),
GTK_WIDGET(child->m_widget),
child->m_x,
child->m_y );
child->m_y,
child->m_width,
child->m_height );
}
gtk_widget_set_usize( GTK_WIDGET(child->m_widget),
child->m_width,
child->m_height );
/* resize on OnInternalIdle */
parent->m_sizeSet = FALSE;
}
@@ -665,13 +665,9 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
m_frameMenuBar->m_y = yy;
m_frameMenuBar->m_width = ww;
m_frameMenuBar->m_height = hh;
gtk_myfixed_move( GTK_MYFIXED(m_mainWidget), m_frameMenuBar->m_widget, xx, yy );
// m_frameMenuBar->m_widget->requisition.width = ww;
// m_frameMenuBar->m_widget->requisition.height = hh;
gtk_widget_set_usize( m_frameMenuBar->m_widget, ww, hh );
gtk_myfixed_set_size( GTK_MYFIXED(m_mainWidget),
m_frameMenuBar->m_widget,
xx, yy, ww, hh );
client_area_y_offset += hh;
}
@@ -693,21 +689,19 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
m_frameToolBar->m_y = yy;
/* m_frameToolBar->m_height = hh; don't change the toolbar's height */
m_frameToolBar->m_width = ww;
gtk_myfixed_move( GTK_MYFIXED(m_mainWidget), m_frameToolBar->m_widget, xx, yy );
gtk_widget_set_usize( m_frameToolBar->m_widget, ww, hh );
gtk_myfixed_set_size( GTK_MYFIXED(m_mainWidget),
m_frameToolBar->m_widget,
xx, yy, ww, hh );
client_area_y_offset += hh;
}
int client_x = m_miniEdge;
int client_y = client_area_y_offset + m_miniEdge + m_miniTitle;
gtk_myfixed_move( GTK_MYFIXED(m_mainWidget), m_wxwindow, client_x, client_y );
int client_w = m_width - 2*m_miniEdge;
int client_h = m_height - client_area_y_offset- 2*m_miniEdge - m_miniTitle;
gtk_widget_set_usize( m_wxwindow, client_w, client_h );
gtk_myfixed_set_size( GTK_MYFIXED(m_mainWidget),
m_wxwindow,
client_x, client_y, client_w, client_h );
}
else
{
@@ -721,17 +715,13 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
int yy = m_height - wxSTATUS_HEIGHT - m_miniEdge - client_area_y_offset;
int ww = m_width - 2*m_miniEdge;
int hh = wxSTATUS_HEIGHT;
m_frameStatusBar->m_x = xx;
m_frameStatusBar->m_y = yy;
m_frameStatusBar->m_width = ww;
m_frameStatusBar->m_height = hh;
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameStatusBar->m_widget, xx, yy );
// m_frameStatusBar->m_widget->requisition.width = ww;
// m_frameStatusBar->m_widget->requisition.height = hh;
gtk_widget_set_usize( m_frameStatusBar->m_widget, ww, hh );
gtk_myfixed_set_size( GTK_MYFIXED(m_wxwindow),
m_frameStatusBar->m_widget,
xx, yy, ww, hh );
}
/* we actually set the size of a frame here and no-where else */
@@ -851,7 +841,11 @@ void wxFrame::SetMenuBar( wxMenuBar *menuBar )
{
m_frameMenuBar->m_parent = this;
gtk_myfixed_put( GTK_MYFIXED(m_mainWidget),
m_frameMenuBar->m_widget, m_frameMenuBar->m_x, m_frameMenuBar->m_y );
m_frameMenuBar->m_widget,
m_frameMenuBar->m_x,
m_frameMenuBar->m_y,
m_frameMenuBar->m_width,
m_frameMenuBar->m_height );
if (menuBar->m_windowStyle & wxMB_DOCKABLE)
{

View File

@@ -96,8 +96,9 @@ void wxMDIParentFrame::GtkOnSize( int x, int y, int width, int height )
menu_bar->m_y = 0;
menu_bar->m_width = m_width;
menu_bar->m_height = wxMENU_HEIGHT;
gtk_myfixed_move( GTK_MYFIXED(m_mainWidget), menu_bar->m_widget, 0, 0 );
gtk_widget_set_usize( menu_bar->m_widget, m_width, wxMENU_HEIGHT );
gtk_myfixed_set_size( GTK_MYFIXED(m_mainWidget),
menu_bar->m_widget,
0, 0, m_width, wxMENU_HEIGHT );
}
void wxMDIParentFrame::OnInternalIdle()
@@ -297,8 +298,9 @@ void wxMDIChildFrame::SetMenuBar( wxMenuBar *menu_bar )
gtk_widget_hide( m_menuBar->m_widget );
/* insert the invisible menu bar into the _parent_ mdi frame */
gtk_myfixed_put( GTK_MYFIXED(mdi_frame->m_mainWidget), m_menuBar->m_widget, 0, 0 );
gtk_widget_set_usize( menu_bar->m_widget, mdi_frame->m_width, wxMENU_HEIGHT );
gtk_myfixed_put( GTK_MYFIXED(mdi_frame->m_mainWidget),
m_menuBar->m_widget,
0, 0, mdi_frame->m_width, wxMENU_HEIGHT );
}
}

View File

@@ -289,8 +289,9 @@ bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title
{
GtkWidget *close_button = gtk_button_new_with_label( "x" );
gtk_myfixed_put( GTK_MYFIXED(m_mainWidget), close_button, 4, 4 );
gtk_widget_set_usize( close_button, 12, 11 );
gtk_myfixed_put( GTK_MYFIXED(m_mainWidget),
close_button,
4, 4, 12, 11 );
gtk_widget_show( close_button );

View File

@@ -108,8 +108,9 @@ bool wxRadioBox::Create( wxWindow *parent, wxWindowID id, const wxString& title,
gtk_signal_connect( GTK_OBJECT(m_radio), "clicked",
GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
gtk_myfixed_put( GTK_MYFIXED(m_parent->m_wxwindow), GTK_WIDGET(m_radio), m_x+10, m_y+10+(i*24) );
gtk_myfixed_put( GTK_MYFIXED(m_parent->m_wxwindow),
GTK_WIDGET(m_radio),
m_x+10, m_y+10+(i*24), 10, 10 );
}
wxSize ls = LayoutItems();
@@ -194,7 +195,7 @@ wxSize wxRadioBox::LayoutItems()
{
GtkWidget *button = GTK_WIDGET( node->Data() );
gtk_widget_set_usize( button, max_len, 20 );
gtk_myfixed_resize( GTK_MYFIXED(m_parent->m_wxwindow), button, max_len, 20 );
node = node->Next();
if (!node) break;
@@ -230,9 +231,8 @@ wxSize wxRadioBox::LayoutItems()
{
GtkWidget *button = GTK_WIDGET( node->Data() );
gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), button, m_x+x, m_y+y );
gtk_myfixed_set_size( GTK_MYFIXED(m_parent->m_wxwindow), button, m_x+x, m_y+y, max, 20 );
x += max;
gtk_widget_set_usize( button, max, 20 );
node = node->Next();
}

View File

@@ -202,9 +202,11 @@ gtk_myfixed_set_shadow_type (GtkMyFixed *myfixed,
void
gtk_myfixed_put (GtkMyFixed *myfixed,
GtkWidget *widget,
gint16 x,
gint16 y)
GtkWidget *widget,
gint16 x,
gint16 y,
gint16 width,
gint16 height)
{
GtkMyFixedChild *child_info;
@@ -216,6 +218,8 @@ gtk_myfixed_put (GtkMyFixed *myfixed,
child_info->widget = widget;
child_info->x = x;
child_info->y = y;
child_info->width = width;
child_info->height = height;
gtk_widget_set_parent (widget, GTK_WIDGET (myfixed));
@@ -232,10 +236,10 @@ gtk_myfixed_put (GtkMyFixed *myfixed,
}
void
gtk_myfixed_move (GtkMyFixed *myfixed,
GtkWidget *widget,
gint16 x,
gint16 y)
gtk_myfixed_move (GtkMyFixed *myfixed,
GtkWidget *widget,
gint16 x,
gint16 y)
{
GtkMyFixedChild *child;
GList *children;
@@ -244,6 +248,63 @@ gtk_myfixed_move (GtkMyFixed *myfixed,
g_return_if_fail (GTK_IS_MYFIXED (myfixed));
g_return_if_fail (widget != NULL);
children = myfixed->children;
while (children)
{
child = children->data;
children = children->next;
if (child->widget == widget)
{
gtk_myfixed_set_size( myfixed, widget, x, y, child->width, child->height );
break;
}
}
}
void
gtk_myfixed_resize (GtkMyFixed *myfixed,
GtkWidget *widget,
gint16 width,
gint16 height)
{
GtkMyFixedChild *child;
GList *children;
g_return_if_fail (myfixed != NULL);
g_return_if_fail (GTK_IS_MYFIXED (myfixed));
g_return_if_fail (widget != NULL);
children = myfixed->children;
while (children)
{
child = children->data;
children = children->next;
if (child->widget == widget)
{
gtk_myfixed_set_size( myfixed, widget, child->x, child->y, width, height );
break;
}
}
}
void
gtk_myfixed_set_size (GtkMyFixed *myfixed,
GtkWidget *widget,
gint16 x,
gint16 y,
gint16 width,
gint16 height)
{
GtkMyFixedChild *child;
GList *children;
GtkAllocation child_allocation;
g_return_if_fail (myfixed != NULL);
g_return_if_fail (GTK_IS_MYFIXED (myfixed));
g_return_if_fail (widget != NULL);
children = myfixed->children;
while (children)
{
@@ -252,13 +313,31 @@ gtk_myfixed_move (GtkMyFixed *myfixed,
if (child->widget == widget)
{
if ((child->x == x) && (child->y == y)) return;
if ((child->x == x) &&
(child->y == y) &&
(child->width == width) &&
(child->height == height)) return;
child->x = x;
child->y = y;
child->width = width;
child->height = height;
if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (myfixed))
gtk_widget_queue_resize (GTK_WIDGET (myfixed));
{
if ((child->width > 1) && (child->height > 1) && (GTK_WIDGET_REALIZED(widget)))
{
child_allocation.x = child->x;
child_allocation.y = child->y;
child_allocation.width = child->width;
child_allocation.height = child->height;
gtk_widget_size_allocate (widget, &child_allocation);
}
else
{
gtk_widget_queue_resize (GTK_WIDGET (myfixed));
}
}
break;
}
@@ -385,10 +464,6 @@ gtk_myfixed_size_request (GtkWidget *widget,
myfixed = GTK_MYFIXED (widget);
/*
requisition->width = 0;
requisition->height = 0;
*/
requisition->width = widget->requisition.width;
requisition->height = widget->requisition.height;
@@ -407,7 +482,7 @@ gtk_myfixed_size_request (GtkWidget *widget,
static void
gtk_myfixed_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
GtkAllocation *allocation)
{
GtkMyFixed *myfixed;
gint border;
@@ -457,8 +532,8 @@ gtk_myfixed_size_allocate (GtkWidget *widget,
{
child_allocation.x = child->x;
child_allocation.y = child->y;
child_allocation.width = child->widget->requisition.width;
child_allocation.height = child->widget->requisition.height;
child_allocation.width = child->width;
child_allocation.height = child->height;
gtk_widget_size_allocate (child->widget, &child_allocation);
}
}
@@ -466,7 +541,7 @@ gtk_myfixed_size_allocate (GtkWidget *widget,
static void
gtk_myfixed_paint (GtkWidget *widget,
GdkRectangle *area)
GdkRectangle *area)
{
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_MYFIXED (widget));
@@ -480,7 +555,7 @@ gtk_myfixed_paint (GtkWidget *widget,
static void
gtk_myfixed_draw (GtkWidget *widget,
GdkRectangle *area)
GdkRectangle *area)
{
GtkMyFixed *myfixed;
GtkMyFixedChild *child;
@@ -509,7 +584,7 @@ gtk_myfixed_draw (GtkWidget *widget,
static gint
gtk_myfixed_expose (GtkWidget *widget,
GdkEventExpose *event)
GdkEventExpose *event)
{
GtkMyFixed *myfixed;
GtkMyFixedChild *child;
@@ -550,7 +625,7 @@ gtk_myfixed_add (GtkContainer *container,
g_return_if_fail (GTK_IS_MYFIXED (container));
g_return_if_fail (widget != NULL);
gtk_myfixed_put (GTK_MYFIXED (container), widget, 0, 0);
gtk_myfixed_put (GTK_MYFIXED (container), widget, 0, 0, 20, 20 );
}
static void

View File

@@ -1444,11 +1444,9 @@ static void wxInsertChildInWindow( wxWindow* parent, wxWindow* child )
gtk_myfixed_put( GTK_MYFIXED(parent->m_wxwindow),
GTK_WIDGET(child->m_widget),
child->m_x,
child->m_y );
gtk_widget_set_usize( child->m_widget,
child->m_width,
child->m_height );
child->m_y,
child->m_width,
child->m_height );
if (parent->m_windowStyle & wxTAB_TRAVERSAL)
{
@@ -2037,55 +2035,42 @@ void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags )
if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_maxWidth;
if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_maxHeight;
int border = 0;
if (GTK_WIDGET_HAS_DEFAULT(m_widget))
{
/* the default button has a border around it */
int border = 5;
gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), m_widget, m_x-border, m_y-border );
gtk_widget_set_usize( m_widget, m_width+2*border, m_height+2*border );
border = 5;
}
else
{
gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), m_widget, m_x, m_y );
if ((old_width != m_width) || (old_height != m_height))
{
gtk_widget_set_usize( m_widget, m_width, m_height );
/* this is the result of hours of debugging: the following code
means that if we have a m_wxwindow and we set the size of
m_widget, m_widget (which is a GtkScrolledWindow) does NOT
automatically propagate its size down to its m_wxwindow,
which is its client area. therefore, we have to tell the
client area directly that it has to resize itself.
this will lead to that m_widget (GtkScrolledWindow) will
calculate how much size it needs for scrollbars etc and
it will then call XXX_size_allocate of its child, which
is m_wxwindow. m_wxwindow in turn will do the same with its
children and so on. problems can arise if this happens
before all the children have been realized as some widgets
stupidy need to be realized during XXX_size_allocate (e.g.
GtkNotebook) and they will segv if called otherwise. this
emergency is tested in gtk_myfixed_size_allocate. Normally
this shouldn't be needed and only gtk_widget_queue_resize()
should be enough to provoke a resize at the next appropriate
moment, but this seems to fail, e.g. when a wxNotebook contains
a wxSplitterWindow: the splitter window's children won't
show up properly resized then. */
gtk_myfixed_set_size( GTK_MYFIXED(m_parent->m_wxwindow),
m_widget,
m_x-border,
m_y-border,
m_width+2*border,
m_height+2*border );
/* this is the result of hours of debugging: the following code
means that if we have a m_wxwindow and we set the size of
m_widget, m_widget (which is a GtkScrolledWindow) does NOT
automatically propagate its size down to its m_wxwindow,
which is its client area. therefore, we have to tell the
client area directly that it has to resize itself.
this will lead to that m_widget (GtkScrolledWindow) will
calculate how much size it needs for scrollbars etc and
it will then call XXX_size_allocate of its child, which
is m_wxwindow. m_wxwindow in turn will do the same with its
children and so on. problems can arise if this happens
before all the children have been realized as some widgets
stupidy need to be realized during XXX_size_allocate (e.g.
GtkNotebook) and they will segv if called otherwise. this
emergency is tested in gtk_myfixed_size_allocate. Normally
this shouldn't be needed and only gtk_widget_queue_resize()
should be enough to provoke a resize at the next appropriate
moment, but this seems to fail, e.g. when a wxNotebook contains
a wxSplitterWindow: the splitter window's children won't
show up properly resized then. */
if (m_wxwindow)
{
GtkAllocation alloc;
alloc.x = m_x;
alloc.y = m_y;
alloc.width = m_width;
alloc.height = m_height;
gtk_widget_size_allocate( m_widget, &alloc );
}
}
}
}
m_sizeSet = TRUE;

View File

@@ -110,7 +110,7 @@ bool wxComboBox::Create( wxWindow *parent, wxWindowID id, const wxString& value,
if (newSize.x == -1)
newSize.x = 100;
if (newSize.y == -1)
newSize.y = 22;
newSize.y = 26;
SetSize( newSize.x, newSize.y );
GtkWidget *list = GTK_COMBO(m_widget)->list;
@@ -583,6 +583,8 @@ void wxComboBox::OnChar( wxKeyEvent &event )
void wxComboBox::OnSize( wxSizeEvent &event )
{
wxControl::OnSize( event );
return;
int w = 21;
gtk_widget_set_usize( GTK_COMBO(m_widget)->entry, m_width-w-1, m_height );

View File

@@ -267,7 +267,9 @@ static void wxInsertChildInFrame( wxWindow* parent, wxWindow* child )
gtk_myfixed_put( GTK_MYFIXED(frame->m_mainWidget),
GTK_WIDGET(child->m_widget),
child->m_x,
child->m_y );
child->m_y,
child->m_width,
child->m_height );
/* we connect to these events for recalculating the client area
space when the toolbar is floating */
@@ -290,13 +292,11 @@ static void wxInsertChildInFrame( wxWindow* parent, wxWindow* child )
gtk_myfixed_put( GTK_MYFIXED(parent->m_wxwindow),
GTK_WIDGET(child->m_widget),
child->m_x,
child->m_y );
child->m_y,
child->m_width,
child->m_height );
}
gtk_widget_set_usize( GTK_WIDGET(child->m_widget),
child->m_width,
child->m_height );
/* resize on OnInternalIdle */
parent->m_sizeSet = FALSE;
}
@@ -665,13 +665,9 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
m_frameMenuBar->m_y = yy;
m_frameMenuBar->m_width = ww;
m_frameMenuBar->m_height = hh;
gtk_myfixed_move( GTK_MYFIXED(m_mainWidget), m_frameMenuBar->m_widget, xx, yy );
// m_frameMenuBar->m_widget->requisition.width = ww;
// m_frameMenuBar->m_widget->requisition.height = hh;
gtk_widget_set_usize( m_frameMenuBar->m_widget, ww, hh );
gtk_myfixed_set_size( GTK_MYFIXED(m_mainWidget),
m_frameMenuBar->m_widget,
xx, yy, ww, hh );
client_area_y_offset += hh;
}
@@ -693,21 +689,19 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
m_frameToolBar->m_y = yy;
/* m_frameToolBar->m_height = hh; don't change the toolbar's height */
m_frameToolBar->m_width = ww;
gtk_myfixed_move( GTK_MYFIXED(m_mainWidget), m_frameToolBar->m_widget, xx, yy );
gtk_widget_set_usize( m_frameToolBar->m_widget, ww, hh );
gtk_myfixed_set_size( GTK_MYFIXED(m_mainWidget),
m_frameToolBar->m_widget,
xx, yy, ww, hh );
client_area_y_offset += hh;
}
int client_x = m_miniEdge;
int client_y = client_area_y_offset + m_miniEdge + m_miniTitle;
gtk_myfixed_move( GTK_MYFIXED(m_mainWidget), m_wxwindow, client_x, client_y );
int client_w = m_width - 2*m_miniEdge;
int client_h = m_height - client_area_y_offset- 2*m_miniEdge - m_miniTitle;
gtk_widget_set_usize( m_wxwindow, client_w, client_h );
gtk_myfixed_set_size( GTK_MYFIXED(m_mainWidget),
m_wxwindow,
client_x, client_y, client_w, client_h );
}
else
{
@@ -721,17 +715,13 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height
int yy = m_height - wxSTATUS_HEIGHT - m_miniEdge - client_area_y_offset;
int ww = m_width - 2*m_miniEdge;
int hh = wxSTATUS_HEIGHT;
m_frameStatusBar->m_x = xx;
m_frameStatusBar->m_y = yy;
m_frameStatusBar->m_width = ww;
m_frameStatusBar->m_height = hh;
gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameStatusBar->m_widget, xx, yy );
// m_frameStatusBar->m_widget->requisition.width = ww;
// m_frameStatusBar->m_widget->requisition.height = hh;
gtk_widget_set_usize( m_frameStatusBar->m_widget, ww, hh );
gtk_myfixed_set_size( GTK_MYFIXED(m_wxwindow),
m_frameStatusBar->m_widget,
xx, yy, ww, hh );
}
/* we actually set the size of a frame here and no-where else */
@@ -851,7 +841,11 @@ void wxFrame::SetMenuBar( wxMenuBar *menuBar )
{
m_frameMenuBar->m_parent = this;
gtk_myfixed_put( GTK_MYFIXED(m_mainWidget),
m_frameMenuBar->m_widget, m_frameMenuBar->m_x, m_frameMenuBar->m_y );
m_frameMenuBar->m_widget,
m_frameMenuBar->m_x,
m_frameMenuBar->m_y,
m_frameMenuBar->m_width,
m_frameMenuBar->m_height );
if (menuBar->m_windowStyle & wxMB_DOCKABLE)
{

View File

@@ -96,8 +96,9 @@ void wxMDIParentFrame::GtkOnSize( int x, int y, int width, int height )
menu_bar->m_y = 0;
menu_bar->m_width = m_width;
menu_bar->m_height = wxMENU_HEIGHT;
gtk_myfixed_move( GTK_MYFIXED(m_mainWidget), menu_bar->m_widget, 0, 0 );
gtk_widget_set_usize( menu_bar->m_widget, m_width, wxMENU_HEIGHT );
gtk_myfixed_set_size( GTK_MYFIXED(m_mainWidget),
menu_bar->m_widget,
0, 0, m_width, wxMENU_HEIGHT );
}
void wxMDIParentFrame::OnInternalIdle()
@@ -297,8 +298,9 @@ void wxMDIChildFrame::SetMenuBar( wxMenuBar *menu_bar )
gtk_widget_hide( m_menuBar->m_widget );
/* insert the invisible menu bar into the _parent_ mdi frame */
gtk_myfixed_put( GTK_MYFIXED(mdi_frame->m_mainWidget), m_menuBar->m_widget, 0, 0 );
gtk_widget_set_usize( menu_bar->m_widget, mdi_frame->m_width, wxMENU_HEIGHT );
gtk_myfixed_put( GTK_MYFIXED(mdi_frame->m_mainWidget),
m_menuBar->m_widget,
0, 0, mdi_frame->m_width, wxMENU_HEIGHT );
}
}

View File

@@ -289,8 +289,9 @@ bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title
{
GtkWidget *close_button = gtk_button_new_with_label( "x" );
gtk_myfixed_put( GTK_MYFIXED(m_mainWidget), close_button, 4, 4 );
gtk_widget_set_usize( close_button, 12, 11 );
gtk_myfixed_put( GTK_MYFIXED(m_mainWidget),
close_button,
4, 4, 12, 11 );
gtk_widget_show( close_button );

View File

@@ -108,8 +108,9 @@ bool wxRadioBox::Create( wxWindow *parent, wxWindowID id, const wxString& title,
gtk_signal_connect( GTK_OBJECT(m_radio), "clicked",
GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
gtk_myfixed_put( GTK_MYFIXED(m_parent->m_wxwindow), GTK_WIDGET(m_radio), m_x+10, m_y+10+(i*24) );
gtk_myfixed_put( GTK_MYFIXED(m_parent->m_wxwindow),
GTK_WIDGET(m_radio),
m_x+10, m_y+10+(i*24), 10, 10 );
}
wxSize ls = LayoutItems();
@@ -194,7 +195,7 @@ wxSize wxRadioBox::LayoutItems()
{
GtkWidget *button = GTK_WIDGET( node->Data() );
gtk_widget_set_usize( button, max_len, 20 );
gtk_myfixed_resize( GTK_MYFIXED(m_parent->m_wxwindow), button, max_len, 20 );
node = node->Next();
if (!node) break;
@@ -230,9 +231,8 @@ wxSize wxRadioBox::LayoutItems()
{
GtkWidget *button = GTK_WIDGET( node->Data() );
gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), button, m_x+x, m_y+y );
gtk_myfixed_set_size( GTK_MYFIXED(m_parent->m_wxwindow), button, m_x+x, m_y+y, max, 20 );
x += max;
gtk_widget_set_usize( button, max, 20 );
node = node->Next();
}

View File

@@ -202,9 +202,11 @@ gtk_myfixed_set_shadow_type (GtkMyFixed *myfixed,
void
gtk_myfixed_put (GtkMyFixed *myfixed,
GtkWidget *widget,
gint16 x,
gint16 y)
GtkWidget *widget,
gint16 x,
gint16 y,
gint16 width,
gint16 height)
{
GtkMyFixedChild *child_info;
@@ -216,6 +218,8 @@ gtk_myfixed_put (GtkMyFixed *myfixed,
child_info->widget = widget;
child_info->x = x;
child_info->y = y;
child_info->width = width;
child_info->height = height;
gtk_widget_set_parent (widget, GTK_WIDGET (myfixed));
@@ -232,10 +236,10 @@ gtk_myfixed_put (GtkMyFixed *myfixed,
}
void
gtk_myfixed_move (GtkMyFixed *myfixed,
GtkWidget *widget,
gint16 x,
gint16 y)
gtk_myfixed_move (GtkMyFixed *myfixed,
GtkWidget *widget,
gint16 x,
gint16 y)
{
GtkMyFixedChild *child;
GList *children;
@@ -244,6 +248,63 @@ gtk_myfixed_move (GtkMyFixed *myfixed,
g_return_if_fail (GTK_IS_MYFIXED (myfixed));
g_return_if_fail (widget != NULL);
children = myfixed->children;
while (children)
{
child = children->data;
children = children->next;
if (child->widget == widget)
{
gtk_myfixed_set_size( myfixed, widget, x, y, child->width, child->height );
break;
}
}
}
void
gtk_myfixed_resize (GtkMyFixed *myfixed,
GtkWidget *widget,
gint16 width,
gint16 height)
{
GtkMyFixedChild *child;
GList *children;
g_return_if_fail (myfixed != NULL);
g_return_if_fail (GTK_IS_MYFIXED (myfixed));
g_return_if_fail (widget != NULL);
children = myfixed->children;
while (children)
{
child = children->data;
children = children->next;
if (child->widget == widget)
{
gtk_myfixed_set_size( myfixed, widget, child->x, child->y, width, height );
break;
}
}
}
void
gtk_myfixed_set_size (GtkMyFixed *myfixed,
GtkWidget *widget,
gint16 x,
gint16 y,
gint16 width,
gint16 height)
{
GtkMyFixedChild *child;
GList *children;
GtkAllocation child_allocation;
g_return_if_fail (myfixed != NULL);
g_return_if_fail (GTK_IS_MYFIXED (myfixed));
g_return_if_fail (widget != NULL);
children = myfixed->children;
while (children)
{
@@ -252,13 +313,31 @@ gtk_myfixed_move (GtkMyFixed *myfixed,
if (child->widget == widget)
{
if ((child->x == x) && (child->y == y)) return;
if ((child->x == x) &&
(child->y == y) &&
(child->width == width) &&
(child->height == height)) return;
child->x = x;
child->y = y;
child->width = width;
child->height = height;
if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (myfixed))
gtk_widget_queue_resize (GTK_WIDGET (myfixed));
{
if ((child->width > 1) && (child->height > 1) && (GTK_WIDGET_REALIZED(widget)))
{
child_allocation.x = child->x;
child_allocation.y = child->y;
child_allocation.width = child->width;
child_allocation.height = child->height;
gtk_widget_size_allocate (widget, &child_allocation);
}
else
{
gtk_widget_queue_resize (GTK_WIDGET (myfixed));
}
}
break;
}
@@ -385,10 +464,6 @@ gtk_myfixed_size_request (GtkWidget *widget,
myfixed = GTK_MYFIXED (widget);
/*
requisition->width = 0;
requisition->height = 0;
*/
requisition->width = widget->requisition.width;
requisition->height = widget->requisition.height;
@@ -407,7 +482,7 @@ gtk_myfixed_size_request (GtkWidget *widget,
static void
gtk_myfixed_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
GtkAllocation *allocation)
{
GtkMyFixed *myfixed;
gint border;
@@ -457,8 +532,8 @@ gtk_myfixed_size_allocate (GtkWidget *widget,
{
child_allocation.x = child->x;
child_allocation.y = child->y;
child_allocation.width = child->widget->requisition.width;
child_allocation.height = child->widget->requisition.height;
child_allocation.width = child->width;
child_allocation.height = child->height;
gtk_widget_size_allocate (child->widget, &child_allocation);
}
}
@@ -466,7 +541,7 @@ gtk_myfixed_size_allocate (GtkWidget *widget,
static void
gtk_myfixed_paint (GtkWidget *widget,
GdkRectangle *area)
GdkRectangle *area)
{
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_MYFIXED (widget));
@@ -480,7 +555,7 @@ gtk_myfixed_paint (GtkWidget *widget,
static void
gtk_myfixed_draw (GtkWidget *widget,
GdkRectangle *area)
GdkRectangle *area)
{
GtkMyFixed *myfixed;
GtkMyFixedChild *child;
@@ -509,7 +584,7 @@ gtk_myfixed_draw (GtkWidget *widget,
static gint
gtk_myfixed_expose (GtkWidget *widget,
GdkEventExpose *event)
GdkEventExpose *event)
{
GtkMyFixed *myfixed;
GtkMyFixedChild *child;
@@ -550,7 +625,7 @@ gtk_myfixed_add (GtkContainer *container,
g_return_if_fail (GTK_IS_MYFIXED (container));
g_return_if_fail (widget != NULL);
gtk_myfixed_put (GTK_MYFIXED (container), widget, 0, 0);
gtk_myfixed_put (GTK_MYFIXED (container), widget, 0, 0, 20, 20 );
}
static void

View File

@@ -1444,11 +1444,9 @@ static void wxInsertChildInWindow( wxWindow* parent, wxWindow* child )
gtk_myfixed_put( GTK_MYFIXED(parent->m_wxwindow),
GTK_WIDGET(child->m_widget),
child->m_x,
child->m_y );
gtk_widget_set_usize( child->m_widget,
child->m_width,
child->m_height );
child->m_y,
child->m_width,
child->m_height );
if (parent->m_windowStyle & wxTAB_TRAVERSAL)
{
@@ -2037,55 +2035,42 @@ void wxWindow::DoSetSize( int x, int y, int width, int height, int sizeFlags )
if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_maxWidth;
if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_maxHeight;
int border = 0;
if (GTK_WIDGET_HAS_DEFAULT(m_widget))
{
/* the default button has a border around it */
int border = 5;
gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), m_widget, m_x-border, m_y-border );
gtk_widget_set_usize( m_widget, m_width+2*border, m_height+2*border );
border = 5;
}
else
{
gtk_myfixed_move( GTK_MYFIXED(m_parent->m_wxwindow), m_widget, m_x, m_y );
if ((old_width != m_width) || (old_height != m_height))
{
gtk_widget_set_usize( m_widget, m_width, m_height );
/* this is the result of hours of debugging: the following code
means that if we have a m_wxwindow and we set the size of
m_widget, m_widget (which is a GtkScrolledWindow) does NOT
automatically propagate its size down to its m_wxwindow,
which is its client area. therefore, we have to tell the
client area directly that it has to resize itself.
this will lead to that m_widget (GtkScrolledWindow) will
calculate how much size it needs for scrollbars etc and
it will then call XXX_size_allocate of its child, which
is m_wxwindow. m_wxwindow in turn will do the same with its
children and so on. problems can arise if this happens
before all the children have been realized as some widgets
stupidy need to be realized during XXX_size_allocate (e.g.
GtkNotebook) and they will segv if called otherwise. this
emergency is tested in gtk_myfixed_size_allocate. Normally
this shouldn't be needed and only gtk_widget_queue_resize()
should be enough to provoke a resize at the next appropriate
moment, but this seems to fail, e.g. when a wxNotebook contains
a wxSplitterWindow: the splitter window's children won't
show up properly resized then. */
gtk_myfixed_set_size( GTK_MYFIXED(m_parent->m_wxwindow),
m_widget,
m_x-border,
m_y-border,
m_width+2*border,
m_height+2*border );
/* this is the result of hours of debugging: the following code
means that if we have a m_wxwindow and we set the size of
m_widget, m_widget (which is a GtkScrolledWindow) does NOT
automatically propagate its size down to its m_wxwindow,
which is its client area. therefore, we have to tell the
client area directly that it has to resize itself.
this will lead to that m_widget (GtkScrolledWindow) will
calculate how much size it needs for scrollbars etc and
it will then call XXX_size_allocate of its child, which
is m_wxwindow. m_wxwindow in turn will do the same with its
children and so on. problems can arise if this happens
before all the children have been realized as some widgets
stupidy need to be realized during XXX_size_allocate (e.g.
GtkNotebook) and they will segv if called otherwise. this
emergency is tested in gtk_myfixed_size_allocate. Normally
this shouldn't be needed and only gtk_widget_queue_resize()
should be enough to provoke a resize at the next appropriate
moment, but this seems to fail, e.g. when a wxNotebook contains
a wxSplitterWindow: the splitter window's children won't
show up properly resized then. */
if (m_wxwindow)
{
GtkAllocation alloc;
alloc.x = m_x;
alloc.y = m_y;
alloc.width = m_width;
alloc.height = m_height;
gtk_widget_size_allocate( m_widget, &alloc );
}
}
}
}
m_sizeSet = TRUE;