if (pizza->m_is_scrollable)
{
- // backing window is inside border
+ // two windows, both same size
gdk_window_move_resize(pizza->m_backing_window,
alloc->x + border_x, alloc->y + border_y, w, h);
+ if (is_resize)
+ gdk_window_resize(widget->window, w, h);
+ }
+ else if (pizza->m_backing_window)
+ {
+ // two windows, widget->window is smaller by border widths (need to
+ // move widget->window as well as resize because border can change)
+ gdk_window_move_resize(pizza->m_backing_window,
+ alloc->x, alloc->y, alloc->width, alloc->height);
+ gdk_window_move_resize(widget->window, border_x, border_y, w, h);
}
else
{
- // border window (or only window if
- // no-scroll no-border) is full size
- GdkWindow* window = pizza->m_backing_window;
- if (window == NULL)
- window = widget->window;
- gdk_window_move_resize(
- window, alloc->x, alloc->y, alloc->width, alloc->height);
+ // one window
+ gdk_window_move_resize(widget->window,
+ alloc->x, alloc->y, alloc->width, alloc->height);
}
if (is_resize && pizza->m_backing_window)
{
- // main window is inside border
- if (pizza->m_is_scrollable)
- gdk_window_resize(widget->window, w, h);
- else
- // need move as well as resize because border can change
- gdk_window_move_resize(widget->window, border_x, border_y, w, h);
-
// wxWidgets turns off redraw-on-allocate by default,
// so border area needs to be invalidated
if (border_x > 1 || border_y > 1)
else
gdk_window_reparent(widget->window, pizza->m_backing_window, border_x, border_y);
gdk_window_resize(widget->window, w, h);
+
+ // Parts of m_backing_window which are supposed to be obscured may be
+ // exposed temporarily while resizing. Setting the backing pixmap to
+ // None prevents those areas from being briefly painted black.
+ gdk_window_set_back_pixmap(pizza->m_backing_window, NULL, false);
}
}
pizza->m_scroll_x = 0;
pizza->m_scroll_y = 0;
pizza->m_is_scrollable = (windowStyle & (wxHSCROLL | wxVSCROLL)) != 0;
- pizza->m_border_style =
- int(windowStyle & (wxBORDER_SIMPLE | wxBORDER_RAISED | wxBORDER_SUNKEN));
+ // mask off border styles not useable with wxPizza
+ pizza->m_border_style = int(windowStyle & BORDER_STYLES);
gtk_fixed_set_has_window(GTK_FIXED(widget), true);
gtk_widget_add_events(widget,
GDK_EXPOSURE_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_LEAVE_NOTIFY_MASK |
GDK_FOCUS_CHANGE_MASK);
- gtk_container_set_resize_mode(GTK_CONTAINER(widget), GTK_RESIZE_QUEUE);
return widget;
}
}
}
+extern GtkWidget *GetEntryWidget();
+
void wxPizza::get_border_widths(int& x, int& y)
{
x = y = 0;
x = y = 1;
else if (m_border_style)
{
- GtkWidget* widget = GTK_WIDGET(this);
- if (widget->style)
+ GtkWidget *entry_widget = GetEntryWidget();
+ if (entry_widget->style)
{
- x = widget->style->xthickness;
- y = widget->style->ythickness;
+ x = entry_widget->style->xthickness;
+ y = entry_widget->style->ythickness;
}
}
}