mirror of
https://github.com/hyprwm/hyprgraphics.git
synced 2026-05-05 01:48:00 +02:00
resources/text: fix alignment layout for center/right
This commit is contained in:
parent
50fb9f0692
commit
e381b2f1f0
2 changed files with 56 additions and 26 deletions
|
|
@ -37,9 +37,15 @@ CMatrix3 Hyprgraphics::CMatrix3::invert() const {
|
|||
);
|
||||
|
||||
return CMatrix3(std::array<std::array<double, 3>, 3>{
|
||||
(m[1][1] * m[2][2] - m[2][1] * m[1][2]) * invDet, (m[0][2] * m[2][1] - m[0][1] * m[2][2]) * invDet, (m[0][1] * m[1][2] - m[0][2] * m[1][1]) * invDet, //
|
||||
(m[1][2] * m[2][0] - m[1][0] * m[2][2]) * invDet, (m[0][0] * m[2][2] - m[0][2] * m[2][0]) * invDet, (m[1][0] * m[0][2] - m[0][0] * m[1][2]) * invDet, //
|
||||
(m[1][0] * m[2][1] - m[2][0] * m[1][1]) * invDet, (m[2][0] * m[0][1] - m[0][0] * m[2][1]) * invDet, (m[0][0] * m[1][1] - m[1][0] * m[0][1]) * invDet, //
|
||||
(m[1][1] * m[2][2] - m[2][1] * m[1][2]) * invDet,
|
||||
(m[0][2] * m[2][1] - m[0][1] * m[2][2]) * invDet,
|
||||
(m[0][1] * m[1][2] - m[0][2] * m[1][1]) * invDet, //
|
||||
(m[1][2] * m[2][0] - m[1][0] * m[2][2]) * invDet,
|
||||
(m[0][0] * m[2][2] - m[0][2] * m[2][0]) * invDet,
|
||||
(m[1][0] * m[0][2] - m[0][0] * m[1][2]) * invDet, //
|
||||
(m[1][0] * m[2][1] - m[2][0] * m[1][1]) * invDet,
|
||||
(m[2][0] * m[0][1] - m[0][0] * m[2][1]) * invDet,
|
||||
(m[0][0] * m[1][1] - m[1][0] * m[0][1]) * invDet, //
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -69,9 +75,15 @@ const std::array<std::array<double, 3>, 3>& Hyprgraphics::CMatrix3::mat() {
|
|||
|
||||
const CMatrix3& CMatrix3::identity() {
|
||||
static const CMatrix3 Identity3 = CMatrix3(std::array<std::array<double, 3>, 3>{
|
||||
1, 0, 0, //
|
||||
0, 1, 0, //
|
||||
0, 0, 1, //
|
||||
1,
|
||||
0,
|
||||
0, //
|
||||
0,
|
||||
1,
|
||||
0, //
|
||||
0,
|
||||
0,
|
||||
1, //
|
||||
});
|
||||
return Identity3;
|
||||
}
|
||||
|
|
@ -84,9 +96,15 @@ CColor::XYZ Hyprgraphics::xy2xyz(const CColor::xy& xy) {
|
|||
}
|
||||
|
||||
static CMatrix3 Bradford = CMatrix3(std::array<std::array<double, 3>, 3>{
|
||||
0.8951, 0.2664, -0.1614, //
|
||||
-0.7502, 1.7135, 0.0367, //
|
||||
0.0389, -0.0685, 1.0296, //
|
||||
0.8951,
|
||||
0.2664,
|
||||
-0.1614, //
|
||||
-0.7502,
|
||||
1.7135,
|
||||
0.0367, //
|
||||
0.0389,
|
||||
-0.0685,
|
||||
1.0296, //
|
||||
});
|
||||
|
||||
static CMatrix3 BradfordInv = Bradford.invert();
|
||||
|
|
@ -101,9 +119,15 @@ CMatrix3 Hyprgraphics::adaptWhite(const CColor::xy& src, const CColor::xy
|
|||
|
||||
return BradfordInv *
|
||||
CMatrix3(std::array<std::array<double, 3>, 3>{
|
||||
factors.x, 0.0, 0.0, //
|
||||
0.0, factors.y, 0.0, //
|
||||
0.0, 0.0, factors.z, //
|
||||
factors.x,
|
||||
0.0,
|
||||
0.0, //
|
||||
0.0,
|
||||
factors.y,
|
||||
0.0, //
|
||||
0.0,
|
||||
0.0,
|
||||
factors.z, //
|
||||
}) *
|
||||
Bradford;
|
||||
}
|
||||
|
|
@ -115,9 +139,15 @@ CMatrix3 Hyprgraphics::SPCPRimaries::toXYZ() const {
|
|||
const auto w = xy2xyz(white);
|
||||
|
||||
const auto invMat = CMatrix3(std::array<std::array<double, 3>, 3>{
|
||||
r.x, g.x, b.x, //
|
||||
r.y, g.y, b.y, //
|
||||
r.z, g.z, b.z, //
|
||||
r.x,
|
||||
g.x,
|
||||
b.x, //
|
||||
r.y,
|
||||
g.y,
|
||||
b.y, //
|
||||
r.z,
|
||||
g.z,
|
||||
b.z, //
|
||||
})
|
||||
.invert();
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ CTextResource::CTextResource(CTextResource::STextResourceData&& data) : m_data(s
|
|||
}
|
||||
|
||||
void CTextResource::render() {
|
||||
auto CAIROSURFACE = makeUnique<CCairoSurface>(cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1920, 1080 /* dummy value */));
|
||||
auto CAIROSURFACE = makeUnique<CCairoSurface>(cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1 /* dummy value */));
|
||||
auto CAIRO = cairo_create(CAIROSURFACE->cairo());
|
||||
|
||||
PangoLayout* layout = pango_cairo_create_layout(CAIRO);
|
||||
|
|
@ -60,30 +60,30 @@ void CTextResource::render() {
|
|||
pango_layout_set_attributes(layout, attrList);
|
||||
pango_attr_list_unref(attrList);
|
||||
|
||||
int layoutWidth, layoutHeight;
|
||||
pango_layout_get_size(layout, &layoutWidth, &layoutHeight);
|
||||
PangoRectangle ink, logical;
|
||||
pango_layout_get_pixel_extents(layout, &ink, &logical);
|
||||
|
||||
if (m_data.maxSize) {
|
||||
layoutWidth = m_data.maxSize->x > 0 ? std::min(layoutWidth, sc<int>(m_data.maxSize->x * PANGO_SCALE)) : layoutWidth;
|
||||
layoutHeight = m_data.maxSize->y > 0 ? std::min(layoutHeight, sc<int>(m_data.maxSize->y * PANGO_SCALE)) : layoutHeight;
|
||||
if (m_data.ellipsize)
|
||||
pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END);
|
||||
if (m_data.maxSize->x >= 0)
|
||||
pango_layout_set_width(layout, layoutWidth);
|
||||
pango_layout_set_width(layout, std::min(logical.width * PANGO_SCALE, sc<int>(m_data.maxSize->x * PANGO_SCALE)));
|
||||
if (m_data.maxSize->y >= 0)
|
||||
pango_layout_set_height(layout, layoutHeight);
|
||||
pango_layout_set_height(layout, std::min(logical.height * PANGO_SCALE, sc<int>(m_data.maxSize->y * PANGO_SCALE)));
|
||||
if (m_data.wrap)
|
||||
pango_layout_set_wrap(layout, PANGO_WRAP_WORD_CHAR);
|
||||
|
||||
pango_layout_get_size(layout, &layoutWidth, &layoutHeight);
|
||||
pango_layout_get_pixel_extents(layout, &ink, &logical);
|
||||
}
|
||||
|
||||
pango_layout_get_pixel_extents(layout, &ink, &logical);
|
||||
|
||||
// TODO: avoid this?
|
||||
cairo_destroy(CAIRO);
|
||||
|
||||
CAIROSURFACE.reset();
|
||||
|
||||
m_asset.cairoSurface = makeShared<CCairoSurface>(cairo_image_surface_create(CAIRO_FORMAT_ARGB32, layoutWidth / PANGO_SCALE, layoutHeight / PANGO_SCALE));
|
||||
m_asset.cairoSurface = makeShared<CCairoSurface>(cairo_image_surface_create(CAIRO_FORMAT_ARGB32, logical.width, logical.height));
|
||||
CAIRO = cairo_create(m_asset.cairoSurface->cairo());
|
||||
|
||||
// clear the pixmap
|
||||
|
|
@ -96,14 +96,14 @@ void CTextResource::render() {
|
|||
const auto RGB = m_data.color.asRgb();
|
||||
cairo_set_source_rgba(CAIRO, RGB.r, RGB.g, RGB.b, 1.F);
|
||||
|
||||
cairo_move_to(CAIRO, 0, 0);
|
||||
cairo_move_to(CAIRO, -logical.x, -logical.y);
|
||||
pango_cairo_show_layout(CAIRO, layout);
|
||||
|
||||
g_object_unref(layout);
|
||||
|
||||
cairo_surface_flush(m_asset.cairoSurface->cairo());
|
||||
|
||||
m_asset.pixelSize = {layoutWidth / (double)PANGO_SCALE, layoutHeight / (double)PANGO_SCALE};
|
||||
m_asset.pixelSize = {logical.width, logical.height};
|
||||
|
||||
cairo_destroy(CAIRO);
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue