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:
@@ -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);
|
||||||
|
}
|
||||||
|
@@ -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
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user