.TCore: fixed clashes of 'global member' functions accross files

*plugin/png: bug fix - wrong interpretation of transparency information (png_get_tRNS)

git-svn-id: svn://ultimatepp.org/upp/trunk@3276 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
rylek 2011-03-12 15:53:52 +00:00
parent bdf518a893
commit affc79af60
3 changed files with 46 additions and 48 deletions

View file

@ -552,7 +552,7 @@ void CalcSymbols::Remove(String name)
CalcContext::Global::Global(const String& name, CalcProc proc)
{
GetGlobals().Add(name, proc);
GetGlobals().Add(name, proc);
}
CalcContext::CalcContext()
@ -579,20 +579,20 @@ Value CalcContext::Get(String name) const
return Value();
}
Value CalcContext::TryEvaluate(String expr)
{
try {
return Evaluate(expr);
}
catch(Exc e) {
return ErrorValue(e);
}
}
Value CalcContext::Evaluate(String expr)
{
CalcNodePtr node = CalcParser().ScanVoid(expr);
return !!node ? node->Calc(*this) : Value();
CalcParser parser;
try
{
CalcNodePtr cn = parser.ScanVoid(expr);
if(!cn)
return Value();
return cn->Calc(*this);
}
catch(Exc e)
{
return ErrorValue(e);
}
}
double CalcContext::EvaluateDouble(String expr)
@ -1289,7 +1289,7 @@ String CalcParser::GetSqlString()
else if(*pos)
out.Cat(*pos++);
else
throw Exc(t_("Unterminated string constant"));
throw Exc(t_("Unterminated string constant"));
}
return out;
}
@ -1424,7 +1424,7 @@ CalcNodePtr CalcParser::ScanCompare()
out_node = new CalcConstNode(Value());
}
else if(islike) {
CalcNodePtr lexpr = ScanBitOr();
CalcNodePtr lexpr = ScanSelect();
out_node = new CalcFunctionNode("like", node, lexpr);
}
else if(isis) {
@ -1435,7 +1435,7 @@ CalcNodePtr CalcParser::ScanCompare()
throw Exc(t_("expected 'between', 'in' or 'like'"));
else
return node;
if(!isnot)
return out_node;
return new CalcFunctionNode("!", out_node);

View file

@ -111,7 +111,7 @@ class CalcSequenceNode : public CalcNode {
public:
CalcSequenceNode(pick_ Vector<CalcNodePtr> nodes);
CalcSequenceNode(CalcNodePtr node1, CalcNodePtr node2);
virtual CalcNodePtr Clone() const { return new CalcSequenceNode(*this); }
virtual Value Calc(CalcContext& context) const;
virtual String Format() const;
@ -343,8 +343,6 @@ public:
virtual ~CalcContext();
Value Evaluate(String expr);
Value TryEvaluate(String expr);
double EvaluateDouble(String expr);
String EvaluateString(String expr);
int EvaluateInt(String expr);
@ -641,6 +639,8 @@ CalcCastMemberTemplate(CalcCastMemberPacket, 6)
#define FGENID1(tag, lnum) FGENID2(tag, lnum)
#define FGENID(a, b) COMBINE(COMBINE(a, b), __LINE__)
#define SUBEXPAND(M) M
#ifndef NOHELP
#define FDECLTH(tag, topic, id, group, proc) \
static GLOBAL_VARP(HelpCalc, FGENID(chlp, tag), (callback(proc), id, "Calc$" topic, group, ASSTRING(proc))); \
@ -682,32 +682,32 @@ FDECLTH(dflt, topic, id, group, gate)
#define FDECLAP0(id, x, group) FDECLTA(BTA1, id, "C" ASSTRING(id) ASSTRING(x), ASSTRING(id), group, COMBINE3(C, id, x))
#define MDECLT(null, topic, id, group, call) \
struct FGENID(clcp, dflt) : public BASECLASS \
{ FGENID(clcp, dflt)(); bool CalcIt(CalcPacket& packet) { return CalcCastMember<null>(packet, this, &BASECLASS::call); } }; \
static GLOBAL_VARP(HelpCalc, FGENID(chlp, dflt), (callback(static_cast<BASECLASS *>(0), \
brutal_cast<bool (BASECLASS::*)(CalcPacket&)>(&FGENID(clcp, dflt)::CalcIt)), \
struct FGENID(clcp, SUBEXPAND(MFILEID)) : public BASECLASS \
{ FGENID(clcp, SUBEXPAND(MFILEID))(); bool CalcIt(CalcPacket& packet) { return CalcCastMember<null>(packet, this, &BASECLASS::call); } }; \
static GLOBAL_VARP(HelpCalc, FGENID(chlp, SUBEXPAND(MFILEID)), (callback(static_cast<BASECLASS *>(0), \
brutal_cast<bool (BASECLASS::*)(CalcPacket&)>(&FGENID(clcp, SUBEXPAND(MFILEID))::CalcIt)), \
id, "Calc$" topic, group, ASSTRING(call))); \
INITBLOCK_(FGENID(mblk, tag)) { \
FGENID(chlp, dflt)(); \
static CalcLocalItem<BASECLASS> FGENID(clci, dflt)(BASECLASS::GetLocalMap(), id, \
brutal_cast<bool (BASECLASS::*)(CalcPacket&)>(&FGENID(clcp, dflt)::CalcIt)); \
FGENID(chlp, SUBEXPAND(MFILEID))(); \
static CalcLocalItem<BASECLASS> FGENID(clci, SUBEXPAND(MFILEID))(BASECLASS::GetLocalMap(), id, \
brutal_cast<bool (BASECLASS::*)(CalcPacket&)>(&FGENID(clcp, SUBEXPAND(MFILEID))::CalcIt)); \
} \
static void FGENID(chlt, dflt)(String& out) { out.Cat(FGENID(chlp, dflt)().GetTitle()); } \
RegisterHelpTopicInfo("Calc$" topic, __FILE__, callback(&FGENID(chlt, dflt)), CNULL)
static void FGENID(chlt, SUBEXPAND(MFILEID))(String& out) { out.Cat(FGENID(chlp, SUBEXPAND(MFILEID))().GetTitle()); } \
RegisterHelpTopicInfo("Calc$" topic, __FILE__, callback(&FGENID(chlt, SUBEXPAND(MFILEID))), CNULL)
#define MDECLTA(null, topic, id, group, call) \
struct FGENID(clcp, dflt) : public BASECLASS \
{ FGENID(clcp, dflt)(); bool CalcIt(CalcPacket& packet) { return CalcCastMemberPacket<null>(packet, this, &BASECLASS::call); } }; \
static GLOBAL_VARP(HelpCalc, FGENID(chlp, dflt), (callback(static_cast<BASECLASS *>(0), \
brutal_cast<bool (BASECLASS::*)(CalcPacket&)>(&FGENID(clcp, dflt)::CalcIt)), \
struct FGENID(clcp, SUBEXPAND(MFILEID)) : public BASECLASS \
{ FGENID(clcp, SUBEXPAND(MFILEID))(); bool CalcIt(CalcPacket& packet) { return CalcCastMemberPacket<null>(packet, this, &BASECLASS::call); } }; \
static GLOBAL_VARP(HelpCalc, FGENID(chlp, SUBEXPAND(MFILEID)), (callback(static_cast<BASECLASS *>(0), \
brutal_cast<bool (BASECLASS::*)(CalcPacket&)>(&FGENID(clcp, SUBEXPAND(MFILEID))::CalcIt)), \
id, "Calc$" topic, group, ASSTRING(call))); \
INITBLOCK_(FGENID(mblk, tag)) { \
FGENID(chlp, dflt)(); \
static CalcLocalItem<BASECLASS> FGENID(clci, dflt)(BASECLASS::GetLocalMap(), id, \
brutal_cast<bool (BASECLASS::*)(CalcPacket&)>(&FGENID(clcp, dflt)::CalcIt)); \
FGENID(chlp, SUBEXPAND(MFILEID))(); \
static CalcLocalItem<BASECLASS> FGENID(clci, SUBEXPAND(MFILEID))(BASECLASS::GetLocalMap(), id, \
brutal_cast<bool (BASECLASS::*)(CalcPacket&)>(&FGENID(clcp, SUBEXPAND(MFILEID))::CalcIt)); \
} \
static void FGENID(chlt, dflt)(String& out) { out.Cat(FGENID(chlp, dflt)().GetTitle()); } \
RegisterHelpTopicInfo("Calc$" topic, __FILE__, callback(&FGENID(chlt, dflt)), CNULL)
static void FGENID(chlt, SUBEXPAND(MFILEID))(String& out) { out.Cat(FGENID(chlp, SUBEXPAND(MFILEID))().GetTitle()); } \
RegisterHelpTopicInfo("Calc$" topic, __FILE__, callback(&FGENID(chlt, SUBEXPAND(MFILEID))), CNULL)
#define MDECL(id, x, group) MDECLT(BTA0, ASSTRING(call), id, group, call)
#define MDECL0(id, x, group) MDECLT(BTA1, ASSTRING(id), id, group, COMBINE3(C, id, x))

View file

@ -176,11 +176,11 @@ bool PNGRaster::Create()
}
}
png_bytep trans_colors = 0;
png_bytep trans_alpha = 0;
png_color_16p trans_values = 0;
int num_trans = 0;
png_get_tRNS(data->png_ptr, data->info_ptr, &trans_colors, &num_trans, &trans_values);
png_get_tRNS(data->png_ptr, data->info_ptr, &trans_alpha, &num_trans, &trans_values);
// bool has_mask = (num_trans > 0);
// AlphaArray im(width, height, out_bpp, 4, NULL, Vector<Color>(), has_mask ? 8 : 0, 4);
@ -201,13 +201,13 @@ bool PNGRaster::Create()
rgba.g = c.green;
rgba.b = c.blue;
rgba.a = 255;
if(trans_alpha && i < num_trans)
rgba.a = trans_alpha[i];
data->palette[i] = rgba;
}
if(trans_colors) {
Premultiply(data->palette, data->palette, pal_count);
if(trans_alpha)
data->info.kind = IMAGE_MASK;
for(int i = 0; i < num_trans; i++)
data->palette[(int)trans_colors[i]] = RGBAZero();
}
}
else if(!(color_type & PNG_COLOR_MASK_COLOR)) { // grayscale
@ -217,13 +217,11 @@ bool PNGRaster::Create()
RGBA rgba;
rgba.r = rgba.g = rgba.b = (byte)level;
rgba.a = 255;
if(trans_alpha && i < num_trans)
rgba.a = trans_alpha[i];
data->palette[i] = rgba;
}
if(trans_colors) {
data->info.kind = IMAGE_MASK;
for(int i = 0; i < num_trans; i++)
data->palette[(int)trans_colors[i]] = RGBAZero();
}
Premultiply(data->palette, data->palette, colors);
}
/*