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:
Julian Smart
2002-03-12 10:56:39 +00:00
parent 5541d1fda4
commit 59db9cfaa7
3 changed files with 58 additions and 23 deletions

View File

@@ -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
}
}

View File

@@ -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 );

View File

@@ -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);