Allowed for wxHAVE_LIB_XPM or using wxXPMDecoder

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14181 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2002-02-13 18:01:38 +00:00
parent 61aa560b2d
commit 707440dc36
3 changed files with 129 additions and 4 deletions

View File

@@ -438,3 +438,81 @@ void wxSetCursor(const wxCursor& WXUNUSED(cursor))
} }
// ----------------------------------------------------------------------------
// busy cursor stuff
// ----------------------------------------------------------------------------
static int wxBusyCursorCount = 0;
// Helper function
static void
wxXSetBusyCursor (wxWindow * win, wxCursor * cursor)
{
Display *display = (Display*) win->GetXDisplay();
Window xwin = (Window) win->GetXWindow();
if (!xwin)
return;
XSetWindowAttributes attrs;
if (cursor)
{
attrs.cursor = (Cursor) cursor->GetXCursor(display);
}
else
{
// Restore old cursor
if (win->GetCursor().Ok())
attrs.cursor = (Cursor) win->GetCursor().GetXCursor(display);
else
attrs.cursor = None;
}
if (xwin)
XChangeWindowAttributes (display, xwin, CWCursor, &attrs);
XFlush (display);
for(wxNode *node = win->GetChildren().First (); node; node = node->Next())
{
wxWindow *child = (wxWindow *) node->Data ();
wxXSetBusyCursor (child, cursor);
}
}
// Set the cursor to the busy cursor for all windows
void wxBeginBusyCursor(wxCursor *cursor)
{
wxBusyCursorCount++;
if (wxBusyCursorCount == 1)
{
for(wxNode *node = wxTopLevelWindows.First (); node; node = node->Next())
{
wxWindow *win = (wxWindow *) node->Data ();
wxXSetBusyCursor (win, cursor);
}
}
}
// Restore cursor to normal
void wxEndBusyCursor()
{
if (wxBusyCursorCount == 0)
return;
wxBusyCursorCount--;
if (wxBusyCursorCount == 0)
{
for(wxNode *node = wxTopLevelWindows.First (); node; node = node->Next())
{
wxWindow *win = (wxWindow *) node->Data ();
wxXSetBusyCursor (win, NULL);
}
}
}
// TRUE if we're between the above two calls
bool wxIsBusy()
{
return (wxBusyCursorCount > 0);
}

View File

@@ -21,8 +21,13 @@
#include "wx/x11/private.h" #include "wx/x11/private.h"
#if wxUSE_XPM
#if wxHAVE_LIB_XPM #if wxHAVE_LIB_XPM
#include <X11/xpm.h> #include <X11/xpm.h>
#else
#include "wx/xpmdecod.h"
#include "wx/wfstream.h"
#endif
#endif #endif
#include <math.h> #include <math.h>
@@ -308,6 +313,8 @@ bool wxBitmap::Create( int width, int height, int depth )
bool wxBitmap::CreateFromXpm( const char **bits ) bool wxBitmap::CreateFromXpm( const char **bits )
{ {
#if wxUSE_XPM
#if wxHAVE_LIB_XPM
UnRef(); UnRef();
wxCHECK_MSG( bits != NULL, FALSE, wxT("invalid bitmap data") ) wxCHECK_MSG( bits != NULL, FALSE, wxT("invalid bitmap data") )
@@ -358,6 +365,7 @@ bool wxBitmap::CreateFromXpm( const char **bits )
M_BMPDATA->m_mask->SetBitmap( (WXPixmap) mask ); M_BMPDATA->m_mask->SetBitmap( (WXPixmap) mask );
M_BMPDATA->m_mask->SetDisplay( xdisplay ); M_BMPDATA->m_mask->SetDisplay( xdisplay );
} }
return TRUE;
} }
else else
{ {
@@ -365,8 +373,16 @@ bool wxBitmap::CreateFromXpm( const char **bits )
return FALSE; return FALSE;
} }
#else
return TRUE; wxXPMDecoder decoder;
wxImage image(decoder.ReadData(bits));
if (image.Ok())
return CreateFromImage(image);
else
return FALSE;
#endif
#endif
return FALSE;
} }
bool wxBitmap::CreateFromImage( const wxImage& image, int depth ) bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
@@ -970,6 +986,8 @@ bool wxBitmap::LoadFile( const wxString &name, int type )
if (type == wxBITMAP_TYPE_XPM) if (type == wxBITMAP_TYPE_XPM)
{ {
#if wxUSE_XPM
#if wxHAVE_LIB_XPM
m_refData = new wxBitmapRefData(); m_refData = new wxBitmapRefData();
M_BMPDATA->m_display = wxGlobalDisplay(); M_BMPDATA->m_display = wxGlobalDisplay();
@@ -1013,6 +1031,29 @@ bool wxBitmap::LoadFile( const wxString &name, int type )
return FALSE; return FALSE;
} }
#else
#if wxUSE_STREAMS
wxXPMDecoder decoder;
wxFileInputStream stream(name);
if (stream.Ok())
{
wxImage image(decoder.Read(stream));
if (image.Ok())
return CreateFromImage(image);
else
return FALSE;
}
else
return FALSE;
#else
return FALSE;
#endif
// wxUSE_STREAMS
#endif
// wxHAVE_LIB_XPM
#endif
// wxUSE_XPM
return FALSE;
} }
else // try if wxImage can load it else // try if wxImage can load it
{ {

View File

@@ -165,9 +165,11 @@ static void xt_notify_end_process(XtPointer data, int *WXUNUSED(fid),
XtRemoveInput(*id); XtRemoveInput(*id);
} }
#endif
int wxAddProcessCallback(wxEndProcessData *proc_data, int fd) int wxAddProcessCallback(wxEndProcessData *proc_data, int fd)
{ {
#ifdef __WXMOTIF__
XtInputId id = XtAppAddInput((XtAppContext) wxTheApp->GetAppContext(), XtInputId id = XtAppAddInput((XtAppContext) wxTheApp->GetAppContext(),
fd, fd,
(XtPointer *) XtInputReadMask, (XtPointer *) XtInputReadMask,
@@ -175,8 +177,12 @@ int wxAddProcessCallback(wxEndProcessData *proc_data, int fd)
(XtPointer) proc_data); (XtPointer) proc_data);
return (int)id; return (int)id;
}
#endif #endif
#ifdef __WXX11__
// TODO
return 0;
#endif
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// misc // misc