Hi;

On 12 November 2016 at 19:02,  <zahlenm...@gmx.de> wrote:
> I am struggling how to translate operators of the form
> color = &style->light[GTK_STATE_PRELIGHT];
> into proper Gtk3. The documentation says:
> "One notable difference is the reduction from fg/bg/text/base colors to
> only foreground/background, in exchange the widget is able to render its
> various elements with different CSS classes, which can be themed
> independently."

Your issues with this task is that you're approaching it by thinking
that only the syntax to style widgets has changed — whereas the whole
rendering API has been changed, starting in GTK+ 3.x.

You cannot query a color from the style and then draw with it, because
GTK+ uses CSS to render, and CSS does not have "colors". You cannot
query the state of the CSS style and then try to mimic a subset of it
with your own rendering code. You cannot assume themes will support
your widgets

The styling machinery in GTK+ 3.x (and 4.x) is not like the one in
GTK+ 2.x, where you could just define a few solid colors; it's a
complex rendering API that influences sizing blending of different
elements. They are conceptually different.

> First question would be: What do the different colors stand for anyway?
> What does light and dark mean when it comes to rendering? For example, I
> am using the Arc Theme which does not provide .light or .dark classes
> for different widgets.

The whole theme provides a dark variant of itself; a theme variant is
literally a separate theme, with a "-dark" suffix, that gets loaded
automatically on application request. That's also why various themes
are written using SASS and other CSS pre-processors.

> But I also don't want to provide an
> application-specific CSS file because the application should follow the
> system theme.

If you want a custom widget to render with the system theme then
you'll need to use the gtk_render_* API and apply the same classes you
wish to reuse, like "osd" or "dim-label" or "linked" or
"suggested-action".

If your application is using custom widgets, with custom rendering,
though, you *will* have to provide application-specific CSS. You can
try to integrate with common system themes, by creating different CSS
fragments and loading them up depending on the theme name.

> The second question would be how style properties fit into this as well.
> Some colors are set explicitly via style properties, but those are also
> deprecated. What would be the way to replace those?

Style properties are replaced by CSS properties where appropriate.

> I am looking for the recommended way/best practise of styling widgets,
> not some hacks and workarounds. Can anybody help me?

The overall best practices are:

 * do not style your widgets unless absolutely necessary; build
composite widgets and let the system theme handle them for you
 * if you have custom widgets, always use the gtk_render_* API and the
appropriate CSS classes to let GTK+ render them
 * if you have custom widgets and you wish to render them in specific
ways then assign them an application-specific CSS class, and ship an
application-specific CSS fragment
 * if you have custom widgets and you wish them to be rendered
differently depending on the system theme, then you'll have to ship an
application-specific CSS fragment for each theme you wish to support

In short: if you want your application to look like the rest of the
system UI, regardless of theme, then you'll have to use GTK widgets
that themes can style generically; if you have custom widgetry, then
you'll have to ship your own CSS fragments — possibly with support for
multiple themes.

Ciao,
 Emmanuele.

-- 
https://www.bassi.io
[@] ebassi [@gmail.com]
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to