Replaced Blit with DrawBitmap in wxPoem to make it run with wxX11
Added some XSyncs because it seems the only way to make dialog sizing work git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14560 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -727,9 +727,12 @@ void MyCanvas::OnPaint(wxPaintEvent& WXUNUSED(event))
|
||||
int xx, yy;
|
||||
TheMainWindow->GetClientSize(&xx, &yy);
|
||||
|
||||
dc.DrawBitmap(* backingBitmap, 0, 0);
|
||||
#if 0
|
||||
wxMemoryDC memDC;
|
||||
memDC.SelectObject(* backingBitmap);
|
||||
dc.Blit(0, 0, backingBitmap->GetWidth(), backingBitmap->GetHeight(), &memDC, 0, 0);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -557,39 +557,44 @@ bool wxMWMIsRunning(Window w)
|
||||
// smaller
|
||||
wxPoint wxTopLevelWindowX11::GetClientAreaOrigin() const
|
||||
{
|
||||
// In fact wxFrame::GetClientAreaOrigin
|
||||
// wxFrame::GetClientAreaOrigin
|
||||
// does the required calculation already.
|
||||
#if 0
|
||||
if (this->IsKindOf(CLASSINFO(wxFrame)))
|
||||
{
|
||||
wxFrame* frame = (wxFrame*) this;
|
||||
if (frame->GetMenuBar())
|
||||
return wxPoint(0, frame->GetMenuBar()->GetSize().y);
|
||||
}
|
||||
#endif
|
||||
return wxPoint(0, 0);
|
||||
}
|
||||
|
||||
void wxTopLevelWindowX11::DoGetClientSize( int *width, int *height ) const
|
||||
{
|
||||
XSync(wxGlobalDisplay(), False);
|
||||
wxWindowX11::DoGetClientSize(width, height);
|
||||
// Done by wxTopLevelWindow
|
||||
#if 0
|
||||
if (this->IsKindOf(CLASSINFO(wxFrame)))
|
||||
{
|
||||
wxFrame* frame = (wxFrame*) this;
|
||||
if (frame->GetMenuBar())
|
||||
(*height) -= frame->GetMenuBar()->GetSize().y;
|
||||
if (frame->GetStatusBar())
|
||||
(*height) -= frame->GetStatusBar()->GetSize().y;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void wxTopLevelWindowX11::DoSetClientSize(int width, int height)
|
||||
{
|
||||
wxWindowX11::DoSetClientSize(width, height);
|
||||
|
||||
// Set the top-level window size
|
||||
XSizeHints size_hints;
|
||||
wxSize oldSize = GetSize();
|
||||
wxSize oldClientSize = GetClientSize();
|
||||
|
||||
size_hints.flags = PSize;
|
||||
size_hints.width = width + (oldSize.x - oldClientSize.x);
|
||||
size_hints.height = height + (oldSize.y - oldClientSize.y);
|
||||
XSetWMNormalHints( (Display*) GetXDisplay(), (Window) GetMainWindow(),
|
||||
&size_hints);
|
||||
|
||||
// This seems to be necessary or resizes don't get performed
|
||||
XSync(wxGlobalDisplay(), False);
|
||||
XSync(wxGlobalDisplay(), False);
|
||||
|
||||
#if 0
|
||||
wxLogDebug("DoSetClientSize: Tried to set size to %d, %d", (int) size_hints.width, (int) size_hints.height);
|
||||
|
||||
XSync(wxGlobalDisplay(), False);
|
||||
wxSize newSize = GetSize();
|
||||
wxLogDebug("New size is %d, %d", (int) newSize.x, (int) newSize.y);
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
if (!GetMainWindow())
|
||||
return;
|
||||
@@ -617,6 +622,33 @@ void wxTopLevelWindowX11::DoSetSize(int x, int y, int width, int height, int siz
|
||||
// wxLogDebug( "Setting pos: %d, %d", x, y );
|
||||
wxWindowX11::DoSetSize(x, y, width, height, sizeFlags);
|
||||
|
||||
XSizeHints size_hints;
|
||||
size_hints.flags = 0;
|
||||
if (x > -1 && y > -1)
|
||||
size_hints.flags |= PPosition;
|
||||
if (width > -1 && height > -1)
|
||||
size_hints.flags |= PSize;
|
||||
size_hints.width = width;
|
||||
size_hints.height = height;
|
||||
size_hints.x = x;
|
||||
size_hints.y = y;
|
||||
XSetWMNormalHints( (Display*) GetXDisplay(), (Window) GetMainWindow(),
|
||||
&size_hints);
|
||||
|
||||
// This seems to be necessary or resizes don't get performed.
|
||||
// Take them out (or even just one of them), and the About
|
||||
// box of the minimal sample probably won't be resized right.
|
||||
XSync(wxGlobalDisplay(), False);
|
||||
XSync(wxGlobalDisplay(), False);
|
||||
|
||||
#if 0
|
||||
wxLogDebug("DoSetSize: Tried to set size to %d, %d", (int) size_hints.width, (int) size_hints.height);
|
||||
|
||||
XSync(wxGlobalDisplay(), False);
|
||||
wxSize newSize = GetSize();
|
||||
wxLogDebug("New size is %d, %d", (int) newSize.x, (int) newSize.y);
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
wxPoint pt = GetPosition();
|
||||
// wxLogDebug( "After, pos: %d, %d", pt.x, pt.y );
|
||||
|
@@ -646,7 +646,7 @@ void wxWindowX11::DoGetSize(int *x, int *y) const
|
||||
|
||||
wxCHECK_RET( xwindow, wxT("invalid window") );
|
||||
|
||||
// XSync(wxGlobalDisplay(), False);
|
||||
//XSync(wxGlobalDisplay(), False);
|
||||
|
||||
XWindowAttributes attr;
|
||||
Status status = XGetWindowAttributes( wxGlobalDisplay(), xwindow, &attr );
|
||||
@@ -664,7 +664,7 @@ void wxWindowX11::DoGetPosition(int *x, int *y) const
|
||||
Window window = (Window) m_mainWidget;
|
||||
if (window)
|
||||
{
|
||||
// XSync(wxGlobalDisplay(), False);
|
||||
//XSync(wxGlobalDisplay(), False);
|
||||
XWindowAttributes attr;
|
||||
Status status = XGetWindowAttributes(wxGlobalDisplay(), window, & attr);
|
||||
wxASSERT(status);
|
||||
@@ -718,7 +718,7 @@ void wxWindowX11::DoGetClientSize(int *x, int *y) const
|
||||
|
||||
if (window)
|
||||
{
|
||||
// XSync(wxGlobalDisplay(), False); // Is this really a good idea?
|
||||
//XSync(wxGlobalDisplay(), False); // Is this really a good idea?
|
||||
XWindowAttributes attr;
|
||||
Status status = XGetWindowAttributes( wxGlobalDisplay(), window, &attr );
|
||||
wxASSERT(status);
|
||||
|
Reference in New Issue
Block a user