wxCocoa: Better icon support

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25400 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Elliott 2004-01-27 06:01:34 +00:00
parent 58203fa6b8
commit b5df4fc722
6 changed files with 215 additions and 114 deletions

View File

@ -145,7 +145,7 @@ WXJPEG_OBJECTS = \
wxjpeg_jquant1.o \
wxjpeg_jquant2.o \
wxjpeg_jdmerge.o
WXTIFF_CFLAGS = $(CPPFLAGS) $(CFLAGS)
WXTIFF_CFLAGS = $(__INC_ZLIB_p) $(__INC_JPEG_p) $(CPPFLAGS) $(CFLAGS)
WXTIFF_OBJECTS = \
$(__TIFF_PLATFORM_SRC_OBJECTS) \
wxtiff_tif_aux.o \
@ -1149,6 +1149,7 @@ COND_TOOLKIT_X11_LOWLEVEL_HDR = \
wx/x11/window.h
@COND_TOOLKIT_X11@LOWLEVEL_HDR = $(COND_TOOLKIT_X11_LOWLEVEL_HDR)
COND_TOOLKIT_COCOA_GUI_HDR = \
wx/cocoa/NSApplication.h \
wx/cocoa/NSBox.h \
wx/cocoa/NSButton.h \
wx/cocoa/NSControl.h \
@ -1195,6 +1196,7 @@ COND_TOOLKIT_COCOA_GUI_HDR = \
wx/cocoa/radiobox.h \
wx/cocoa/radiobut.h \
wx/cocoa/region.h \
wx/cocoa/slider.h \
wx/cocoa/spinbutt.h \
wx/cocoa/statbmp.h \
wx/cocoa/statbox.h \
@ -1205,6 +1207,7 @@ COND_TOOLKIT_COCOA_GUI_HDR = \
wx/cocoa/toplevel.h \
wx/cocoa/window.h \
wx/generic/caret.h \
wx/generic/dirdlgg.h \
wx/generic/fdrepdlg.h \
wx/generic/fontdlgg.h \
wx/generic/imaglist.h \
@ -8163,7 +8166,7 @@ monodll_xtixml.o: $(srcdir)/src/common/xtixml.cpp $(MONODLL_ODEP)
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@monodll_icon.o: $(srcdir)/src/mac/icon.cpp $(MONODLL_ODEP)
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@monodll_icon.o: $(srcdir)/src/cocoa/icon.cpp $(MONODLL_ODEP)
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@monodll_icon.o: $(srcdir)/src/cocoa/icon.mm $(MONODLL_ODEP)
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $<
@COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@monodll_icon.o: $(srcdir)/src/os2/icon.cpp $(MONODLL_ODEP)
@ -10767,7 +10770,7 @@ monolib_xtixml.o: $(srcdir)/src/common/xtixml.cpp $(MONOLIB_ODEP)
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@monolib_icon.o: $(srcdir)/src/mac/icon.cpp $(MONOLIB_ODEP)
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@monolib_icon.o: $(srcdir)/src/cocoa/icon.cpp $(MONOLIB_ODEP)
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@monolib_icon.o: $(srcdir)/src/cocoa/icon.mm $(MONOLIB_ODEP)
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $<
@COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@monolib_icon.o: $(srcdir)/src/os2/icon.cpp $(MONOLIB_ODEP)
@ -13635,7 +13638,7 @@ coredll_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(COREDLL_ODEP)
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@coredll_icon.o: $(srcdir)/src/mac/icon.cpp $(COREDLL_ODEP)
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $<
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@coredll_icon.o: $(srcdir)/src/cocoa/icon.cpp $(COREDLL_ODEP)
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@coredll_icon.o: $(srcdir)/src/cocoa/icon.mm $(COREDLL_ODEP)
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $<
@COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@coredll_icon.o: $(srcdir)/src/os2/icon.cpp $(COREDLL_ODEP)
@ -15744,7 +15747,7 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP)
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@corelib_icon.o: $(srcdir)/src/mac/icon.cpp $(CORELIB_ODEP)
@COND_TOOLKIT_MAC_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $<
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@corelib_icon.o: $(srcdir)/src/cocoa/icon.cpp $(CORELIB_ODEP)
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@corelib_icon.o: $(srcdir)/src/cocoa/icon.mm $(CORELIB_ODEP)
@COND_TOOLKIT_COCOA_USE_GUI_1_WXUNIV_0@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $<
@COND_TOOLKIT_PM_USE_GUI_1_WXUNIV_0@corelib_icon.o: $(srcdir)/src/os2/icon.cpp $(CORELIB_ODEP)

View File

@ -1736,7 +1736,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/cocoa/frame.mm
src/cocoa/gauge.mm
src/cocoa/gdiobj.cpp
src/cocoa/icon.cpp
src/cocoa/icon.mm
src/cocoa/listbox.mm
src/cocoa/main.cpp
src/cocoa/mbarman.mm

View File

@ -86,6 +86,9 @@ public:
// Convert from wxImage:
wxBitmap(const wxImage& image, int depth = -1)
{ CreateFromImage(image, depth); }
// Convert from wxIcon
wxBitmap(const wxIcon& icon) { CopyFromIcon(icon); }
// destructor
~wxBitmap();

View File

@ -1,62 +1,66 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/cocoa/icon.h
// Purpose: wxIcon class
// Author: AUTHOR
// Author: David Elliott
// Modified by:
// Created: ??/??/98
// Created: 2003/08/11
// RCS-ID: $Id$
// Copyright: (c) AUTHOR
// Copyright: (c) 2003 David Elliott
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_ICON_H_
#define _WX_ICON_H_
#ifndef _WX_COCOA_ICON_H__
#define _WX_COCOA_ICON_H__
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma interface "icon.h"
#endif
#include "wx/gdicmn.h"
#include "wx/gdiobj.h"
#include "wx/bitmap.h"
// Icon
class WXDLLEXPORT wxIcon: public wxBitmap
// ========================================================================
// wxIcon
// ========================================================================
class WXDLLEXPORT wxIcon: public wxGDIObject
{
DECLARE_DYNAMIC_CLASS(wxIcon)
DECLARE_DYNAMIC_CLASS(wxIcon)
public:
wxIcon();
wxIcon();
// Copy constructors
wxIcon(const wxIcon& icon)
: wxBitmap()
{ Ref(icon); }
// Copy constructors
wxIcon(const wxIcon& icon)
{ Ref(icon); }
wxIcon(const char **data);
wxIcon(char **data);
wxIcon(const char bits[], int width , int height );
wxIcon(const wxString& name, int flags = wxBITMAP_TYPE_ICON_RESOURCE,
int desiredWidth = -1, int desiredHeight = -1);
wxIcon(const wxIconLocation& loc)
{
LoadFile(loc.GetFileName(), wxBITMAP_TYPE_ICON);
}
~wxIcon();
wxIcon(const char **data) { CreateFromXpm(data); }
wxIcon(char **data) { CreateFromXpm((const char**)data); }
wxIcon(const char bits[], int width , int height );
wxIcon(const wxString& name, int flags = wxBITMAP_TYPE_ICON_RESOURCE,
int desiredWidth = -1, int desiredHeight = -1);
wxIcon(const wxIconLocation& loc)
{
LoadFile(loc.GetFileName(), wxBITMAP_TYPE_ICON);
}
~wxIcon();
bool LoadFile(const wxString& name, wxBitmapType flags /* = wxBITMAP_TYPE_ICON_RESOURCE */ ,
int desiredWidth /* = -1 */ , int desiredHeight = -1);
bool LoadFile(const wxString& name ,wxBitmapType flags = wxBITMAP_TYPE_ICON_RESOURCE )
{ return LoadFile( name , flags , -1 , -1 ) ; }
bool LoadFile(const wxString& name, wxBitmapType flags /* = wxBITMAP_TYPE_ICON_RESOURCE */ ,
int desiredWidth /* = -1 */ , int desiredHeight = -1);
bool LoadFile(const wxString& name, wxBitmapType flags = wxBITMAP_TYPE_ICON_RESOURCE )
{ return LoadFile( name , flags , -1 , -1 ) ; }
wxIcon& operator=(const wxIcon& icon)
{ if (this != &icon) Ref(icon); return *this; }
bool operator==(const wxIcon& icon) const { return m_refData == icon.m_refData; }
bool operator!=(const wxIcon& icon) const { return !(*this == icon); }
wxIcon& operator=(const wxIcon& icon)
{ if (this != &icon) Ref(icon); return *this; }
bool operator==(const wxIcon& icon) const
{ return m_refData == icon.m_refData; }
bool operator!=(const wxIcon& icon) const { return !(*this == icon); }
// create from bitmap (which should have a mask unless it's monochrome):
// there shouldn't be any implicit bitmap -> icon conversion (i.e. no
// ctors, assignment operators...), but it's ok to have such function
void CopyFromBitmap(const wxBitmap& bmp);
// create from bitmap (which should have a mask unless it's monochrome):
// there shouldn't be any implicit bitmap -> icon conversion (i.e. no
// ctors, assignment operators...), but it's ok to have such function
void CopyFromBitmap(const wxBitmap& bmp);
bool Ok() const;
int GetWidth() const;
int GetHeight() const;
WX_NSImage GetNSImage() const;
bool CreateFromXpm(const char **bits);
};
#endif
// _WX_ICON_H_
#endif // _WX_COCOA_ICON_H__

View File

@ -1,65 +0,0 @@
/////////////////////////////////////////////////////////////////////////////
// Name: icon.cpp
// Purpose: wxIcon class
// Author: AUTHOR
// Modified by:
// Created: ??/??/98
// RCS-ID: $Id$
// Copyright: (c) AUTHOR
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation "icon.h"
#endif
#include "wx/icon.h"
#if !USE_SHARED_LIBRARIES
IMPLEMENT_DYNAMIC_CLASS(wxIcon, wxBitmap)
#endif
/*
* Icons
*/
wxIcon::wxIcon()
{
}
wxIcon::wxIcon(const char **xpm)
{
}
wxIcon::wxIcon(char **xpm)
{
}
wxIcon::wxIcon(const char WXUNUSED(bits)[], int WXUNUSED(width), int WXUNUSED(height))
{
}
wxIcon::wxIcon(const wxString& icon_file, int flags,
int desiredWidth, int desiredHeight)
{
LoadFile(icon_file, (wxBitmapType)flags, desiredWidth, desiredHeight);
}
wxIcon::~wxIcon()
{
}
bool wxIcon::LoadFile(const wxString& filename, wxBitmapType type,
int desiredWidth, int desiredHeight)
{
UnRef();
return FALSE;
}
void wxIcon::CopyFromBitmap(const wxBitmap& icno)
{
}

156
src/cocoa/icon.mm Normal file
View File

@ -0,0 +1,156 @@
/////////////////////////////////////////////////////////////////////////////
// Name: src/cocoa/icon.mm
// Purpose: wxIcon class
// Author: David Elliott
// Modified by:
// Created: 2003/08/11
// RCS-ID: $Id$
// Copyright: (c) 2003 David Elliott
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include "wx/icon.h"
#endif //WX_PRECOMP
#include "wx/bitmap.h"
#import <AppKit/NSImage.h>
// ========================================================================
// wxIconRefData
// ========================================================================
class wxIconRefData: public wxGDIRefData
{
friend class wxIcon;
public:
wxIconRefData();
wxIconRefData( const wxIconRefData& data );
virtual ~wxIconRefData();
protected:
int m_width;
int m_height;
int m_depth;
bool m_ok;
int m_numColors;
int m_quality;
WX_NSImage m_cocoaNSImage;
};
#define M_ICONDATA ((wxIconRefData *)m_refData)
wxIconRefData::wxIconRefData()
{
m_ok = FALSE;
m_width = 0;
m_height = 0;
m_depth = 0;
m_quality = 0;
m_numColors = 0;
m_cocoaNSImage = nil;
}
wxIconRefData::wxIconRefData( const wxIconRefData& data)
{
m_width = data.m_width;
m_height = data.m_height;
m_depth = data.m_depth;
m_ok = data.m_ok;
m_numColors = data.m_numColors;
m_quality = data.m_quality;
m_cocoaNSImage = [data.m_cocoaNSImage copyWithZone:nil];
}
wxIconRefData::~wxIconRefData()
{
[m_cocoaNSImage release];
m_cocoaNSImage = NULL;
}
// ========================================================================
// wxIcon
// ========================================================================
IMPLEMENT_DYNAMIC_CLASS(wxIcon, wxGDIObject)
wxIcon::wxIcon()
{
}
wxIcon::wxIcon(const char WXUNUSED(bits)[], int WXUNUSED(width), int WXUNUSED(height))
{
}
wxIcon::wxIcon(const wxString& icon_file, int flags,
int desiredWidth, int desiredHeight)
{
LoadFile(icon_file, (wxBitmapType)flags, desiredWidth, desiredHeight);
}
wxIcon::~wxIcon()
{
}
bool wxIcon::CreateFromXpm(const char **xpm)
{
wxBitmap bitmap(xpm);
CopyFromBitmap(bitmap);
return Ok();
}
bool wxIcon::LoadFile(const wxString& filename, wxBitmapType type,
int desiredWidth, int desiredHeight)
{
UnRef();
m_refData = new wxIconRefData;
M_ICONDATA->m_width = 5;
M_ICONDATA->m_height = 5;
M_ICONDATA->m_cocoaNSImage = [[NSImage alloc] initWithSize:NSMakeSize(5,5)];
M_ICONDATA->m_ok = true;
M_ICONDATA->m_numColors = 0;
M_ICONDATA->m_quality = 0;
return FALSE;
}
void wxIcon::CopyFromBitmap(const wxBitmap& bitmap)
{
UnRef();
m_refData = new wxIconRefData;
M_ICONDATA->m_width = bitmap.GetWidth();
M_ICONDATA->m_height = bitmap.GetHeight();
M_ICONDATA->m_cocoaNSImage = bitmap.GetNSImage(true);
M_ICONDATA->m_ok = bitmap.Ok();
M_ICONDATA->m_numColors = 0;
M_ICONDATA->m_quality = 0;
}
bool wxIcon::Ok() const
{
return m_refData && M_ICONDATA->m_ok;
}
int wxIcon::GetWidth() const
{
if(!m_refData)
return 0;
return M_ICONDATA->m_width;
}
int wxIcon::GetHeight() const
{
if(!m_refData)
return 0;
return M_ICONDATA->m_height;
}
WX_NSImage wxIcon::GetNSImage() const
{
if(!M_ICONDATA)
return nil;
return M_ICONDATA->m_cocoaNSImage;
}