wxIconBundle implementation.

wxTLW::SetIcons() properly implemented for wxMotif, wxGTK, wxMSW, wxX11, wxUniversal
Placeholders that just call SetIcon for wxOS2 and wxMac.
Regenerated makefiles.
Added hardwired wxSYS_ICON_X/Y = 32 for wxGTK.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14809 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Mattia Barbon
2002-03-26 21:54:23 +00:00
parent 6b3d51cc35
commit f618020a15
51 changed files with 566 additions and 68 deletions

View File

@@ -23,6 +23,7 @@ all: $(MSW_MAKEFILES_DIR)/makefile.vc \
$(WXDIR)/src/os2/files.lst \ $(WXDIR)/src/os2/files.lst \
$(WXDIR)/src/mgl/files.lst \ $(WXDIR)/src/mgl/files.lst \
$(WXDIR)/src/microwin/files.lst \ $(WXDIR)/src/microwin/files.lst \
$(WXDIR)/src/x11/files.lst \
$(WXDIR)/src/univ/files.lst \ $(WXDIR)/src/univ/files.lst \
$(WXDIR)/src/wxBase.dsp \ $(WXDIR)/src/wxBase.dsp \
$(WXDIR)/src/wxWindows.dsp \ $(WXDIR)/src/wxWindows.dsp \
@@ -76,6 +77,9 @@ $(WXDIR)/src/os2/files.lst: os2.t filelist.txt wxwin.pro
$(WXDIR)/src/univ/files.lst: univ.t filelist.txt wxwin.pro $(WXDIR)/src/univ/files.lst: univ.t filelist.txt wxwin.pro
$(TMAKE) -t univ wxwin.pro -o $@ $(TMAKE) -t univ wxwin.pro -o $@
$(WXDIR)/src/x11/files.lst: x11.t filelist.txt wxwin.pro
$(TMAKE) -t x11 wxwin.pro -o $@
$(WXDIR)/src/wxBase.dsp: vc6base.t filelist.txt wxwin.pro $(WXDIR)/src/wxBase.dsp: vc6base.t filelist.txt wxwin.pro
$(TMAKE) -t vc6base wxwin.pro -o $@ $(TMAKE) -t vc6base wxwin.pro -o $@

View File

@@ -176,6 +176,7 @@ hash.cpp Common Base
hashmap.cpp Common Base hashmap.cpp Common Base
helpbase.cpp Common helpbase.cpp Common
http.cpp Common Socket,Base http.cpp Common Socket,Base
iconbndl.cpp Common
imagall.cpp Common imagall.cpp Common
imagbmp.cpp Common imagbmp.cpp Common
image.cpp Common image.cpp Common
@@ -370,6 +371,7 @@ mimetype.cpp Unix Base,NotMac,NotMicro
snglinst.cpp Unix Base snglinst.cpp Unix Base
threadpsx.cpp Unix Base,NotMac threadpsx.cpp Unix Base,NotMac
utilsunx.cpp Unix Base utilsunx.cpp Unix Base
utilsx11.cpp Unix NotMac,NotMGL,NotMicro
bmpbuttn.cpp Univ bmpbuttn.cpp Univ
button.cpp Univ button.cpp Univ
@@ -845,6 +847,7 @@ helpbase.h WXH
helphtml.h WXH helphtml.h WXH
helpwin.h WXH helpwin.h WXH
icon.h WXH icon.h WXH
iconbndl.h WXH
image.h WXH image.h WXH
imaggif.h WXH imaggif.h WXH
imagiff.h WXH imagiff.h WXH
@@ -1427,6 +1430,7 @@ execute.h UnixH
fontutil.h UnixH fontutil.h UnixH
gsockunx.h UnixH Base gsockunx.h UnixH Base
mimetype.h UnixH Base mimetype.h UnixH Base
utilsx11.h UnixH
file.h ProtoH Base file.h ProtoH Base
ftp.h ProtoH Base ftp.h ProtoH Base

View File

@@ -161,7 +161,8 @@ public:
#endif #endif
// no icon // no icon
void SetIcon( const wxIcon &icon ) { m_icon = icon; } void SetIcon( const wxIcon &icon ) { m_icons = wxIconBundle( icon ); }
void SetIcons( const wxIconBundle &icons ) { m_icons = icons; }
// no title // no title
void SetTitle( const wxString &title ); void SetTitle( const wxString &title );

View File

@@ -54,6 +54,7 @@ public:
virtual void Iconize(bool iconize = TRUE); virtual void Iconize(bool iconize = TRUE);
virtual bool IsIconized() const; virtual bool IsIconized() const;
virtual void SetIcon(const wxIcon& icon); virtual void SetIcon(const wxIcon& icon);
virtual void SetIcons(const wxIconBundle& icons);
virtual void Restore(); virtual void Restore();
virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL); virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL);
@@ -71,6 +72,9 @@ public:
// from both DoSetSize() and DoSetClientSize() // from both DoSetSize() and DoSetClientSize()
virtual void DoMoveWindow(int x, int y, int width, int height); virtual void DoMoveWindow(int x, int y, int width, int height);
// set the icon for this window
void DoSetIcon( const wxIcon& icon );
// GTK callbacks // GTK callbacks
virtual void GtkOnSize( int x, int y, int width, int height ); virtual void GtkOnSize( int x, int y, int width, int height );
virtual void OnInternalIdle(); virtual void OnInternalIdle();

View File

@@ -161,7 +161,8 @@ public:
#endif #endif
// no icon // no icon
void SetIcon( const wxIcon &icon ) { m_icon = icon; } void SetIcon( const wxIcon &icon ) { m_icons = wxIconBundle( icon ); }
void SetIcons( const wxIconBundle &icons ) { m_icons = icons; }
// no title // no title
void SetTitle( const wxString &title ); void SetTitle( const wxString &title );

View File

@@ -54,6 +54,7 @@ public:
virtual void Iconize(bool iconize = TRUE); virtual void Iconize(bool iconize = TRUE);
virtual bool IsIconized() const; virtual bool IsIconized() const;
virtual void SetIcon(const wxIcon& icon); virtual void SetIcon(const wxIcon& icon);
virtual void SetIcons(const wxIconBundle& icons);
virtual void Restore(); virtual void Restore();
virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL); virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL);
@@ -71,6 +72,9 @@ public:
// from both DoSetSize() and DoSetClientSize() // from both DoSetSize() and DoSetClientSize()
virtual void DoMoveWindow(int x, int y, int width, int height); virtual void DoMoveWindow(int x, int y, int width, int height);
// set the icon for this window
void DoSetIcon( const wxIcon& icon );
// GTK callbacks // GTK callbacks
virtual void GtkOnSize( int x, int y, int width, int height ); virtual void GtkOnSize( int x, int y, int width, int height );
virtual void OnInternalIdle(); virtual void OnInternalIdle();

73
include/wx/iconbndl.h Normal file
View File

@@ -0,0 +1,73 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/iconbndl.h
// Purpose: wxIconBundle
// Author: Mattia barbon
// Modified by:
// Created: 23.03.02
// RCS-ID: $Id$
// Copyright: (c) Mattia Barbon
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_ICONBNDL_H_
#define _WX_ICONBNDL_H_
#ifdef __GNUG__
#pragma interface "iconbndl.h"
#endif
#include "dynarray.h"
// for wxSize
#include "wx/gdicmn.h"
class WXDLLEXPORT wxIcon;
class WXDLLEXPORT wxString;
WX_DECLARE_EXPORTED_OBJARRAY( wxIcon, wxIconArray );
// this class can't load bitmaps of type wxBITMAP_TYPE_ICO_RESOURCE,
// if you need them, you have to load them manually and call
// wxIconCollection::AddIcon
class WXDLLEXPORT wxIconBundle
{
public:
// default constructor
wxIconBundle() {}
// initializes the bundle with the icon(s) found in the file
wxIconBundle( const wxString& file, long type )
{ AddIcon( file, type ); }
// initializes the bundle with a single icon
wxIconBundle( const wxIcon& icon )
{ AddIcon( icon ); }
const wxIconBundle& operator =( const wxIconBundle& ic );
wxIconBundle( const wxIconBundle& ic )
{ *this = ic; }
~wxIconBundle() { DeleteIcons(); }
// adds all the icons contained in the file to the collection,
// if the collection already contains icons with the same
// width and height, they are replaced
void AddIcon( const wxString& file, long type );
// adds the icon to the collection, if the collection already
// contains an icon with the same width and height, it is
// replaced
void AddIcon( const wxIcon& icon );
// returns the icon with the given size; if no such icon exists,
// returns the icon with size wxSYS_ICON_[XY]; if no such icon exists,
// returns the first icon in the bundle
const wxIcon& GetIcon( const wxSize& size ) const;
// equivalent to GetIcon( wxSize( size, size ) )
const wxIcon& GetIcon( wxCoord size = -1 ) const
{ return GetIcon( wxSize( size, size ) ); }
private:
// delete all icons
void DeleteIcons();
public:
wxIconArray m_icons;
};
#endif
// _WX_ICONBNDL_H_

View File

@@ -55,6 +55,7 @@ public:
virtual void Iconize(bool iconize = TRUE); virtual void Iconize(bool iconize = TRUE);
virtual bool IsIconized() const; virtual bool IsIconized() const;
virtual void SetIcon(const wxIcon& icon); virtual void SetIcon(const wxIcon& icon);
virtual void SetIcons(const wxIconBundle& icons) { SetIcon( icons.GetIcon( -1 ) ); }
virtual void Restore(); virtual void Restore();
virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL) { return FALSE; } virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL) { return FALSE; }

View File

@@ -54,7 +54,8 @@ public:
// Set icon // Set icon
virtual void SetIcon(const wxIcon& icon); virtual void SetIcon(const wxIcon& icon);
virtual void SetIcons(const wxIconBundle& icons);
#if wxUSE_STATUSBAR #if wxUSE_STATUSBAR
virtual void PositionStatusBar(); virtual void PositionStatusBar();
#endif // wxUSE_STATUSBAR #endif // wxUSE_STATUSBAR
@@ -107,7 +108,10 @@ public:
protected: protected:
// common part of all ctors // common part of all ctors
void Init(); void Init();
// set a single icon for the frame
void DoSetIcon( const wxIcon& icon );
//// Motif-specific //// Motif-specific
WXWidget m_frameShell; WXWidget m_frameShell;
WXWidget m_frameWidget; WXWidget m_frameWidget;

View File

@@ -152,7 +152,8 @@ public:
// Set icon // Set icon
virtual void SetIcon(const wxIcon& icon); virtual void SetIcon(const wxIcon& icon);
virtual void SetIcons(const wxIconBundle& icons );
// Override wxFrame operations // Override wxFrame operations
void CaptureMouse(); void CaptureMouse();
void ReleaseMouse(); void ReleaseMouse();

View File

@@ -55,6 +55,7 @@ public:
virtual void Iconize(bool iconize = TRUE); virtual void Iconize(bool iconize = TRUE);
virtual bool IsIconized() const; virtual bool IsIconized() const;
virtual void SetIcon(const wxIcon& icon); virtual void SetIcon(const wxIcon& icon);
virtual void SetIcons(const wxIconBundle& icons );
virtual void Restore(); virtual void Restore();
virtual bool Show(bool show = TRUE); virtual bool Show(bool show = TRUE);

View File

@@ -67,6 +67,8 @@ public:
virtual void Restore(void); virtual void Restore(void);
virtual void SendSizeEvent(void); virtual void SendSizeEvent(void);
virtual void SetIcon(const wxIcon& rIcon); virtual void SetIcon(const wxIcon& rIcon);
inline virtual void SetIcons(const wxIconBundle& icons) { SetIcon( icons.GetIcon( -1 ) ); }
virtual bool Show(bool bShow = TRUE); virtual bool Show(bool bShow = TRUE);
virtual bool ShowFullScreen( bool bShow virtual bool ShowFullScreen( bool bShow
,long lStyle = wxFULLSCREEN_ALL ,long lStyle = wxFULLSCREEN_ALL

View File

@@ -23,7 +23,7 @@
#endif #endif
#include "wx/window.h" #include "wx/window.h"
#include "wx/icon.h" #include "wx/iconbndl.h"
// the default names for various classs // the default names for various classs
WXDLLEXPORT_DATA(extern const wxChar*) wxFrameNameStr; WXDLLEXPORT_DATA(extern const wxChar*) wxFrameNameStr;
@@ -83,10 +83,16 @@ public:
virtual bool IsIconized() const = 0; virtual bool IsIconized() const = 0;
// get the frame icon // get the frame icon
const wxIcon& GetIcon() const { return m_icon; } const wxIcon& GetIcon() const { return m_icons.GetIcon( -1 ); }
// get the frame icons
const wxIconBundle& GetIcons() const { return m_icons; }
// set the frame icon // set the frame icon
virtual void SetIcon(const wxIcon& icon) { m_icon = icon; } virtual void SetIcon(const wxIcon& icon) { m_icons = wxIconBundle( icon ); }
// set the frame icons
virtual void SetIcons(const wxIconBundle& icons ) { m_icons = icons; }
// maximize the window to cover entire screen // maximize the window to cover entire screen
virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL) = 0; virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL) = 0;
@@ -133,7 +139,7 @@ protected:
bool SendIconizeEvent(bool iconized = TRUE); bool SendIconizeEvent(bool iconized = TRUE);
// the frame icon // the frame icon
wxIcon m_icon; wxIconBundle m_icons;
// test whether this window makes part of the frame // test whether this window makes part of the frame
// (menubar, toolbar and statusbar are excluded from automatic layout) // (menubar, toolbar and statusbar are excluded from automatic layout)

View File

@@ -123,7 +123,8 @@ public:
virtual wxPoint GetClientAreaOrigin() const; virtual wxPoint GetClientAreaOrigin() const;
virtual void DoGetClientSize(int *width, int *height) const; virtual void DoGetClientSize(int *width, int *height) const;
virtual void DoSetClientSize(int width, int height); virtual void DoSetClientSize(int width, int height);
virtual void SetIcon(const wxIcon& icon); virtual void SetIcon(const wxIcon& icon) { SetIcons( wxIconBundle( icon ) ); }
virtual void SetIcons(const wxIconBundle& icons);
// implementation from now on // implementation from now on
// -------------------------- // --------------------------

View File

@@ -0,0 +1,33 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/unix/utilsx11.h
// Purpose: Miscellaneous X11 functions
// Author: Mattia Barbon
// Modified by:
// Created: 25.03.02
// RCS-ID: $Id$
// Copyright: (c) wxWindows team
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_UNIX_UTILSX11_H_
#define _WX_UNIX_UTILSX11_H_
#include "wx/defs.h"
#if defined(__WXMOTIF__) || defined(__WXGTK__) || defined(__WXX11__)
#if defined(__WXGTK__)
typedef void WXDisplay;
typedef void* WXWindow;
#endif
class wxIconBundle;
void wxSetIconsX11( WXDisplay* display, WXWindow window,
const wxIconBundle& ib );
#endif
// __WXMOTIF__, __WXGTK__, __WXX11__
#endif
// _WX_UNIX_UTILSX11_H_

View File

@@ -65,7 +65,8 @@ enum wxFSIconType
wxFS_VOL_ICO_MAX wxFS_VOL_ICO_MAX
}; };
WX_DECLARE_EXPORTED_OBJARRAY(wxIcon, wxIconArray); // already in wx/iconbndl.h
// WX_DECLARE_EXPORTED_OBJARRAY(wxIcon, wxIconArray);
#endif // wxUSE_GUI #endif // wxUSE_GUI

View File

@@ -54,7 +54,8 @@ public:
virtual bool IsMaximized() const; virtual bool IsMaximized() const;
virtual void Iconize(bool iconize = TRUE); virtual void Iconize(bool iconize = TRUE);
virtual bool IsIconized() const; virtual bool IsIconized() const;
virtual void SetIcon(const wxIcon& icon); virtual void SetIcon(const wxIcon& icon) { SetIcons( wxIconBundle( icon ) ); }
virtual void SetIcons(const wxIconBundle& icons);
virtual void Restore(); virtual void Restore();
virtual bool Show( bool show = TRUE ); virtual bool Show( bool show = TRUE );
@@ -72,6 +73,9 @@ protected:
// common part of all ctors // common part of all ctors
void Init(); void Init();
// set the icon for the window
void DoSetIcon( const wxIcon& icon );
// For implementation purposes - sometimes decorations make the // For implementation purposes - sometimes decorations make the
// client area smaller // client area smaller
virtual wxPoint GetClientAreaOrigin() const; virtual wxPoint GetClientAreaOrigin() const;

114
src/common/iconbndl.cpp Normal file
View File

@@ -0,0 +1,114 @@
/////////////////////////////////////////////////////////////////////////////
// Name: iconbndl.cpp
// Purpose: wxIconBundle
// Author: Mattia Barbon
// Created: 23.03.2002
// RCS-ID: $Id$
// Copyright: (c) Mattia barbon
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation "iconbndl.h"
#endif
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/settings.h"
#include "wx/image.h"
#include "wx/icon.h"
#include "wx/log.h"
#include "wx/intl.h"
#endif
#include "wx/iconbndl.h"
#include "wx/arrimpl.cpp"
WX_DEFINE_OBJARRAY(wxIconArray)
const wxIconBundle& wxIconBundle::operator =( const wxIconBundle& ic )
{
if( this == &ic ) return *this;
size_t i, max = ic.m_icons.GetCount();
DeleteIcons();
for( i = 0; i < max; ++i )
m_icons.Add( ic.m_icons[i] );
return *this;
}
void wxIconBundle::DeleteIcons()
{
m_icons.Empty();
}
void wxIconBundle::AddIcon( const wxString& file, long type )
{
size_t count = wxImage::GetImageCount( file, type );
size_t i;
wxImage image;
wxIcon tmp;
for( i = 0; i < count; ++i )
{
if( !image.LoadFile( file, type, i ) )
{
wxLogError( _("Failed to load image %d from file '%s'."),
i, file.c_str() );
continue;
}
tmp.CopyFromBitmap( wxBitmap( image ) );
AddIcon( tmp );
}
}
const wxIcon& wxIconBundle::GetIcon( const wxSize& size ) const
{
size_t i, max = m_icons.GetCount();
wxCoord sysX = wxSystemSettings::GetMetric( wxSYS_ICON_X ),
sysY = wxSystemSettings::GetMetric( wxSYS_ICON_Y );
wxIcon* sysIcon = 0;
for( i = 0; i < max; ++i )
{
wxCoord sx = m_icons[i].GetWidth(), sy = m_icons[i].GetHeight();
// requested size
if( sx == size.x && sy == size.y )
return m_icons[i];
// keep track if there is a system-size icon
if( sx == sysX && sy == sysY )
sysIcon = &m_icons[i];
}
// return the system-sized icon if we've got one
if( sysIcon ) return *sysIcon;
// return the first icon, if we have one
return max > 0 ? m_icons[0] : wxNullIcon;
}
void wxIconBundle::AddIcon( const wxIcon& icon )
{
size_t i, max = m_icons.GetCount();
for( i = 0; i < max; ++i )
{
wxIcon& tmp = m_icons[i];
if( tmp.GetWidth() == icon.GetWidth() &&
tmp.GetHeight() == icon.GetHeight() )
{
tmp = icon;
return;
}
}
m_icons.Add( icon );
}

View File

@@ -104,6 +104,7 @@ ALL_SOURCES = \
common/hashmap.cpp \ common/hashmap.cpp \
common/helpbase.cpp \ common/helpbase.cpp \
common/http.cpp \ common/http.cpp \
common/iconbndl.cpp \
common/imagall.cpp \ common/imagall.cpp \
common/imagbmp.cpp \ common/imagbmp.cpp \
common/image.cpp \ common/image.cpp \
@@ -244,6 +245,7 @@ ALL_SOURCES = \
unix/snglinst.cpp \ unix/snglinst.cpp \
unix/threadpsx.cpp \ unix/threadpsx.cpp \
unix/utilsunx.cpp \ unix/utilsunx.cpp \
unix/utilsx11.cpp \
html/helpctrl.cpp \ html/helpctrl.cpp \
html/helpdata.cpp \ html/helpdata.cpp \
html/helpfrm.cpp \ html/helpfrm.cpp \
@@ -367,6 +369,7 @@ ALL_HEADERS = \
helphtml.h \ helphtml.h \
helpwin.h \ helpwin.h \
icon.h \ icon.h \
iconbndl.h \
imagbmp.h \ imagbmp.h \
image.h \ image.h \
imaggif.h \ imaggif.h \
@@ -604,6 +607,7 @@ ALL_HEADERS = \
unix/fontutil.h \ unix/fontutil.h \
unix/gsockunx.h \ unix/gsockunx.h \
unix/mimetype.h \ unix/mimetype.h \
unix/utilsx11.h \
html/forcelnk.h \ html/forcelnk.h \
html/helpctrl.h \ html/helpctrl.h \
html/helpdata.h \ html/helpdata.h \
@@ -680,6 +684,7 @@ COMMONOBJS = \
hashmap.o \ hashmap.o \
helpbase.o \ helpbase.o \
http.o \ http.o \
iconbndl.o \
imagall.o \ imagall.o \
imagbmp.o \ imagbmp.o \
image.o \ image.o \
@@ -947,7 +952,8 @@ UNIXOBJS = \
mimetype.o \ mimetype.o \
snglinst.o \ snglinst.o \
threadpsx.o \ threadpsx.o \
utilsunx.o utilsunx.o \
utilsx11.o
HTMLOBJS = \ HTMLOBJS = \
helpctrl.o \ helpctrl.o \

View File

@@ -349,7 +349,9 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index )
// VZ: is there any way to get the cursor size with GDK? // VZ: is there any way to get the cursor size with GDK?
case wxSYS_CURSOR_X: return 16; case wxSYS_CURSOR_X: return 16;
case wxSYS_CURSOR_Y: return 16; case wxSYS_CURSOR_Y: return 16;
// MBN: ditto for icons
case wxSYS_ICON_X: return 32;
case wxSYS_ICON_Y: return 32;
default: default:
wxFAIL_MSG( wxT("wxSystemSettings::GetMetric not fully implemented") ); wxFAIL_MSG( wxT("wxSystemSettings::GetMetric not fully implemented") );
return 0; return 0;

View File

@@ -38,6 +38,8 @@
#include "wx/gtk/win_gtk.h" #include "wx/gtk/win_gtk.h"
#include "wx/unix/utilsx11.h"
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// idle system // idle system
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -814,13 +816,9 @@ void wxTopLevelWindowGTK::SetTitle( const wxString &title )
gtk_window_set_title( GTK_WINDOW(m_widget), title.mbc_str() ); gtk_window_set_title( GTK_WINDOW(m_widget), title.mbc_str() );
} }
void wxTopLevelWindowGTK::SetIcon( const wxIcon &icon ) void wxTopLevelWindowGTK::DoSetIcon( const wxIcon &icon )
{ {
wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") ); if ( !icon.Ok() )
wxTopLevelWindowBase::SetIcon(icon);
if ( !m_icon.Ok() )
return; return;
if (!m_widget->window) if (!m_widget->window)
@@ -833,6 +831,24 @@ void wxTopLevelWindowGTK::SetIcon( const wxIcon &icon )
gdk_window_set_icon( m_widget->window, (GdkWindow *) NULL, icon.GetPixmap(), bm ); gdk_window_set_icon( m_widget->window, (GdkWindow *) NULL, icon.GetPixmap(), bm );
} }
void wxTopLevelWindowGTK::SetIcon( const wxIcon &icon )
{
SetIcons( wxIconBundle( icon ) );
}
void wxTopLevelWindowGTK::SetIcons( const wxIconBundle &icons )
{
wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") );
GdkWindow* window = m_widget->window;
wxCHECK_RET( window, _T("window not created yet - can't set icon") );
wxTopLevelWindowBase::SetIcons( icons );
DoSetIcon( icons.GetIcon( -1 ) );
wxSetIconsX11( (WXDisplay*)GDK_WINDOW_XDISPLAY( window ),
(WXWindow)GDK_WINDOW_XWINDOW( window ), icons );
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// frame state: maximized/iconized/normal // frame state: maximized/iconized/normal
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -104,6 +104,7 @@ ALL_SOURCES = \
common/hashmap.cpp \ common/hashmap.cpp \
common/helpbase.cpp \ common/helpbase.cpp \
common/http.cpp \ common/http.cpp \
common/iconbndl.cpp \
common/imagall.cpp \ common/imagall.cpp \
common/imagbmp.cpp \ common/imagbmp.cpp \
common/image.cpp \ common/image.cpp \
@@ -244,6 +245,7 @@ ALL_SOURCES = \
unix/snglinst.cpp \ unix/snglinst.cpp \
unix/threadpsx.cpp \ unix/threadpsx.cpp \
unix/utilsunx.cpp \ unix/utilsunx.cpp \
unix/utilsx11.cpp \
html/helpctrl.cpp \ html/helpctrl.cpp \
html/helpdata.cpp \ html/helpdata.cpp \
html/helpfrm.cpp \ html/helpfrm.cpp \
@@ -367,6 +369,7 @@ ALL_HEADERS = \
helphtml.h \ helphtml.h \
helpwin.h \ helpwin.h \
icon.h \ icon.h \
iconbndl.h \
imagbmp.h \ imagbmp.h \
image.h \ image.h \
imaggif.h \ imaggif.h \
@@ -604,6 +607,7 @@ ALL_HEADERS = \
unix/fontutil.h \ unix/fontutil.h \
unix/gsockunx.h \ unix/gsockunx.h \
unix/mimetype.h \ unix/mimetype.h \
unix/utilsx11.h \
html/forcelnk.h \ html/forcelnk.h \
html/helpctrl.h \ html/helpctrl.h \
html/helpdata.h \ html/helpdata.h \
@@ -680,6 +684,7 @@ COMMONOBJS = \
hashmap.o \ hashmap.o \
helpbase.o \ helpbase.o \
http.o \ http.o \
iconbndl.o \
imagall.o \ imagall.o \
imagbmp.o \ imagbmp.o \
image.o \ image.o \
@@ -947,7 +952,8 @@ UNIXOBJS = \
mimetype.o \ mimetype.o \
snglinst.o \ snglinst.o \
threadpsx.o \ threadpsx.o \
utilsunx.o utilsunx.o \
utilsx11.o
HTMLOBJS = \ HTMLOBJS = \
helpctrl.o \ helpctrl.o \

View File

@@ -349,7 +349,9 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index )
// VZ: is there any way to get the cursor size with GDK? // VZ: is there any way to get the cursor size with GDK?
case wxSYS_CURSOR_X: return 16; case wxSYS_CURSOR_X: return 16;
case wxSYS_CURSOR_Y: return 16; case wxSYS_CURSOR_Y: return 16;
// MBN: ditto for icons
case wxSYS_ICON_X: return 32;
case wxSYS_ICON_Y: return 32;
default: default:
wxFAIL_MSG( wxT("wxSystemSettings::GetMetric not fully implemented") ); wxFAIL_MSG( wxT("wxSystemSettings::GetMetric not fully implemented") );
return 0; return 0;

View File

@@ -38,6 +38,8 @@
#include "wx/gtk/win_gtk.h" #include "wx/gtk/win_gtk.h"
#include "wx/unix/utilsx11.h"
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// idle system // idle system
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -814,13 +816,9 @@ void wxTopLevelWindowGTK::SetTitle( const wxString &title )
gtk_window_set_title( GTK_WINDOW(m_widget), title.mbc_str() ); gtk_window_set_title( GTK_WINDOW(m_widget), title.mbc_str() );
} }
void wxTopLevelWindowGTK::SetIcon( const wxIcon &icon ) void wxTopLevelWindowGTK::DoSetIcon( const wxIcon &icon )
{ {
wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") ); if ( !icon.Ok() )
wxTopLevelWindowBase::SetIcon(icon);
if ( !m_icon.Ok() )
return; return;
if (!m_widget->window) if (!m_widget->window)
@@ -833,6 +831,24 @@ void wxTopLevelWindowGTK::SetIcon( const wxIcon &icon )
gdk_window_set_icon( m_widget->window, (GdkWindow *) NULL, icon.GetPixmap(), bm ); gdk_window_set_icon( m_widget->window, (GdkWindow *) NULL, icon.GetPixmap(), bm );
} }
void wxTopLevelWindowGTK::SetIcon( const wxIcon &icon )
{
SetIcons( wxIconBundle( icon ) );
}
void wxTopLevelWindowGTK::SetIcons( const wxIconBundle &icons )
{
wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") );
GdkWindow* window = m_widget->window;
wxCHECK_RET( window, _T("window not created yet - can't set icon") );
wxTopLevelWindowBase::SetIcons( icons );
DoSetIcon( icons.GetIcon( -1 ) );
wxSetIconsX11( (WXDisplay*)GDK_WINDOW_XDISPLAY( window ),
(WXWindow)GDK_WINDOW_XWINDOW( window ), icons );
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// frame state: maximized/iconized/normal // frame state: maximized/iconized/normal
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

View File

@@ -101,6 +101,7 @@ ALL_SOURCES = \
common/hashmap.cpp \ common/hashmap.cpp \
common/helpbase.cpp \ common/helpbase.cpp \
common/http.cpp \ common/http.cpp \
common/iconbndl.cpp \
common/imagall.cpp \ common/imagall.cpp \
common/imagbmp.cpp \ common/imagbmp.cpp \
common/image.cpp \ common/image.cpp \
@@ -374,6 +375,7 @@ ALL_HEADERS = \
helphtml.h \ helphtml.h \
helpwin.h \ helpwin.h \
icon.h \ icon.h \
iconbndl.h \
imagbmp.h \ imagbmp.h \
image.h \ image.h \
imaggif.h \ imaggif.h \
@@ -631,6 +633,7 @@ ALL_HEADERS = \
unix/fontutil.h \ unix/fontutil.h \
unix/gsockunx.h \ unix/gsockunx.h \
unix/mimetype.h \ unix/mimetype.h \
unix/utilsx11.h \
html/forcelnk.h \ html/forcelnk.h \
html/helpctrl.h \ html/helpctrl.h \
html/helpdata.h \ html/helpdata.h \
@@ -707,6 +710,7 @@ COMMONOBJS = \
hashmap.o \ hashmap.o \
helpbase.o \ helpbase.o \
http.o \ http.o \
iconbndl.o \
imagall.o \ imagall.o \
imagbmp.o \ imagbmp.o \
image.o \ image.o \

View File

@@ -101,6 +101,7 @@ ALL_SOURCES = \
common/hashmap.cpp \ common/hashmap.cpp \
common/helpbase.cpp \ common/helpbase.cpp \
common/http.cpp \ common/http.cpp \
common/iconbndl.cpp \
common/imagall.cpp \ common/imagall.cpp \
common/imagbmp.cpp \ common/imagbmp.cpp \
common/image.cpp \ common/image.cpp \
@@ -374,6 +375,7 @@ ALL_HEADERS = \
helphtml.h \ helphtml.h \
helpwin.h \ helpwin.h \
icon.h \ icon.h \
iconbndl.h \
imagbmp.h \ imagbmp.h \
image.h \ image.h \
imaggif.h \ imaggif.h \
@@ -631,6 +633,7 @@ ALL_HEADERS = \
unix/fontutil.h \ unix/fontutil.h \
unix/gsockunx.h \ unix/gsockunx.h \
unix/mimetype.h \ unix/mimetype.h \
unix/utilsx11.h \
html/forcelnk.h \ html/forcelnk.h \
html/helpctrl.h \ html/helpctrl.h \
html/helpdata.h \ html/helpdata.h \
@@ -707,6 +710,7 @@ COMMONOBJS = \
hashmap.o \ hashmap.o \
helpbase.o \ helpbase.o \
http.o \ http.o \
iconbndl.o \
imagall.o \ imagall.o \
imagbmp.o \ imagbmp.o \
image.o \ image.o \

View File

@@ -41,7 +41,7 @@ wxUSE_GUI=1
!if "$(wxUSE_GUI)" == "1" !if "$(wxUSE_GUI)" == "1"
#!if "$(WXUSINGDLL)" == "1" #!if "$(WXUSINGDLL)" == "1"
#DUMMYOBJ= DUMMYOBJ=
#!endif #!endif
$(PROGRAM).exe: $(WXLIB) $(OBJECTS) $(PROGRAM).res $(PROGRAM).exe: $(WXLIB) $(OBJECTS) $(PROGRAM).res

View File

@@ -104,6 +104,7 @@ ALL_SOURCES = \
common/hashmap.cpp \ common/hashmap.cpp \
common/helpbase.cpp \ common/helpbase.cpp \
common/http.cpp \ common/http.cpp \
common/iconbndl.cpp \
common/imagall.cpp \ common/imagall.cpp \
common/imagbmp.cpp \ common/imagbmp.cpp \
common/image.cpp \ common/image.cpp \
@@ -329,6 +330,7 @@ ALL_HEADERS = \
helphtml.h \ helphtml.h \
helpwin.h \ helpwin.h \
icon.h \ icon.h \
iconbndl.h \
imagbmp.h \ imagbmp.h \
image.h \ image.h \
imaggif.h \ imaggif.h \
@@ -504,6 +506,7 @@ ALL_HEADERS = \
unix/fontutil.h \ unix/fontutil.h \
unix/gsockunx.h \ unix/gsockunx.h \
unix/mimetype.h \ unix/mimetype.h \
unix/utilsx11.h \
html/forcelnk.h \ html/forcelnk.h \
html/helpctrl.h \ html/helpctrl.h \
html/helpdata.h \ html/helpdata.h \
@@ -581,6 +584,7 @@ COMMONOBJS = \
hashmap.o \ hashmap.o \
helpbase.o \ helpbase.o \
http.o \ http.o \
iconbndl.o \
imagall.o \ imagall.o \
imagbmp.o \ imagbmp.o \
image.o \ image.o \

View File

@@ -101,6 +101,7 @@ ALL_SOURCES = \
common/hashmap.cpp \ common/hashmap.cpp \
common/helpbase.cpp \ common/helpbase.cpp \
common/http.cpp \ common/http.cpp \
common/iconbndl.cpp \
common/imagall.cpp \ common/imagall.cpp \
common/imagbmp.cpp \ common/imagbmp.cpp \
common/image.cpp \ common/image.cpp \
@@ -329,6 +330,7 @@ ALL_HEADERS = \
helphtml.h \ helphtml.h \
helpwin.h \ helpwin.h \
icon.h \ icon.h \
iconbndl.h \
imagbmp.h \ imagbmp.h \
image.h \ image.h \
imaggif.h \ imaggif.h \
@@ -598,6 +600,7 @@ ALL_HEADERS = \
unix/fontutil.h \ unix/fontutil.h \
unix/gsockunx.h \ unix/gsockunx.h \
unix/mimetype.h \ unix/mimetype.h \
unix/utilsx11.h \
html/forcelnk.h \ html/forcelnk.h \
html/helpctrl.h \ html/helpctrl.h \
html/helpdata.h \ html/helpdata.h \
@@ -674,6 +677,7 @@ COMMONOBJS = \
hashmap.o \ hashmap.o \
helpbase.o \ helpbase.o \
http.o \ http.o \
iconbndl.o \
imagall.o \ imagall.o \
imagbmp.o \ imagbmp.o \
image.o \ image.o \

View File

@@ -103,6 +103,7 @@ ALL_SOURCES = \
common/hashmap.cpp \ common/hashmap.cpp \
common/helpbase.cpp \ common/helpbase.cpp \
common/http.cpp \ common/http.cpp \
common/iconbndl.cpp \
common/imagall.cpp \ common/imagall.cpp \
common/imagbmp.cpp \ common/imagbmp.cpp \
common/image.cpp \ common/image.cpp \
@@ -235,6 +236,7 @@ ALL_SOURCES = \
unix/snglinst.cpp \ unix/snglinst.cpp \
unix/threadpsx.cpp \ unix/threadpsx.cpp \
unix/utilsunx.cpp \ unix/utilsunx.cpp \
unix/utilsx11.cpp \
html/helpctrl.cpp \ html/helpctrl.cpp \
html/helpdata.cpp \ html/helpdata.cpp \
html/helpfrm.cpp \ html/helpfrm.cpp \
@@ -358,6 +360,7 @@ ALL_HEADERS = \
helphtml.h \ helphtml.h \
helpwin.h \ helpwin.h \
icon.h \ icon.h \
iconbndl.h \
imagbmp.h \ imagbmp.h \
image.h \ image.h \
imaggif.h \ imaggif.h \
@@ -592,6 +595,7 @@ ALL_HEADERS = \
unix/fontutil.h \ unix/fontutil.h \
unix/gsockunx.h \ unix/gsockunx.h \
unix/mimetype.h \ unix/mimetype.h \
unix/utilsx11.h \
html/forcelnk.h \ html/forcelnk.h \
html/helpctrl.h \ html/helpctrl.h \
html/helpdata.h \ html/helpdata.h \
@@ -668,6 +672,7 @@ COMMONOBJS = \
hashmap.o \ hashmap.o \
helpbase.o \ helpbase.o \
http.o \ http.o \
iconbndl.o \
imagall.o \ imagall.o \
imagbmp.o \ imagbmp.o \
image.o \ image.o \
@@ -852,7 +857,8 @@ UNIXOBJS = \
mimetype.o \ mimetype.o \
snglinst.o \ snglinst.o \
threadpsx.o \ threadpsx.o \
utilsunx.o utilsunx.o \
utilsx11.o
HTMLOBJS = \ HTMLOBJS = \
helpctrl.o \ helpctrl.o \

View File

@@ -50,6 +50,7 @@
#include <Xm/Xm.h> #include <Xm/Xm.h>
#include <X11/Shell.h> #include <X11/Shell.h>
#include <X11/Core.h>
#if XmVersion >= 1002 #if XmVersion >= 1002
#include <Xm/XmAll.h> #include <Xm/XmAll.h>
#else #else
@@ -73,6 +74,7 @@
#endif #endif
#include "wx/motif/private.h" #include "wx/motif/private.h"
#include "wx/unix/utilsx11.h"
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// private functions // private functions
@@ -627,10 +629,8 @@ void wxFrame::SetTitle(const wxString& title)
NULL); NULL);
} }
void wxFrame::SetIcon(const wxIcon& icon) void wxFrame::DoSetIcon(const wxIcon& icon)
{ {
m_icon = icon;
if (!m_frameShell) if (!m_frameShell)
return; return;
@@ -640,6 +640,23 @@ void wxFrame::SetIcon(const wxIcon& icon)
XtVaSetValues((Widget) m_frameShell, XtNiconPixmap, icon.GetPixmap(), NULL); XtVaSetValues((Widget) m_frameShell, XtNiconPixmap, icon.GetPixmap(), NULL);
} }
void wxFrame::SetIcon(const wxIcon& icon)
{
SetIcons( wxIconBundle( icon ) );
}
void wxFrame::SetIcons(const wxIconBundle& icons)
{
wxFrameBase::SetIcons( icons );
if (!m_frameShell)
return;
DoSetIcon( m_icons.GetIcon( -1 ) );
wxSetIconsX11(GetXDisplay(),
(WXWindow) XtWindow( (Widget) m_frameShell ), icons);
}
void wxFrame::PositionStatusBar() void wxFrame::PositionStatusBar()
{ {
if (!m_frameStatusBar) if (!m_frameStatusBar)

View File

@@ -527,14 +527,20 @@ void wxMDIChildFrame::SetMenuBar(wxMenuBar *menuBar)
// Set icon // Set icon
void wxMDIChildFrame::SetIcon(const wxIcon& icon) void wxMDIChildFrame::SetIcon(const wxIcon& icon)
{ {
m_icon = icon; m_icons = wxIconBundle( icon );
if (m_icon.Ok())
if (icon.Ok())
{ {
// Not appropriate since there are no icons in // Not appropriate since there are no icons in
// a tabbed window // a tabbed window
} }
} }
void wxMDIChildFrame::SetIcons(const wxIconBundle& icons)
{
m_icons = icons;
}
void wxMDIChildFrame::SetTitle(const wxString& title) void wxMDIChildFrame::SetTitle(const wxString& title)
{ {
m_title = title; m_title = title;

View File

@@ -88,6 +88,7 @@ ALL_SOURCES = \
common/hashmap.cpp \ common/hashmap.cpp \
common/helpbase.cpp \ common/helpbase.cpp \
common/http.cpp \ common/http.cpp \
common/iconbndl.cpp \
common/imagall.cpp \ common/imagall.cpp \
common/imagbmp.cpp \ common/imagbmp.cpp \
common/image.cpp \ common/image.cpp \
@@ -389,6 +390,7 @@ ALL_HEADERS = \
helphtml.h \ helphtml.h \
helpwin.h \ helpwin.h \
icon.h \ icon.h \
iconbndl.h \
imagbmp.h \ imagbmp.h \
image.h \ image.h \
imaggif.h \ imaggif.h \
@@ -666,6 +668,7 @@ ALL_HEADERS = \
unix/fontutil.h \ unix/fontutil.h \
unix/gsockunx.h \ unix/gsockunx.h \
unix/mimetype.h \ unix/mimetype.h \
unix/utilsx11.h \
html/forcelnk.h \ html/forcelnk.h \
html/helpctrl.h \ html/helpctrl.h \
html/helpdata.h \ html/helpdata.h \
@@ -742,6 +745,7 @@ COMMONOBJS = \
hashmap.o \ hashmap.o \
helpbase.o \ helpbase.o \
http.o \ http.o \
iconbndl.o \
imagall.o \ imagall.o \
imagbmp.o \ imagbmp.o \
image.o \ image.o \

View File

@@ -602,8 +602,9 @@ bool wxFrame::HandlePaint()
#ifndef __WXMICROWIN__ #ifndef __WXMICROWIN__
if ( m_iconized ) if ( m_iconized )
{ {
HICON hIcon = m_icon.Ok() ? GetHiconOf(m_icon) const wxIcon& icon = GetIcon();
: (HICON)GetDefaultIcon(); HICON hIcon = icon.Ok() ? GetHiconOf(icon)
: (HICON)GetDefaultIcon();
// Hold a pointer to the dc so long as the OnPaint() message // Hold a pointer to the dc so long as the OnPaint() message
// is being processed // is being processed
@@ -837,8 +838,9 @@ long wxFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
case WM_QUERYDRAGICON: case WM_QUERYDRAGICON:
{ {
HICON hIcon = m_icon.Ok() ? GetHiconOf(m_icon) const wxIcon& icon = GetIcon();
: (HICON)GetDefaultIcon(); HICON hIcon = icon.Ok() ? GetHiconOf(icon)
: (HICON)GetDefaultIcon();
rc = (long)hIcon; rc = (long)hIcon;
processed = rc != 0; processed = rc != 0;
} }

View File

@@ -171,6 +171,7 @@ COMMONOBJS = \
$(MSWDIR)\hashmap.obj \ $(MSWDIR)\hashmap.obj \
$(MSWDIR)\helpbase.obj \ $(MSWDIR)\helpbase.obj \
$(MSWDIR)\http.obj \ $(MSWDIR)\http.obj \
$(MSWDIR)\iconbndl.obj \
$(MSWDIR)\imagall.obj \ $(MSWDIR)\imagall.obj \
$(MSWDIR)\imagbmp.obj \ $(MSWDIR)\imagbmp.obj \
$(MSWDIR)\image.obj \ $(MSWDIR)\image.obj \
@@ -763,6 +764,8 @@ $(MSWDIR)\helpbase.obj: $(COMMDIR)\helpbase.$(SRCSUFF)
$(MSWDIR)\http.obj: $(COMMDIR)\http.$(SRCSUFF) $(MSWDIR)\http.obj: $(COMMDIR)\http.$(SRCSUFF)
$(MSWDIR)\iconbndl.obj: $(COMMDIR)\iconbndl.$(SRCSUFF)
$(MSWDIR)\imagall.obj: $(COMMDIR)\imagall.$(SRCSUFF) $(MSWDIR)\imagall.obj: $(COMMDIR)\imagall.$(SRCSUFF)
$(MSWDIR)\imagbmp.obj: $(COMMDIR)\imagbmp.$(SRCSUFF) $(MSWDIR)\imagbmp.obj: $(COMMDIR)\imagbmp.$(SRCSUFF)

View File

@@ -157,6 +157,7 @@ COMMONOBJS = \
$(MSWDIR)\hash.obj \ $(MSWDIR)\hash.obj \
$(MSWDIR)\hashmap.obj \ $(MSWDIR)\hashmap.obj \
$(MSWDIR)\helpbase.obj \ $(MSWDIR)\helpbase.obj \
$(MSWDIR)\iconbndl.obj \
$(MSWDIR)\imagall.obj \ $(MSWDIR)\imagall.obj \
$(MSWDIR)\imagbmp.obj \ $(MSWDIR)\imagbmp.obj \
$(MSWDIR)\image.obj \ $(MSWDIR)\image.obj \
@@ -615,6 +616,8 @@ $(MSWDIR)\hashmap.obj: $(COMMDIR)\hashmap.$(SRCSUFF)
$(MSWDIR)\helpbase.obj: $(COMMDIR)\helpbase.$(SRCSUFF) $(MSWDIR)\helpbase.obj: $(COMMDIR)\helpbase.$(SRCSUFF)
$(MSWDIR)\iconbndl.obj: $(COMMDIR)\iconbndl.$(SRCSUFF)
$(MSWDIR)\imagall.obj: $(COMMDIR)\imagall.$(SRCSUFF) $(MSWDIR)\imagall.obj: $(COMMDIR)\imagall.$(SRCSUFF)
$(MSWDIR)\imagbmp.obj: $(COMMDIR)\imagbmp.$(SRCSUFF) $(MSWDIR)\imagbmp.obj: $(COMMDIR)\imagbmp.$(SRCSUFF)

View File

@@ -142,6 +142,7 @@ COMMONOBJS1 = \
$(COMMDIR)\hash.obj \ $(COMMDIR)\hash.obj \
$(COMMDIR)\hashmap.obj \ $(COMMDIR)\hashmap.obj \
$(COMMDIR)\helpbase.obj \ $(COMMDIR)\helpbase.obj \
$(COMMDIR)\iconbndl.obj \
$(COMMDIR)\imagall.obj \ $(COMMDIR)\imagall.obj \
$(COMMDIR)\imagbmp.obj \ $(COMMDIR)\imagbmp.obj \
$(COMMDIR)\image.obj \ $(COMMDIR)\image.obj \
@@ -1057,6 +1058,11 @@ $(COMMDIR)/helpbase.obj: $*.$(SRCSUFF)
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF) $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
<< <<
$(COMMDIR)/iconbndl.obj: $*.$(SRCSUFF)
cl @<<
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)
<<
$(COMMDIR)/imagall.obj: $*.$(SRCSUFF) $(COMMDIR)/imagall.obj: $*.$(SRCSUFF)
cl @<< cl @<<
$(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF) $(CPPFLAGS) /Fo$@ /c /Tp $*.$(SRCSUFF)

View File

@@ -210,6 +210,7 @@ COMMONOBJS = \
$(COMMDIR)/geometry.$(OBJSUFF) \ $(COMMDIR)/geometry.$(OBJSUFF) \
$(COMMDIR)/gifdecod.$(OBJSUFF) \ $(COMMDIR)/gifdecod.$(OBJSUFF) \
$(COMMDIR)/helpbase.$(OBJSUFF) \ $(COMMDIR)/helpbase.$(OBJSUFF) \
$(COMMDIR)/iconbndl.$(OBJSUFF) \
$(COMMDIR)/imagall.$(OBJSUFF) \ $(COMMDIR)/imagall.$(OBJSUFF) \
$(COMMDIR)/imagbmp.$(OBJSUFF) \ $(COMMDIR)/imagbmp.$(OBJSUFF) \
$(COMMDIR)/image.$(OBJSUFF) \ $(COMMDIR)/image.$(OBJSUFF) \

View File

@@ -115,6 +115,7 @@ COMMONOBJS = \
$(COMMDIR)\hashmap.obj \ $(COMMDIR)\hashmap.obj \
$(COMMDIR)\helpbase.obj \ $(COMMDIR)\helpbase.obj \
$(COMMDIR)\http.obj \ $(COMMDIR)\http.obj \
$(COMMDIR)\iconbndl.obj \
$(COMMDIR)\imagall.obj \ $(COMMDIR)\imagall.obj \
$(COMMDIR)\imagbmp.obj \ $(COMMDIR)\imagbmp.obj \
$(COMMDIR)\image.obj \ $(COMMDIR)\image.obj \

View File

@@ -191,6 +191,7 @@ COMMONOBJS = \
$(COMMDIR)\$D\hashmap.obj \ $(COMMDIR)\$D\hashmap.obj \
$(COMMDIR)\$D\helpbase.obj \ $(COMMDIR)\$D\helpbase.obj \
$(COMMDIR)\$D\http.obj \ $(COMMDIR)\$D\http.obj \
$(COMMDIR)\$D\iconbndl.obj \
$(COMMDIR)\$D\imagall.obj \ $(COMMDIR)\$D\imagall.obj \
$(COMMDIR)\$D\imagbmp.obj \ $(COMMDIR)\$D\imagbmp.obj \
$(COMMDIR)\$D\image.obj \ $(COMMDIR)\$D\image.obj \

View File

@@ -153,6 +153,7 @@ COMMONOBJS = &
hashmap.obj & hashmap.obj &
helpbase.obj & helpbase.obj &
http.obj & http.obj &
iconbndl.obj &
imagall.obj & imagall.obj &
imagbmp.obj & imagbmp.obj &
image.obj & image.obj &
@@ -903,6 +904,9 @@ helpbase.obj: $(COMMDIR)\helpbase.cpp
http.obj: $(COMMDIR)\http.cpp http.obj: $(COMMDIR)\http.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $< *$(CCC) $(CPPFLAGS) $(IFLAGS) $<
iconbndl.obj: $(COMMDIR)\iconbndl.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $<
imagall.obj: $(COMMDIR)\imagall.cpp imagall.obj: $(COMMDIR)\imagall.cpp
*$(CCC) $(CPPFLAGS) $(IFLAGS) $< *$(CCC) $(CPPFLAGS) $(IFLAGS) $<

View File

@@ -584,14 +584,26 @@ bool wxTopLevelWindowMSW::ShowFullScreen(bool show, long style)
void wxTopLevelWindowMSW::SetIcon(const wxIcon& icon) void wxTopLevelWindowMSW::SetIcon(const wxIcon& icon)
{ {
// this sets m_icon SetIcons( wxIconBundle( icon ) );
wxTopLevelWindowBase::SetIcon(icon); }
void wxTopLevelWindowMSW::SetIcons(const wxIconBundle& icons)
{
wxTopLevelWindowBase::SetIcons(icons);
#if defined(__WIN95__) && !defined(__WXMICROWIN__) #if defined(__WIN95__) && !defined(__WXMICROWIN__)
if ( m_icon.Ok() ) const wxIcon& sml = icons.GetIcon( wxSize( 16, 16 ) );
if( sml.Ok() && sml.GetWidth() == 16 && sml.GetHeight() == 16 )
{ {
::SendMessage(GetHwnd(), WM_SETICON, ::SendMessage( GetHwndOf( this ), WM_SETICON, ICON_SMALL,
(WPARAM)TRUE, (LPARAM)GetHiconOf(m_icon)); (LPARAM)GetHiconOf(sml) );
}
const wxIcon& big = icons.GetIcon( wxSize( 32, 32 ) );
if( big.Ok() && big.GetWidth() == 32 && big.GetHeight() == 32 )
{
::SendMessage( GetHwndOf( this ), WM_SETICON, ICON_BIG,
(LPARAM)GetHiconOf(big) );
} }
#endif // __WIN95__ #endif // __WIN95__
} }

View File

@@ -109,7 +109,8 @@ static FileInfoMap s_fileInfo(25);
// Other initialization. // Other initialization.
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#if wxUSE_GUI #if wxUSE_GUI
WX_DEFINE_OBJARRAY(wxIconArray); // already in wx/iconbndl.h
// WX_DEFINE_OBJARRAY(wxIconArray);
#endif #endif
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

View File

@@ -97,6 +97,7 @@ ALL_SOURCES = \
common/hashmap.cpp \ common/hashmap.cpp \
common/helpbase.cpp \ common/helpbase.cpp \
common/http.cpp \ common/http.cpp \
common/iconbndl.cpp \
common/imagall.cpp \ common/imagall.cpp \
common/imagbmp.cpp \ common/imagbmp.cpp \
common/image.cpp \ common/image.cpp \
@@ -368,6 +369,7 @@ ALL_HEADERS = \
helphtml.h \ helphtml.h \
helpwin.h \ helpwin.h \
icon.h \ icon.h \
iconbndl.h \
imagbmp.h \ imagbmp.h \
image.h \ image.h \
imaggif.h \ imaggif.h \
@@ -688,6 +690,7 @@ COMMONOBJS = \
hashmap.o \ hashmap.o \
helpbase.o \ helpbase.o \
http.o \ http.o \
iconbndl.o \
imagall.o \ imagall.o \
imagbmp.o \ imagbmp.o \
image.o \ image.o \

View File

@@ -296,13 +296,14 @@ int wxTopLevelWindow::GetMinHeight() const
// icons // icons
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void wxTopLevelWindow::SetIcon(const wxIcon& icon) void wxTopLevelWindow::SetIcons(const wxIconBundle& icons)
{ {
wxTopLevelWindowNative::SetIcon(icon); wxTopLevelWindowNative::SetIcons(icons);
if ( ms_drawDecorations && m_renderer ) if ( ms_drawDecorations && m_renderer )
{ {
wxSize size = m_renderer->GetFrameIconSize(); wxSize size = m_renderer->GetFrameIconSize();
const wxIcon& icon = icons.GetIcon( size );
if ( !icon.Ok() || size.x == -1 ) if ( !icon.Ok() || size.x == -1 )
m_titlebarIcon = icon; m_titlebarIcon = icon;

89
src/unix/utilsx11.cpp Normal file
View File

@@ -0,0 +1,89 @@
/////////////////////////////////////////////////////////////////////////////
// Name: src/unix/utilsx11.cpp
// Purpose: Miscellaneous X11 functions
// Author: Mattia Barbon
// Modified by:
// Created: 25.03.02
// RCS-ID: $Id$
// Copyright: (c) wxWindows team
// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
#if defined(__WXX11__) || defined(__WXGTK__) || defined(__WXMOTIF__)
#include "wx/unix/utilsx11.h"
#include "wx/iconbndl.h"
#include "wx/image.h"
#include "wx/icon.h"
#include <X11/Xlib.h>
#include <X11/Xatom.h>
void wxSetIconsX11( WXDisplay* display, WXWindow window,
const wxIconBundle& ib )
{
size_t size = 0;
size_t i, max = ib.m_icons.GetCount();
for( i = 0; i < max; ++i )
size += 2 + ib.m_icons[i].GetWidth() * ib.m_icons[i].GetHeight();
Atom net_wm_icon = XInternAtom( (Display*)display, "_NET_WM_ICON", 0 );
if( size > 0 )
{
wxUint32* data = new wxUint32[size];
wxUint32* ptr = data;
for( i = 0; i < max; ++i )
{
const wxImage image = ib.m_icons[i].ConvertToImage();
int width = image.GetWidth(), height = image.GetHeight();
unsigned char* imageData = image.GetData();
unsigned char* imageDataEnd = imageData + ( width * height * 3 );
bool hasMask = image.HasMask();
unsigned char rMask, gMask, bMask;
unsigned char r, g, b, a;
if( hasMask )
{
rMask = image.GetMaskRed();
gMask = image.GetMaskGreen();
bMask = image.GetMaskBlue();
}
*ptr++ = width;
*ptr++ = height;
while( imageData < imageDataEnd ) {
r = imageData[0];
g = imageData[1];
b = imageData[2];
if( hasMask && r == rMask && g == gMask && b == bMask )
a = 0;
else
a = 255;
*ptr++ = ( a << 24 ) | ( r << 16 ) | ( g << 8 ) | b;
imageData += 3;
}
}
XChangeProperty( (Display*)display,
(Window)window,
net_wm_icon,
XA_CARDINAL, 32,
PropModeReplace,
(unsigned char*)data, size );
delete[] data;
}
else
{
XDeleteProperty( (Display*)display,
(Window)window,
net_wm_icon );
}
}
#endif

View File

@@ -309,6 +309,10 @@ SOURCE=.\common\http.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\common\iconbndl.cpp
# End Source File
# Begin Source File
SOURCE=.\common\imagall.cpp SOURCE=.\common\imagall.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
@@ -1626,6 +1630,10 @@ SOURCE=..\include\wx\icon.h
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\include\wx\iconbndl.h
# End Source File
# Begin Source File
SOURCE=..\include\wx\imagbmp.h SOURCE=..\include\wx\imagbmp.h
# End Source File # End Source File
# Begin Source File # Begin Source File

View File

@@ -468,6 +468,10 @@ SOURCE=.\common\http.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\common\iconbndl.cpp
# End Source File
# Begin Source File
SOURCE=.\common\imagall.cpp SOURCE=.\common\imagall.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
@@ -1906,6 +1910,10 @@ SOURCE=..\include\wx\icon.h
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\include\wx\iconbndl.h
# End Source File
# Begin Source File
SOURCE=..\include\wx\imagbmp.h SOURCE=..\include\wx\imagbmp.h
# End Source File # End Source File
# Begin Source File # Begin Source File

View File

@@ -1,4 +1,4 @@
Microsoft Developer Studio Workspace File, Format Version 6.00 Microsoft Developer Studio Workspace File, Format Version 5.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
############################################################################### ###############################################################################
@@ -59,21 +59,6 @@ Package=<5>
Package=<4> Package=<4>
{{{ {{{
Begin Project Dependency
Project_Dep_Name jpeg
End Project Dependency
Begin Project Dependency
Project_Dep_Name png
End Project Dependency
Begin Project Dependency
Project_Dep_Name regex
End Project Dependency
Begin Project Dependency
Project_Dep_Name tiff
End Project Dependency
Begin Project Dependency
Project_Dep_Name zlib
End Project Dependency
}}} }}}
############################################################################### ###############################################################################

View File

@@ -135,6 +135,7 @@ ALL_SOURCES = \
common/hashmap.cpp \ common/hashmap.cpp \
common/helpbase.cpp \ common/helpbase.cpp \
common/http.cpp \ common/http.cpp \
common/iconbndl.cpp \
common/imagall.cpp \ common/imagall.cpp \
common/imagbmp.cpp \ common/imagbmp.cpp \
common/image.cpp \ common/image.cpp \
@@ -214,6 +215,7 @@ ALL_SOURCES = \
unix/snglinst.cpp \ unix/snglinst.cpp \
unix/threadpsx.cpp \ unix/threadpsx.cpp \
unix/utilsunx.cpp \ unix/utilsunx.cpp \
unix/utilsx11.cpp \
html/helpctrl.cpp \ html/helpctrl.cpp \
html/helpdata.cpp \ html/helpdata.cpp \
html/helpfrm.cpp \ html/helpfrm.cpp \
@@ -337,6 +339,7 @@ ALL_HEADERS = \
helphtml.h \ helphtml.h \
helpwin.h \ helpwin.h \
icon.h \ icon.h \
iconbndl.h \
imagbmp.h \ imagbmp.h \
image.h \ image.h \
imaggif.h \ imaggif.h \
@@ -583,6 +586,7 @@ ALL_HEADERS = \
unix/fontutil.h \ unix/fontutil.h \
unix/gsockunx.h \ unix/gsockunx.h \
unix/mimetype.h \ unix/mimetype.h \
unix/utilsx11.h \
html/forcelnk.h \ html/forcelnk.h \
html/helpctrl.h \ html/helpctrl.h \
html/helpdata.h \ html/helpdata.h \
@@ -693,6 +697,7 @@ COMMONOBJS = \
hashmap.o \ hashmap.o \
helpbase.o \ helpbase.o \
http.o \ http.o \
iconbndl.o \
imagall.o \ imagall.o \
imagbmp.o \ imagbmp.o \
image.o \ image.o \
@@ -821,7 +826,8 @@ UNIXOBJS = \
mimetype.o \ mimetype.o \
snglinst.o \ snglinst.o \
threadpsx.o \ threadpsx.o \
utilsunx.o utilsunx.o \
utilsx11.o
HTMLOBJS = \ HTMLOBJS = \
helpctrl.o \ helpctrl.o \

View File

@@ -43,6 +43,8 @@
#include "wx/x11/private.h" #include "wx/x11/private.h"
#include "X11/Xutil.h" #include "X11/Xutil.h"
#include "wx/unix/utilsx11.h"
bool wxMWMIsRunning(Window w); bool wxMWMIsRunning(Window w);
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -393,11 +395,8 @@ bool wxTopLevelWindowX11::ShowFullScreen(bool show, long style)
// wxTopLevelWindowX11 misc // wxTopLevelWindowX11 misc
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void wxTopLevelWindowX11::SetIcon(const wxIcon& icon) void wxTopLevelWindowX11::DoSetIcon(const wxIcon& icon)
{ {
// this sets m_icon
wxTopLevelWindowBase::SetIcon(icon);
if (icon.Ok() && GetMainWindow()) if (icon.Ok() && GetMainWindow())
{ {
#if wxUSE_NANOX #if wxUSE_NANOX
@@ -419,6 +418,15 @@ void wxTopLevelWindowX11::SetIcon(const wxIcon& icon)
} }
} }
void wxTopLevelWindowX11::SetIcons(const wxIconBundle& icons )
{
// this sets m_icon
wxTopLevelWindowBase::SetIcons( icons );
DoSetIcon( icons.GetIcon( -1 ) );
wxSetIconsX11( GetXDisplay(), GetXWindow(), icons );
}
void wxTopLevelWindowX11::SetTitle(const wxString& title) void wxTopLevelWindowX11::SetTitle(const wxString& title)
{ {
m_title = title; m_title = title;