PDF4QT/PdfForQtLib/sources/pdfblendfunction.cpp

133 lines
4.2 KiB
C++
Raw Normal View History

2019-09-29 15:44:35 +02:00
// Copyright (C) 2019 Jakub Melka
//
// This file is part of PdfForQt.
//
// PdfForQt is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// PdfForQt is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with PDFForQt. If not, see <https://www.gnu.org/licenses/>.
#include "pdfblendfunction.h"
namespace pdf
{
constexpr const std::pair<const char*, BlendMode> BLEND_MODE_INFOS[] =
{
{ "Normal", BlendMode::Normal },
{ "Multiply", BlendMode::Multiply },
{ "Screen", BlendMode::Screen },
{ "Overlay", BlendMode::Overlay },
{ "Darken", BlendMode::Darken },
{ "Lighten", BlendMode::Lighten },
{ "ColorDodge", BlendMode::ColorDodge },
{ "ColorBurn", BlendMode::ColorBurn },
{ "HardLight", BlendMode::HardLight },
{ "SoftLight", BlendMode::SoftLight },
{ "Difference", BlendMode::Difference },
{ "Exclusion", BlendMode::Exclusion },
{ "Hue", BlendMode::Hue },
{ "Saturation", BlendMode::Saturation },
{ "Color", BlendMode::Color },
{ "Luminosity", BlendMode::Luminosity },
{ "Compatible", BlendMode::Compatible }
};
BlendMode PDFBlendModeInfo::getBlendMode(const QByteArray& name)
{
for (const std::pair<const char*, BlendMode>& info : BLEND_MODE_INFOS)
{
if (info.first == name)
{
return info.second;
}
}
return BlendMode::Invalid;
}
bool PDFBlendModeInfo::isSupportedByQt(BlendMode mode)
{
switch (mode)
{
case BlendMode::Normal:
case BlendMode::Multiply:
case BlendMode::Screen:
case BlendMode::Overlay:
case BlendMode::Darken:
case BlendMode::Lighten:
case BlendMode::ColorDodge:
case BlendMode::ColorBurn:
case BlendMode::HardLight:
case BlendMode::SoftLight:
case BlendMode::Difference:
case BlendMode::Exclusion:
case BlendMode::Compatible:
return true;
default:
return false;
}
}
QPainter::CompositionMode PDFBlendModeInfo::getCompositionModeFromBlendMode(BlendMode mode)
{
switch (mode)
{
case BlendMode::Normal:
return QPainter::CompositionMode_SourceOver;
case BlendMode::Multiply:
return QPainter::CompositionMode_Multiply;
case BlendMode::Screen:
return QPainter::CompositionMode_Screen;
case BlendMode::Overlay:
return QPainter::CompositionMode_Overlay;
case BlendMode::Darken:
return QPainter::CompositionMode_Darken;
case BlendMode::Lighten:
return QPainter::CompositionMode_Lighten;
case BlendMode::ColorDodge:
return QPainter::CompositionMode_ColorDodge;
case BlendMode::ColorBurn:
return QPainter::CompositionMode_ColorBurn;
case BlendMode::HardLight:
return QPainter::CompositionMode_HardLight;
case BlendMode::SoftLight:
return QPainter::CompositionMode_SoftLight;
case BlendMode::Difference:
return QPainter::CompositionMode_Difference;
case BlendMode::Exclusion:
return QPainter::CompositionMode_Exclusion;
case BlendMode::Compatible:
return QPainter::CompositionMode_SourceOver;
default:
break;
}
return QPainter::CompositionMode_SourceOver;
}
QString PDFBlendModeInfo::getBlendModeName(BlendMode mode)
{
for (const std::pair<const char*, BlendMode>& info : BLEND_MODE_INFOS)
{
if (info.second == mode)
{
return QString::fromLatin1(info.first);
}
}
return "Unknown";
}
} // namespace pdf