Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 666254 - dev-cpp/cairomm-1.15.5 version bump
Summary: dev-cpp/cairomm-1.15.5 version bump
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Gentoo Linux Gnome Desktop Team
Depends on:
Reported: 2018-09-15 00:20 UTC by DrSlony
Modified: 2018-09-16 11:10 UTC (History)
2 users (show)

See Also:
Package list:
Runtime testing required: ---


Note You need to log in before you can comment on or make changes to this bug.
Description DrSlony 2018-09-15 00:20:35 UTC

Gentoo currently ships only dev-cpp/cairomm-1.12.0-r1 which is from 2015-09-22.

I'm trying to code HiDPI scaling in a program using: cairo_surface_set_device_scale
but compilation fails, the function is unknown. Maybe it's due to cairomm being too old.

Please bump it. The latest version is 1.15.5 from 2017-08-25:
Comment 1 Mart Raudsepp gentoo-dev 2018-09-15 09:34:52 UTC
1.5 is a development series.

All of these 1.5 versions even came with a note in NEWS, as follows:

(Distros should probably not package this yet.)
Comment 2 Mart Raudsepp gentoo-dev 2018-09-15 09:55:54 UTC
cairo_surface_set_device_scale is a C function, so newer cairomm won't help, however 1.5 might wrap the function in Cairo::Surface.
I suggest trying with a local 1.15.5 build, or use the C function from C++ with something like:

#include <cairo.h>

cairo_surface_set_device_scale(surface_ptr->cobject(), 2.0, 2.0)

Due to direct usage of C cairo, might want to have your build system deal with cairo.pc as well explicitly then.

I had a quick look at cairomm 1.15.5 tarball, and I can't see any wrapping of cairo_surface_set_device_scale still in there.

All that said, usually I don't think people should be calling this at all, but rather rely on the relevant HiDPI supporting functionality and API in the toolkit instead, which makes all this automatic and does the call for you for the cairo surfaces you get to draw on.
Comment 3 DrSlony 2018-09-15 16:03:43 UTC
Mart, Cairo 1.5 is from 2008. Did you mean 1.15?

Regardless, this is a request for a bump to the latest stable version.

There is no mention of instability in the release notes of 1.15.12:

If 1.15 is a development line of release, there's 1.14:
Comment 4 DrSlony 2018-09-15 16:07:23 UTC
Regarding the HiDPI problem, the code is basically:
    Cairo::RefPtr<Cairo::Surface> cs;
    cs->set_device_scale(2, 2);

Which fails during compilation:
error: ‘class Cairo::Surface’ has no member named ‘set_device_scale’; did you mean ‘set_device_offset’?
     cs->set_device_scale(2, 2);

The Cairo docs show that both set_device_offset and set_device_scale are indeed methods for Cairo::Surface, and that set_device_scale is "New in version 1.14.0."

You may very well be right that this shouldn't need to be called, because it should be handled by GTK+, but I just wanted to give more details since you kindly responded.
Comment 5 Mart Raudsepp gentoo-dev 2018-09-16 08:52:38 UTC
Yes, I meant 1.15. It is a development release and I will not package it, just like the NEWS item says for all 1.15.x versions -> "(Distros should probably not package this yet.)".
With GNOME (and cairo) packages it is common that development releases carry an odd minor version number (while stable have even minor version number).

There is no 1.14.x releases of cairomm, so I can't package that either.

Additionally as I said, cairomm 1.15.x doesn't even have a set_device_scale method either - did you try locally? Yes, the C method is new in cairo-1.14, but I didn't see it wrapped in cairomm for C++... but as I alluded to, it might also be some magic that only shows up during compilation of cairomm against the cairo version, and I didn't try that.

If you use GTK+, I suggest to do it via that indeed - in practice, you shouldn't be changing it, but gtk should. If you want to force it over GTK+/GNOME global choice, there's probably a GTK+ API for this.

But to try to use cairo API directly to complete your test, I suggest to try using C API directly as I already gave an example; to translate that example to your example, this would be something like:

    Cairo::RefPtr<Cairo::Surface> cs;
    cairo_surface_set_device_scale(cs->cobject(), 2.0, 2.0)

(I use 2.0 instead of 2 because it takes a floating point and 2 isn't a floating point)
Comment 6 DrSlony 2018-09-16 11:10:44 UTC
Mart thank you for the advice.

Since this issue is about bumping cairo/cairomm and that cannot be done currently, I will close it.