Class StyleContext

All Implemented Interfaces:
PointerInterface

public class StyleContext extends Object
`GtkStyleContext` stores styling information affecting a widget.

In order to construct the final style information, `GtkStyleContext`
queries information from all attached `GtkStyleProviders`. Style
providers can be either attached explicitly to the context through
[method@Gtk.StyleContext.add_provider], or to the display through
[func@Gtk.StyleContext.add_provider_for_display]. The resulting
style is a combination of all providers’ information in priority order.

For GTK widgets, any `GtkStyleContext` returned by
[method@Gtk.Widget.get_style_context] will already have a `GdkDisplay`
and RTL/LTR information set. The style context will also be updated
automatically if any of these settings change on the widget.

# Style Classes

Widgets can add style classes to their context, which can be used to associate
different styles by class. The documentation for individual widgets lists
which style classes it uses itself, and which style classes may be added by
applications to affect their appearance.

# Custom styling in UI libraries and applications

If you are developing a library with custom widgets that render differently
than standard components, you may need to add a `GtkStyleProvider` yourself
with the %GTK_STYLE_PROVIDER_PRIORITY_FALLBACK priority, either a
`GtkCssProvider` or a custom object implementing the `GtkStyleProvider`
interface. This way themes may still attempt to style your UI elements in
a different way if needed so.

If you are using custom styling on an applications, you probably want then
to make your style information prevail to the theme’s, so you must use
a `GtkStyleProvider` with the %GTK_STYLE_PROVIDER_PRIORITY_APPLICATION
priority, keep in mind that the user settings in
`XDG_CONFIG_HOME/gtk-4.0/gtk.css` will
still take precedence over your changes, as it uses the
%GTK_STYLE_PROVIDER_PRIORITY_USER priority.

https://docs.gtk.org/gtk4/class.StyleContext.html

  • Constructor Details

  • Method Details

    • getClassHandler

      public static ClassHandler getClassHandler()
    • addClass

      public void addClass(@Nonnull Str class_name)
      Adds a style class to @context, so later uses of the
      style context will make use of this new class for styling.

      In the CSS file format, a `GtkEntry` defining a “search”
      class, would be matched by:

      ```css
      entry.search { ... }
      ```

      While any widget defining a “search” class would be
      matched by:
      ```css
      .search { ... }
      ```
      Parameters:
      class_name - class name to use in styling
    • addClass

      public void addClass(String class_name)
      Adds a style class to @context, so later uses of the
      style context will make use of this new class for styling.

      In the CSS file format, a `GtkEntry` defining a “search”
      class, would be matched by:

      ```css
      entry.search { ... }
      ```

      While any widget defining a “search” class would be
      matched by:
      ```css
      .search { ... }
      ```
      Parameters:
      class_name - class name to use in styling
    • addProvider

      public void addProvider(@Nonnull StyleProvider provider, int priority)
      Adds a style provider to @context, to be used in style construction.

      Note that a style provider added by this function only affects
      the style of the widget to which @context belongs. If you want
      to affect the style of all widgets, use
      [func@Gtk.StyleContext.add_provider_for_display].

      Note: If both priorities are the same, a `GtkStyleProvider`
      added through this function takes precedence over another added
      through [func@Gtk.StyleContext.add_provider_for_display].
      Parameters:
      provider - a `GtkStyleProvider`
      priority - the priority of the style provider. The lower it is, the earlier it will be used in the style construction. Typically this will be in the range between %GTK_STYLE_PROVIDER_PRIORITY_FALLBACK and %GTK_STYLE_PROVIDER_PRIORITY_USER
    • getBorder

      public void getBorder(@Nonnull Border border)
      Gets the border for a given state as a `GtkBorder`.
      Parameters:
      border - return value for the border settings
    • getColor

      public void getColor(@Nonnull RGBA color)
      Gets the foreground color for a given state.
      Parameters:
      color - return value for the foreground color
    • getDisplay

      public Display getDisplay()
      Returns the `GdkDisplay` to which @context is attached.
      Returns:
      a `GdkDisplay`.
    • getMargin

      public void getMargin(@Nonnull Border margin)
      Gets the margin for a given state as a `GtkBorder`.
      Parameters:
      margin - return value for the margin settings
    • getPadding

      public void getPadding(@Nonnull Border padding)
      Gets the padding for a given state as a `GtkBorder`.
      Parameters:
      padding - return value for the padding settings
    • getScale

      public int getScale()
      Returns the scale used for assets.
      Returns:
      the scale
    • getState

      public int getState()
      Returns the state used for style matching.

      This method should only be used to retrieve the `GtkStateFlags`
      to pass to `GtkStyleContext` methods, like
      [method@Gtk.StyleContext.get_padding].
      If you need to retrieve the current state of a `GtkWidget`, use
      [method@Gtk.Widget.get_state_flags].
      Returns:
      the state flags
    • hasClass

      public boolean hasClass(@Nonnull Str class_name)
      Returns %TRUE if @context currently has defined the
      given class name.
      Parameters:
      class_name - a class name
      Returns:
      %TRUE if @context has @class_name defined
    • hasClass

      public boolean hasClass(String class_name)
      Returns %TRUE if @context currently has defined the
      given class name.
      Parameters:
      class_name - a class name
      Returns:
      %TRUE if @context has @class_name defined
    • lookupColor

      public boolean lookupColor(@Nonnull Str color_name, @Nonnull RGBA color)
      Looks up and resolves a color name in the @context color map.
      Parameters:
      color_name - color name to lookup
      color - Return location for the looked up color
      Returns:
      %TRUE if @color_name was found and resolved, %FALSE otherwise
    • lookupColor

      public boolean lookupColor(String color_name, @Nonnull RGBA color)
      Looks up and resolves a color name in the @context color map.
      Parameters:
      color_name - color name to lookup
      color - Return location for the looked up color
      Returns:
      %TRUE if @color_name was found and resolved, %FALSE otherwise
    • removeClass

      public void removeClass(@Nonnull Str class_name)
      Removes @class_name from @context.
      Parameters:
      class_name - class name to remove
    • removeClass

      public void removeClass(String class_name)
      Removes @class_name from @context.
      Parameters:
      class_name - class name to remove
    • removeProvider

      public void removeProvider(@Nonnull StyleProvider provider)
      Removes @provider from the style providers list in @context.
      Parameters:
      provider - a `GtkStyleProvider`
    • restore

      public void restore()
      Restores @context state to a previous stage.

      See [method@Gtk.StyleContext.save].
    • save

      public void save()
      Saves the @context state.

      This allows temporary modifications done through
      [method@Gtk.StyleContext.add_class],
      [method@Gtk.StyleContext.remove_class],
      [method@Gtk.StyleContext.set_state] to be quickly
      reverted in one go through [method@Gtk.StyleContext.restore].

      The matching call to [method@Gtk.StyleContext.restore]
      must be done before GTK returns to the main loop.
    • setDisplay

      public void setDisplay(@Nonnull Display display)
      Attaches @context to the given display.

      The display is used to add style information from “global”
      style providers, such as the display's `GtkSettings` instance.

      If you are using a `GtkStyleContext` returned from
      [method@Gtk.Widget.get_style_context], you do not need to
      call this yourself.
      Parameters:
      display - a `GdkDisplay`
    • setScale

      public void setScale(int scale)
      Sets the scale to use when getting image assets for the style.
      Parameters:
      scale - scale
    • setState

      public void setState(int flags)
      Sets the state to be used for style matching.
      Parameters:
      flags - state to represent
    • toStr

      public Str toStr(int flags)
      Converts the style context into a string representation.

      The string representation always includes information about
      the name, state, id, visibility and style classes of the CSS
      node that is backing @context. Depending on the flags, more
      information may be included.

      This function is intended for testing and debugging of the
      CSS implementation in GTK. There are no guarantees about
      the format of the returned string, it may change.
      Parameters:
      flags - Flags that determine what to print
      Returns:
      a newly allocated string representing @context
    • addProviderForDisplay

      public static void addProviderForDisplay(@Nonnull Display display, @Nonnull StyleProvider provider, int priority)
      Adds a global style provider to @display, which will be used
      in style construction for all `GtkStyleContexts` under @display.

      GTK uses this to make styling information from `GtkSettings`
      available.

      Note: If both priorities are the same, A `GtkStyleProvider`
      added through [method@Gtk.StyleContext.add_provider] takes
      precedence over another added through this function.
      Parameters:
      display - a `GdkDisplay`
      provider - a `GtkStyleProvider`
      priority - the priority of the style provider. The lower it is, the earlier it will be used in the style construction. Typically this will be in the range between %GTK_STYLE_PROVIDER_PRIORITY_FALLBACK and %GTK_STYLE_PROVIDER_PRIORITY_USER
    • removeProviderForDisplay

      public static void removeProviderForDisplay(@Nonnull Display display, @Nonnull StyleProvider provider)
      Removes @provider from the global style providers list in @display.
      Parameters:
      display - a `GdkDisplay`
      provider - a `GtkStyleProvider`
    • getTypeID

      public static long getTypeID()
    • getParentTypeID

      public static long getParentTypeID()
    • getTypeSize

      public static TypeSystem.TypeSize getTypeSize()
    • getParentTypeSize

      public static TypeSystem.TypeSize getParentTypeSize()
    • getInstanceSize

      public static int getInstanceSize()