]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/msw/icon.h
added MSWPrintChild() for drawing child background (replaces patch 1108389)
[wxWidgets.git] / include / wx / msw / icon.h
index e3316782288107e3678b8af493f6726730c0ba59..f7e3f41ad1a97820e4917d83eaa9d6894166dbdd 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        icon.h
+// Name:        wx/msw/icon.h
 // Purpose:     wxIcon class
 // Author:      Julian Smart
 // Modified by:
 #ifndef _WX_ICON_H_
 #define _WX_ICON_H_
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
     #pragma interface "icon.h"
 #endif
 
-#include "wx/bitmap.h"
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+#include "wx/msw/gdiimage.h"
 
 // ---------------------------------------------------------------------------
 // icon data
 // ---------------------------------------------------------------------------
-class WXDLLEXPORT wxIconRefData: public wxBitmapRefData
-{
-    friend class WXDLLEXPORT wxBitmap;
-    friend class WXDLLEXPORT wxIcon;
 
+// notice that although wxIconRefData inherits from wxBitmapRefData, it is not
+// a valid wxBitmapRefData
+class WXDLLEXPORT wxIconRefData : public wxGDIImageRefData
+{
 public:
-    wxIconRefData();
-    ~wxIconRefData();
+    wxIconRefData() { }
+    virtual ~wxIconRefData() { Free(); }
 
-public:
-    WXHICON m_hIcon;
+    virtual void Free();
 };
 
-#define M_ICONDATA ((wxIconRefData *)m_refData)
-#define M_ICONHANDLERDATA ((wxIconRefData *)bitmap->GetRefData())
-
 // ---------------------------------------------------------------------------
 // Icon
 // ---------------------------------------------------------------------------
-class WXDLLEXPORT wxIcon : public wxBitmap
-{
-    DECLARE_DYNAMIC_CLASS(wxIcon)
 
+class WXDLLEXPORT wxIcon : public wxGDIImage
+{
 public:
-    wxIcon();
+    // ctors
+        // default
+    wxIcon() { }
 
-    // Copy constructors
-    wxIcon(const wxIcon& icon) { Ref(icon); }
+        // copy
+    wxIcon(const wxIcon& icon) : wxGDIImage(icon) { Ref(icon); }
 
+        // from raw data
     wxIcon(const char bits[], int width, int height);
-    wxIcon(const wxString& name, long flags = wxBITMAP_TYPE_ICO_RESOURCE,
+
+        // from XPM data
+    wxIcon(const char **data) { CreateIconFromXpm(data); }
+
+    wxIcon(char **data) { CreateIconFromXpm((const char **)data); }
+
+        // from resource/file
+    wxIcon(const wxString& name,
+           long type = wxBITMAP_TYPE_ICO_RESOURCE,
            int desiredWidth = -1, int desiredHeight = -1);
-    ~wxIcon();
 
-    bool LoadFile(const wxString& name, long flags = wxBITMAP_TYPE_ICO_RESOURCE,
-                  int desiredWidth = -1, int desiredHeight = -1);
+    wxIcon(const wxIconLocation& loc);
+
+    virtual ~wxIcon();
+
+    virtual bool LoadFile(const wxString& name,
+                          long type = wxBITMAP_TYPE_ICO_RESOURCE,
+                          int desiredWidth = -1, int desiredHeight = -1);
 
     wxIcon& operator = (const wxIcon& icon)
-        { if (*this == icon) return (*this); Ref(icon); return *this; }
+        { 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 m_refData != icon.m_refData; }
 
-    void SetHICON(WXHICON ico);
-    WXHICON GetHICON() const { return (M_ICONDATA ? M_ICONDATA->m_hIcon : 0); }
+    // implementation only from now on
+    wxIconRefData *GetIconData() const { return (wxIconRefData *)m_refData; }
 
-    bool Ok() const { return (m_refData != NULL && M_ICONDATA->m_hIcon != 0) ; }
+    void SetHICON(WXHICON icon) { SetHandle((WXHANDLE)icon); }
+    WXHICON GetHICON() const { return (WXHICON)GetHandle(); }
 
-    bool FreeResource(bool force = FALSE);
-};
-
-// TODO: Put these in separate, private header
-
-class WXDLLEXPORT wxICOFileHandler: public wxBitmapHandler
-{
-DECLARE_DYNAMIC_CLASS(wxICOFileHandler)
+    // 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);
 
-public:
-    wxICOFileHandler()
+protected:
+    virtual wxGDIImageRefData *CreateData() const
     {
-        m_name = "ICO icon file";
-        m_extension = "ico";
-        m_type = wxBITMAP_TYPE_ICO;
-    };
-
-    virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags,
-                          int desiredWidth = -1, int desiredHeight = -1);
-};
+        return new wxIconRefData;
+    }
 
-class WXDLLEXPORT wxICOResourceHandler: public wxBitmapHandler
-{
-DECLARE_DYNAMIC_CLASS(wxICOResourceHandler)
+    virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const;
 
-public:
-    wxICOResourceHandler()
-    {
-        m_name = "ICO resource";
-        m_extension = "ico";
-        m_type = wxBITMAP_TYPE_ICO_RESOURCE;
-    };
-
-    virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags,
-                          int desiredWidth = -1, int desiredHeight = -1);
+    // create from XPM data
+    void CreateIconFromXpm(const char **data);
 
+private:
+    DECLARE_DYNAMIC_CLASS(wxIcon)
 };
 
 #endif