projects
/
wxWidgets.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added wxTopLevelWindow::SetTranslucency and CanSetTranslucency, with
[wxWidgets.git]
/
src
/
msw
/
gdiimage.cpp
diff --git
a/src/msw/gdiimage.cpp
b/src/msw/gdiimage.cpp
index 4c459c5929ed14f08eed8f33859ac550b8ff85ff..df4910d8ccb331b50226b35b2448b5200866f5b4 100644
(file)
--- a/
src/msw/gdiimage.cpp
+++ b/
src/msw/gdiimage.cpp
@@
-1,12
+1,12
@@
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
-// Name: msw/gdiimage.cpp
+// Name:
src/
msw/gdiimage.cpp
// Purpose: wxGDIImage implementation
// Author: Vadim Zeitlin
// Modified by:
// Created: 20.11.99
// RCS-ID: $Id$
// Copyright: (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// Purpose: wxGDIImage implementation
// Author: Vadim Zeitlin
// Modified by:
// Created: 20.11.99
// RCS-ID: $Id$
// Copyright: (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// Licence: wxWindows licen
s
e
+// Licence: wxWindows licen
c
e
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
@@
-17,10
+17,6
@@
// headers
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
- #pragma implementation "gdiimage.h"
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
@@
-31,23
+27,27
@@
#ifndef WX_PRECOMP
#include "wx/string.h"
#include "wx/log.h"
#ifndef WX_PRECOMP
#include "wx/string.h"
#include "wx/log.h"
+ #include "wx/app.h"
+ #include "wx/bitmap.h"
#endif // WX_PRECOMP
#include "wx/msw/private.h"
#endif // WX_PRECOMP
#include "wx/msw/private.h"
-#include "wx/
app
.h"
+#include "wx/
msw/gdiimage
.h"
-#if
ndef __WXMICROWIN__
+#if
wxUSE_WXDIB
#include "wx/msw/dib.h"
#endif
#include "wx/msw/dib.h"
#endif
-#include "wx/msw/bitmap.h"
-#include "wx/msw/gdiimage.h"
-#include "wx/bitmap.h"
+#ifdef __WXWINCE__
+#include <winreg.h>
+#include <shellapi.h>
+#endif
+
+#include "wx/file.h"
-#ifdef __WIN16__
-# include "wx/msw/curico.h"
-#endif // __WIN16__
+#include "wx/listimpl.cpp"
+WX_DEFINE_LIST(wxGDIImageHandlerList)
// ----------------------------------------------------------------------------
// private classes
// ----------------------------------------------------------------------------
// private classes
@@
-110,14
+110,14
@@
public:
int WXUNUSED(height),
int WXUNUSED(depth) = 1)
{
int WXUNUSED(height),
int WXUNUSED(depth) = 1)
{
- return
FALSE
;
+ return
false
;
}
virtual bool Save(wxGDIImage *WXUNUSED(image),
const wxString& WXUNUSED(name),
int WXUNUSED(type))
{
}
virtual bool Save(wxGDIImage *WXUNUSED(image),
const wxString& WXUNUSED(name),
int WXUNUSED(type))
{
- return
FALSE
;
+ return
false
;
}
virtual bool Load(wxGDIImage *image,
}
virtual bool Load(wxGDIImage *image,
@@
-126,7
+126,7
@@
public:
int desiredWidth, int desiredHeight)
{
wxIcon *icon = wxDynamicCast(image, wxIcon);
int desiredWidth, int desiredHeight)
{
wxIcon *icon = wxDynamicCast(image, wxIcon);
- wxCHECK_MSG( icon,
FALSE
, _T("wxIconHandler only works with icons") );
+ wxCHECK_MSG( icon,
false
, _T("wxIconHandler only works with icons") );
return LoadIcon(icon, name, flags, desiredWidth, desiredHeight);
}
return LoadIcon(icon, name, flags, desiredWidth, desiredHeight);
}
@@
-146,6
+146,7
@@
public:
{
}
{
}
+protected:
virtual bool LoadIcon(wxIcon *icon,
const wxString& name, long flags,
int desiredWidth = -1, int desiredHeight = -1);
virtual bool LoadIcon(wxIcon *icon,
const wxString& name, long flags,
int desiredWidth = -1, int desiredHeight = -1);
@@
-163,6
+164,7
@@
public:
{
}
{
}
+protected:
virtual bool LoadIcon(wxIcon *icon,
const wxString& name, long flags,
int desiredWidth = -1, int desiredHeight = -1);
virtual bool LoadIcon(wxIcon *icon,
const wxString& name, long flags,
int desiredWidth = -1, int desiredHeight = -1);
@@
-191,7
+193,7
@@
IMPLEMENT_DYNAMIC_CLASS(wxICOResourceHandler, wxObject)
// implementation
// ============================================================================
// implementation
// ============================================================================
-wxList wxGDIImage::ms_handlers;
+wx
GDIImageHandler
List wxGDIImage::ms_handlers;
// ----------------------------------------------------------------------------
// wxGDIImage functions forwarded to wxGDIImageRefData
// ----------------------------------------------------------------------------
// wxGDIImage functions forwarded to wxGDIImageRefData
@@
-205,7
+207,7
@@
bool wxGDIImage::FreeResource(bool WXUNUSED(force))
GetGDIImageData()->m_handle = 0;
}
GetGDIImageData()->m_handle = 0;
}
- return
TRUE
;
+ return
true
;
}
WXHANDLE wxGDIImage::GetResourceHandle() const
}
WXHANDLE wxGDIImage::GetResourceHandle() const
@@
-233,21
+235,21
@@
bool wxGDIImage::RemoveHandler(const wxString& name)
if ( handler )
{
ms_handlers.DeleteObject(handler);
if ( handler )
{
ms_handlers.DeleteObject(handler);
- return
TRUE
;
+ return
true
;
}
else
}
else
- return
FALSE
;
+ return
false
;
}
wxGDIImageHandler *wxGDIImage::FindHandler(const wxString& name)
{
}
wxGDIImageHandler *wxGDIImage::FindHandler(const wxString& name)
{
- wx
Node *node = ms_handlers.
First();
+ wx
GDIImageHandlerList::compatibility_iterator node = ms_handlers.Get
First();
while ( node )
{
while ( node )
{
- wxGDIImageHandler *handler =
(wxGDIImageHandler *)node->
Data();
+ wxGDIImageHandler *handler =
node->Get
Data();
if ( handler->GetName() == name )
return handler;
if ( handler->GetName() == name )
return handler;
- node = node->Next();
+ node = node->
Get
Next();
}
return NULL;
}
return NULL;
@@
-256,31
+258,31
@@
wxGDIImageHandler *wxGDIImage::FindHandler(const wxString& name)
wxGDIImageHandler *wxGDIImage::FindHandler(const wxString& extension,
long type)
{
wxGDIImageHandler *wxGDIImage::FindHandler(const wxString& extension,
long type)
{
- wx
Node *node = ms_handlers.
First();
+ wx
GDIImageHandlerList::compatibility_iterator node = ms_handlers.Get
First();
while ( node )
{
while ( node )
{
- wxGDIImageHandler *handler =
(wxGDIImageHandler *)node->
Data();
- if ( (handler->GetExtension() = extension) &&
+ wxGDIImageHandler *handler =
node->Get
Data();
+ if ( (handler->GetExtension() =
=
extension) &&
(type == -1 || handler->GetType() == type) )
{
return handler;
}
(type == -1 || handler->GetType() == type) )
{
return handler;
}
- node = node->Next();
+ node = node->
Get
Next();
}
return NULL;
}
wxGDIImageHandler *wxGDIImage::FindHandler(long type)
{
}
return NULL;
}
wxGDIImageHandler *wxGDIImage::FindHandler(long type)
{
- wx
Node *node = ms_handlers.
First();
+ wx
GDIImageHandlerList::compatibility_iterator node = ms_handlers.Get
First();
while ( node )
{
while ( node )
{
- wxGDIImageHandler *handler =
(wxGDIImageHandler *)node->
Data();
+ wxGDIImageHandler *handler =
node->Get
Data();
if ( handler->GetType() == type )
return handler;
if ( handler->GetType() == type )
return handler;
- node = node->Next();
+ node = node->
Get
Next();
}
return NULL;
}
return NULL;
@@
-288,13
+290,13
@@
wxGDIImageHandler *wxGDIImage::FindHandler(long type)
void wxGDIImage::CleanUpHandlers()
{
void wxGDIImage::CleanUpHandlers()
{
- wx
Node *node = ms_handlers.
First();
+ wx
GDIImageHandlerList::compatibility_iterator node = ms_handlers.Get
First();
while ( node )
{
while ( node )
{
- wxGDIImageHandler *handler =
(wxGDIImageHandler *)node->
Data();
- wx
Node *next = node->
Next();
+ wxGDIImageHandler *handler =
node->Get
Data();
+ wx
GDIImageHandlerList::compatibility_iterator next = node->Get
Next();
delete handler;
delete handler;
-
delete node
;
+
ms_handlers.Erase( node )
;
node = next;
}
}
node = next;
}
}
@@
-329,7
+331,7
@@
bool wxBMPResourceHandler::LoadFile(wxBitmap *bitmap,
wxLogError(wxT("Can't load bitmap '%s' from resources! Check .rc file."),
name.c_str());
wxLogError(wxT("Can't load bitmap '%s' from resources! Check .rc file."),
name.c_str());
- return
FALSE
;
+ return
false
;
}
BITMAP bm;
}
BITMAP bm;
@@
-342,7
+344,10
@@
bool wxBMPResourceHandler::LoadFile(wxBitmap *bitmap,
bitmap->SetHeight(bm.bmHeight);
bitmap->SetDepth(bm.bmBitsPixel);
bitmap->SetHeight(bm.bmHeight);
bitmap->SetDepth(bm.bmBitsPixel);
- return TRUE;
+ // use 0xc0c0c0 as transparent colour by default
+ bitmap->SetMask(new wxMask(*bitmap, *wxLIGHT_GREY));
+
+ return true;
}
bool wxBMPFileHandler::LoadFile(wxBitmap *bitmap,
}
bool wxBMPFileHandler::LoadFile(wxBitmap *bitmap,
@@
-350,44
+355,30
@@
bool wxBMPFileHandler::LoadFile(wxBitmap *bitmap,
int WXUNUSED(desiredWidth),
int WXUNUSED(desiredHeight))
{
int WXUNUSED(desiredWidth),
int WXUNUSED(desiredHeight))
{
-#if wxUSE_IMAGE_LOADING_IN_MSW
- wxPalette *palette = NULL;
- bool success = wxLoadIntoBitmap(WXSTRINGCAST name, bitmap, &palette) != 0;
+#if wxUSE_WXDIB
+ wxCHECK_MSG( bitmap, false, _T("NULL bitmap in LoadFile") );
-#if wxUSE_PALETTE
- if ( success && palette )
- {
- bitmap->SetPalette(*palette);
- }
-
- // it was copied by the bitmap if it was loaded successfully
- delete palette;
-#endif // wxUSE_PALETTE
+ wxDIB dib(name);
- return
success
;
+ return
dib.IsOk() && bitmap->CopyFromDIB(dib)
;
#else
#else
- return
FALSE
;
+ return
false
;
#endif
}
bool wxBMPFileHandler::SaveFile(wxBitmap *bitmap,
const wxString& name,
int WXUNUSED(type),
#endif
}
bool wxBMPFileHandler::SaveFile(wxBitmap *bitmap,
const wxString& name,
int WXUNUSED(type),
- const wxPalette *
pal
)
+ const wxPalette *
WXUNUSED(pal)
)
{
{
-#if wxUSE_IMAGE_LOADING_IN_MSW
+#if wxUSE_WXDIB
+ wxCHECK_MSG( bitmap, false, _T("NULL bitmap in SaveFile") );
-#if wxUSE_PALETTE
- wxPalette *actualPalette = (wxPalette *)pal;
- if ( !actualPalette )
- actualPalette = bitmap->GetPalette();
-#else
- wxPalette *actualPalette = NULL;
-#endif // wxUSE_PALETTE
+ wxDIB dib(*bitmap);
- return
wxSaveBitmap(WXSTRINGCAST name, bitmap, actualPalette) != 0
;
+ return
dib.Save(name)
;
#else
#else
- return
FALSE
;
+ return
false
;
#endif
}
#endif
}
@@
-400,13
+391,11
@@
bool wxICOFileHandler::LoadIcon(wxIcon *icon,
long WXUNUSED(flags),
int desiredWidth, int desiredHeight)
{
long WXUNUSED(flags),
int desiredWidth, int desiredHeight)
{
-#if wxUSE_RESOURCE_LOADING_IN_MSW
icon->UnRef();
// actual size
wxSize size;
icon->UnRef();
// actual size
wxSize size;
-#ifdef __WIN32__
HICON hicon = NULL;
// Parse the filename: it may be of the form "filename;n" in order to
HICON hicon = NULL;
// Parse the filename: it may be of the form "filename;n" in order to
@@
-444,7
+433,7
@@
bool wxICOFileHandler::LoadIcon(wxIcon *icon,
}
else
#endif
}
else
#endif
- // were we asked for a large icon?
+
// were we asked for a large icon?
if ( desiredWidth == ::GetSystemMetrics(SM_CXICON) &&
desiredHeight == ::GetSystemMetrics(SM_CYICON) )
{
if ( desiredWidth == ::GetSystemMetrics(SM_CXICON) &&
desiredHeight == ::GetSystemMetrics(SM_CYICON) )
{
@@
-471,47
+460,41
@@
bool wxICOFileHandler::LoadIcon(wxIcon *icon,
}
//else: not standard size, load below
}
//else: not standard size, load below
+#ifndef __WXWINCE__
if ( !hicon )
{
// take any size icon from the file by index
hicon = ::ExtractIcon(wxGetInstance(), nameReal, iconIndex);
}
if ( !hicon )
{
// take any size icon from the file by index
hicon = ::ExtractIcon(wxGetInstance(), nameReal, iconIndex);
}
+#endif
if ( !hicon )
{
wxLogSysError(_T("Failed to load icon from the file '%s'"),
name.c_str());
if ( !hicon )
{
wxLogSysError(_T("Failed to load icon from the file '%s'"),
name.c_str());
- return
FALSE
;
+ return
false
;
}
size = wxGetHiconSize(hicon);
}
size = wxGetHiconSize(hicon);
-#else // Win16
- HICON hicon = ReadIconFile((wxChar *)name.c_str(),
- wxGetInstance(),
- &size.x, &size.y);
-#endif // Win32/Win16
if ( (desiredWidth != -1 && desiredWidth != size.x) ||
(desiredHeight != -1 && desiredHeight != size.y) )
{
wxLogTrace(_T("iconload"),
if ( (desiredWidth != -1 && desiredWidth != size.x) ||
(desiredHeight != -1 && desiredHeight != size.y) )
{
wxLogTrace(_T("iconload"),
- _T("Returning
FALSE
from wxICOFileHandler::Load because of the size mismatch: actual (%d, %d), requested (%d, %d)"),
+ _T("Returning
false
from wxICOFileHandler::Load because of the size mismatch: actual (%d, %d), requested (%d, %d)"),
size.x, size.y,
desiredWidth, desiredHeight);
::DestroyIcon(hicon);
size.x, size.y,
desiredWidth, desiredHeight);
::DestroyIcon(hicon);
- return
FALSE
;
+ return
false
;
}
icon->SetHICON((WXHICON)hicon);
icon->SetSize(size.x, size.y);
return icon->Ok();
}
icon->SetHICON((WXHICON)hicon);
icon->SetSize(size.x, size.y);
return icon->Ok();
-#else
- return FALSE;
-#endif
}
bool wxICOResourceHandler::LoadIcon(wxIcon *icon,
}
bool wxICOResourceHandler::LoadIcon(wxIcon *icon,
@@
-533,7
+516,6
@@
bool wxICOResourceHandler::LoadIcon(wxIcon *icon,
// note that we can't just always call LoadImage() because it seems to do
// some icon rescaling internally which results in very ugly 16x16 icons
// note that we can't just always call LoadImage() because it seems to do
// some icon rescaling internally which results in very ugly 16x16 icons
-#if defined(__WIN32__) && !defined(__SC__)
if ( hasSize )
{
hicon = (HICON)::LoadImage(wxGetInstance(), name, IMAGE_ICON,
if ( hasSize )
{
hicon = (HICON)::LoadImage(wxGetInstance(), name, IMAGE_ICON,
@@
-541,12
+523,12
@@
bool wxICOResourceHandler::LoadIcon(wxIcon *icon,
LR_DEFAULTCOLOR);
}
else
LR_DEFAULTCOLOR);
}
else
-#endif // Win32/!Win32
{
hicon = ::LoadIcon(wxGetInstance(), name);
}
// next check if it's not a standard icon
{
hicon = ::LoadIcon(wxGetInstance(), name);
}
// next check if it's not a standard icon
+#ifndef __WXWINCE__
if ( !hicon && !hasSize )
{
static const struct
if ( !hicon && !hasSize )
{
static const struct
@@
-569,6
+551,7
@@
bool wxICOResourceHandler::LoadIcon(wxIcon *icon,
}
}
}
}
}
}
+#endif
wxSize size = wxGetHiconSize(hicon);
icon->SetSize(size.x, size.y);
wxSize size = wxGetHiconSize(hicon);
icon->SetSize(size.x, size.y);
@@
-582,12
+565,13
@@
bool wxICOResourceHandler::LoadIcon(wxIcon *icon,
// private functions
// ----------------------------------------------------------------------------
// private functions
// ----------------------------------------------------------------------------
-wxSize wxGetHiconSize(HICON
hicon
)
+wxSize wxGetHiconSize(HICON
WXUNUSED_IN_WINCE(hicon)
)
{
{
- wxSize size(32, 32); // default
+ // default icon size on this hardware
+ // usually 32x32 but can be other (smaller) on pocket devices
+ wxSize size(::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON));
-#ifdef __WIN32__
- // Win32s doesn't have GetIconInfo function...
+#ifndef __WXWINCE__
if ( hicon && wxGetOsVersion() != wxWIN32S )
{
ICONINFO info;
if ( hicon && wxGetOsVersion() != wxWIN32S )
{
ICONINFO info;
@@
-616,5
+600,5
@@
wxSize wxGetHiconSize(HICON hicon)
return size;
}
return size;
}
-#endif
-
// __WXMICROWIN__
+
+
#endif
// __WXMICROWIN__