Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core
diff options
context:
space:
mode:
Diffstat (limited to 'source/core')
-rw-r--r--source/core/StarFont.cpp2
-rw-r--r--source/core/StarImageProcessing.cpp22
2 files changed, 13 insertions, 11 deletions
diff --git a/source/core/StarFont.cpp b/source/core/StarFont.cpp
index 59a094b..e16a2be 100644
--- a/source/core/StarFont.cpp
+++ b/source/core/StarFont.cpp
@@ -78,7 +78,7 @@ unsigned Font::width(String::Char c) {
if (auto width = m_widthCache.maybe({c, m_pixelSize})) {
return *width;
} else {
- FT_Load_Char(m_fontImpl->face, c, FT_LOAD_DEFAULT);
+ FT_Load_Char(m_fontImpl->face, c, FT_LOAD_FORCE_AUTOHINT);
unsigned newWidth = (m_fontImpl->face->glyph->advance.x + 32) / 64;
m_widthCache.insert({c, m_pixelSize}, newWidth);
return newWidth;
diff --git a/source/core/StarImageProcessing.cpp b/source/core/StarImageProcessing.cpp
index ebb0947..8f0f3f7 100644
--- a/source/core/StarImageProcessing.cpp
+++ b/source/core/StarImageProcessing.cpp
@@ -495,21 +495,23 @@ Image processImageOperations(List<ImageOperation> const& operations, Image image
if (dist < std::numeric_limits<int>::max()) {
float percent = (dist - 1) / (2.0f * pixels - 1);
- Vec4F color = (Vec4F(op->startColor) * ((1.0f - percent) / 255.0f)) + (Vec4F(op->endColor) * (percent / 255.0f));
- color.clamp(0.0f, 1.0f);
+ Color color = Color::rgbaf((Vec4F(op->startColor) * ((1.0f - percent) / 255.0f)) + (Vec4F(op->endColor) * (percent / 255.0f)));
if (pixel[3] != 0) {
- float pixelA = byteToFloat(pixel[3]);
if (op->outlineOnly)
- color[3] *= (1.0f - pixelA);
+ color.setAlphaF(1.0f - byteToFloat(pixel[3]));
else {
- float colorA = pixelA * (1.0f - color[3]);
- color[0] = Color::fromLinear((Color::toLinear(color[0]) * colorA) + (Color::toLinear(byteToFloat(pixel[0])) * pixelA));
- color[1] = Color::fromLinear((Color::toLinear(color[1]) * colorA) + (Color::toLinear(byteToFloat(pixel[1])) * pixelA));
- color[2] = Color::fromLinear((Color::toLinear(color[2]) * colorA) + (Color::toLinear(byteToFloat(pixel[2])) * pixelA));
- color[3] += colorA;
+ Color pixelCol = Color::rgba(pixel);
+ float pixelA = pixelCol.alphaF();
+ float colorA = color.alphaF();
+ colorA += pixelA * (1.0f - colorA);
+ pixelCol.convertToLinear();
+ color.convertToLinear();
+ color.mix(pixelCol, pixelA);
+ color.convertToSRGB();
+ color.setAlphaF(colorA);
}
}
- pixel = Vec4B(color.piecewiseMultiply(Vec4F::filled(255.0f)));
+ pixel = color.toRgba();
}
} else if (op->outlineOnly) {
pixel = Vec4B(0, 0, 0, 0);