Fix building with wxUSE_STL enabled in VS2019 16.6

Exporting standard C++ library types is not allowed any more, see

https://developercommunity.visualstudio.com/content/problem/1042081/142628801includexhash201332-error-c2338-this-funct.html

so don't use DLL export declarations for wxHash{Map,Set} classes, which
derive from std::{map,set}.

Since the classes are header-only, this should have no direct
consequences. Only classes that extend wxHashMap or wxHashSet, like
wxImageHistogram, have to be made header only as well.

Remove the wxLogError message in wxImageHistogram::FindFirstUnusedColour, so
log.h and translation.h do not have to be included in the header.

Closes https://github.com/wxWidgets/wxWidgets/pull/2009
This commit is contained in:
Maarten Bent
2020-08-01 11:54:26 +02:00
committed by Vadim Zeitlin
parent 5aa1f4e953
commit 590e32c60b
4 changed files with 48 additions and 52 deletions

View File

@@ -190,7 +190,7 @@ WX_DECLARE_EXPORTED_HASH_MAP(unsigned long, wxImageHistogramEntry,
wxIntegerHash, wxIntegerEqual,
wxImageHistogramBase);
class WXDLLIMPEXP_CORE wxImageHistogram : public wxImageHistogramBase
class wxImageHistogram : public wxImageHistogramBase
{
public:
wxImageHistogram() : wxImageHistogramBase(256) { }
@@ -211,9 +211,43 @@ public:
bool FindFirstUnusedColour(unsigned char *r,
unsigned char *g,
unsigned char *b,
unsigned char startR = 1,
unsigned char startG = 0,
unsigned char startB = 0 ) const;
unsigned char r2 = 1,
unsigned char g2 = 0,
unsigned char b2 = 0 ) const
{
unsigned long key = MakeKey(r2, g2, b2);
while ( find(key) != end() )
{
// color already used
r2++;
if ( r2 >= 255 )
{
r2 = 0;
g2++;
if ( g2 >= 255 )
{
g2 = 0;
b2++;
if ( b2 >= 255 )
{
return false;
}
}
}
key = MakeKey(r2, g2, b2);
}
if ( r )
*r = r2;
if ( g )
*g = g2;
if ( b )
*b = b2;
return true;
}
};
//-----------------------------------------------------------------------------