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;
|
int xx, yy;
|
||||||
TheMainWindow->GetClientSize(&xx, &yy);
|
TheMainWindow->GetClientSize(&xx, &yy);
|
||||||
|
|
||||||
|
dc.DrawBitmap(* backingBitmap, 0, 0);
|
||||||
|
#if 0
|
||||||
wxMemoryDC memDC;
|
wxMemoryDC memDC;
|
||||||
memDC.SelectObject(* backingBitmap);
|
memDC.SelectObject(* backingBitmap);
|
||||||
dc.Blit(0, 0, backingBitmap->GetWidth(), backingBitmap->GetHeight(), &memDC, 0, 0);
|
dc.Blit(0, 0, backingBitmap->GetWidth(), backingBitmap->GetHeight(), &memDC, 0, 0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -557,39 +557,44 @@ bool wxMWMIsRunning(Window w)
|
|||||||
// smaller
|
// smaller
|
||||||
wxPoint wxTopLevelWindowX11::GetClientAreaOrigin() const
|
wxPoint wxTopLevelWindowX11::GetClientAreaOrigin() const
|
||||||
{
|
{
|
||||||
// In fact wxFrame::GetClientAreaOrigin
|
// wxFrame::GetClientAreaOrigin
|
||||||
// does the required calculation already.
|
// 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);
|
return wxPoint(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxTopLevelWindowX11::DoGetClientSize( int *width, int *height ) const
|
void wxTopLevelWindowX11::DoGetClientSize( int *width, int *height ) const
|
||||||
{
|
{
|
||||||
|
XSync(wxGlobalDisplay(), False);
|
||||||
wxWindowX11::DoGetClientSize(width, height);
|
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)
|
void wxTopLevelWindowX11::DoSetClientSize(int width, int height)
|
||||||
{
|
{
|
||||||
wxWindowX11::DoSetClientSize(width, 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 0
|
||||||
if (!GetMainWindow())
|
if (!GetMainWindow())
|
||||||
return;
|
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 );
|
// wxLogDebug( "Setting pos: %d, %d", x, y );
|
||||||
wxWindowX11::DoSetSize(x, y, width, height, sizeFlags);
|
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
|
#if 0
|
||||||
wxPoint pt = GetPosition();
|
wxPoint pt = GetPosition();
|
||||||
// wxLogDebug( "After, pos: %d, %d", pt.x, pt.y );
|
// 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") );
|
wxCHECK_RET( xwindow, wxT("invalid window") );
|
||||||
|
|
||||||
// XSync(wxGlobalDisplay(), False);
|
//XSync(wxGlobalDisplay(), False);
|
||||||
|
|
||||||
XWindowAttributes attr;
|
XWindowAttributes attr;
|
||||||
Status status = XGetWindowAttributes( wxGlobalDisplay(), xwindow, &attr );
|
Status status = XGetWindowAttributes( wxGlobalDisplay(), xwindow, &attr );
|
||||||
@@ -664,7 +664,7 @@ void wxWindowX11::DoGetPosition(int *x, int *y) const
|
|||||||
Window window = (Window) m_mainWidget;
|
Window window = (Window) m_mainWidget;
|
||||||
if (window)
|
if (window)
|
||||||
{
|
{
|
||||||
// XSync(wxGlobalDisplay(), False);
|
//XSync(wxGlobalDisplay(), False);
|
||||||
XWindowAttributes attr;
|
XWindowAttributes attr;
|
||||||
Status status = XGetWindowAttributes(wxGlobalDisplay(), window, & attr);
|
Status status = XGetWindowAttributes(wxGlobalDisplay(), window, & attr);
|
||||||
wxASSERT(status);
|
wxASSERT(status);
|
||||||
@@ -718,7 +718,7 @@ void wxWindowX11::DoGetClientSize(int *x, int *y) const
|
|||||||
|
|
||||||
if (window)
|
if (window)
|
||||||
{
|
{
|
||||||
// XSync(wxGlobalDisplay(), False); // Is this really a good idea?
|
//XSync(wxGlobalDisplay(), False); // Is this really a good idea?
|
||||||
XWindowAttributes attr;
|
XWindowAttributes attr;
|
||||||
Status status = XGetWindowAttributes( wxGlobalDisplay(), window, &attr );
|
Status status = XGetWindowAttributes( wxGlobalDisplay(), window, &attr );
|
||||||
wxASSERT(status);
|
wxASSERT(status);
|
||||||
|
Reference in New Issue
Block a user