Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
AG_STYLESHEET(3)	     Library Functions Manual		AG_STYLESHEET(3)

NAME
     AG_StyleSheet -- agar cascading style sheets

SYNOPSIS
     #include <agar/core.h>
     #include <agar/gui.h>

DESCRIPTION
     The  graphical  appearance  of  Agar widgets (including typography, colors,
     paddings, spacings and decorations) is  determined  by  the  stylesheet  of
     their parent AG_Window(3).

     An  AG_StyleSheet	defines  a  set  of  attribute blocks.	Each block has a
     selector associated with it.  Selectors allow widgets to be targeted  based
     on  their	class  (E),  the class of their parent (E > F) or their instance
     names in relation to the class of their parent (E > "F").

     Selector conditions allow widgets to be styled based on their current geom-
     etry ("width", "height") or the zoom level of their windows ("zoom").

     Attributes defined by a stylesheet can be overridden on a	per  widget  in-
     stance basis with the AG_SetStyle(3) family of functions.

     Agar stylesheets allow C-style comments.

TYPOGRAPHY
     Style attributes are case-insensitive.  The following are available:

     font-family    The  name  of  the font face or the exact filename of a font
		    (e.g., "DejaVu Sans", "agar-ideograms.agbf", "foo.woff2").

     font-size	    The font size (e.g.,  "80%",  "10pts",  "10.5pts",	"12px").
		    Fonts of GUI elements are normally expressed in "%".

     font-weight    The  font  weight ("Thin", "ExtraLight", "Light", "Regular",
		    "SemiBold", "Bold", "ExtraBold", "Black" or "!parent").

     font-style     The font style ("Normal", "Italic", "Oblique" or "!parent").

     font-stretch   Width  variant  ("Normal",	"UltraCondensed",   "Condensed",
		    "SemiCondensed", "SemiExpanded", "Expanded", "UltraExpanded"
		    or "!parent").

     The  font-family attribute selects the type face.	Agar will look up system
     fonts (via fontconfig), Core Fonts as well as user-installed  fonts  (under
     AG_Config(3)  AG_CONFIG_PATH_FONTS).   Matching  is case-insensitive except
     for fonts which are referenced by filename.

     The font-size attribute sets the  font  size  either  in  points  ("10pts",
     "10.5pts")  for  vector fonts, pixels ("12px") for bitmap fonts, or in per-
     centage of the parent widget font's  size	("80%").   Generally,  the  font
     sizes  of GUI elements should be given in "%" so that the zoom function may
     work as expected (the AG_ZoomIn(3) and AG_ZoomOut(3) functions work by sim-
     ply increasing or decreasing the target window's "font-size").

     The font-weight attribute sets the weight of the font:

     Thin	  Wt#100 Thin
     ExtraLight   Wt#200 Extra Light / Ultra Light
     Light	  Wt#300 Light
     Regular	  Wt#400 Regular / Normal
     SemiBold	  Wt#600 Semi Bold / Demi Bold
     Bold	  Wt#700 Bold
     ExtraBold	  Wt#800 Extra Bold
     Black	  Wt#900 Black / Heavy
     !Parent	  (opposite of parent)

     The font-style attribute selects the style of the font:

     Italic    Italic style (with Oblique fallback)
     Oblique   Oblique style (with Italic fallback)
     !Parent   (opposite of parent)

     The font-stretch attribute selects the width variant:

     UltraCondensed    50.0% - Ultra Condensed
     Condensed	       75.0% - Condensed
     SemiCondensed     87.5% - Semi Condensed / Demi Condensed
     SemiExpanded     112.5% - Semi Expanded / Demi Expanded
     Expanded	      125.0% - Expanded
     UltraExpanded    200.0% - Ultra Expanded
     !Parent	      (opposite of parent)

COLORS
     Color-defining style attributes include:

     color		Foreground primary
     background-color	Background primary
     text-color 	Text and vector icons
     line-color 	Lines and filled shapes
     high-color 	Shading (top and left)
     low-color		Shading (bottom and right)
     selection-color	Selection primary

     Colors allow an optional state selector (e.g., "color#focused").  If no se-
     lector is given then the given color is assigned to all states.

     #unfocused   Widget is not focused (default state).
     #focused	  Widget is focused (see AG_WidgetFocus(3)).
     #disabled	  Widget is disabled (see AG_WidgetDisable(3)).
     #hover	  Cursor is over the widget (MOUSEOVER is set).

     Color values can be specified using any one of the  representations  below.
     See AG_ColorFromString(3) for details.

     8-bit Device RGB		 "r,g,b[,a]" or "rgb(r,g,b[,a])"
     16-bit Device RGB		 "rgb16(r,g,b[,a])"
     Hue, Saturation and Value	 "hsv(h,s,v[,a])"
     16-bit hex 		 "#rgb[a]"
     32-bit hex 		 "#rrggbb[aa]"
     64-bit hex 		 "#rrrrggggbbbb[aaaa]"
     Color keyword		 "AliceBlue", "antiquewhite"

     RGBA  and	HSV  components may be expressed in "%" (in relation to the same
     color entry in the parent widget's palette).

     Color keywords are matched case-insensitively.

PADDING AND SPACING
     Paddings, margins and inner spacings are specified in pixels:

     padding   "<Number>", "<T> <R> <B> <L>" or "inherit"
     margin    "<Number>", "<T> <R> <B> <L>" or "inherit"
     spacing   "<Number>", "<H> <V>" or "inherit"

     The padding attribute sets the inner padding amount in pixels.  If given as
     a single "<Number>", the same amount is applied  to  all  sides.	Negative
     values are allowed, and may be used to condense content.

     The margin attribute sets the outer margin amount in pixels.  If given as a
     single  "<Number>",  the  same  amount is applied to all sides.  The margin
     amounts must be positive.

     The spacing attribute sets the horizontal and vertical spacings between in-
     ner elements of a widget.	If given as a single "<Number>", the same amount
     is used for both horizontal and vertical spacings.  Negative values are al-
     lowed, and may be used to condense content.

     Margin is handled generically by container widgts.  Padding and inner spac-
     ings are implemented in a widget-specific way.   Different  widget  classes
     will handle padding and spacing differently.

C INTERFACE
     void AG_InitStyleSheet(AG_StyleSheet *ss)

     void AG_DestroyStyleSheet(AG_StyleSheet *css)

     AG_StyleSheet * AG_LoadStyleSheet(void *obj, const char *path)

     int  AG_LookupStyleSheet(AG_StyleSheet *css, void *widget, const char *key,
     char **rv)

     The AG_InitStyleSheet() function initializes the given AG_StyleSheet as  an
     empty style sheet.  AG_DestroyStyleSheet() releases all resources allocated
     by a style sheet.

     The  AG_LoadStyleSheet()  function  loads a style sheet from path.  On suc-
     cess, a newly allocated AG_StyleSheet is returned.  If path begins  with  a
     "_"  character,  AG_LoadStyleSheet()  will search for a statically-compiled
     stylesheet (i.e., "_agStyleDefault" is always available).

     The AG_LookupStyleSheet() routine searches the style sheet for  the  speci-
     fied  attribute  (identified  by  key).   If the style sheet defines an at-
     tribute applicable to the specified widget instance (the widget  argument),
     its value is returned into rv.

EXAMPLES
     Agar's  default  stylesheet  is  compiled from gui/style.css.  It is a good
     starting point for writing new stylesheets.

     The following stylesheet fragment selects	a  condensed  font,  tweaks  the
     color scheme and sets padding values for the AG_Button(3) class:

     AG_Button {
	     font-family: league-gothic;
	     font-stretch: condensed;
	     font-size: 120%;

	     color: AntiqueWhite;
	     text-color: #000;

	     color#disabled: rgb(200,200,200);
	     text-color#disabled: rgb(125,125,125);

	     high-color#hover: red;
	     low-color#hover: darkred;

	     padding: 5 4 5 4;	    /* TRBL */
     }

     The following example uses an E > F (children of class) selector to set the
     color of all buttons embedded in the AG_Numerical(3) widget:

     AG_Numerical > AG_Button {
	     color: blue;
     }

     The  following example uses an E > "F" (children named) selector to set the
     color of specific button instances embedded in the AG_Numerical(3) widget:

     AG_Numerical > "increm" {
	     color: red;
     }
     AG_Numerical > "decrem" {
	     color: green;
     }

     The following example switches to a condensed font when the  width  of  the
     widget is below a given threshold:

     AG_HSVPal {
	     font-family: league-gothic;
	     font-size: 140%;
     }
     AG_HSVPal (width < 90) {
	     font-family: league-gothic-condensed;
	     font-size: 120%;
     }

     By  default,  a widget instance inherits its style attributes from its par-
     ent.  The syntax allows certain attributes, such as "font-size" and "color"
     to be specified in relation to the parent.  For example:

     font-size: 50%;		     # Half of parent font size
     color: hsv(100%,50%,100%);      # Half of parent saturation
     color: hsv(100%,100%,75%);      # 3/4 of parent value

SEE ALSO
     AG_Intro(3), AG_Widget(3), AG_Window(3)

HISTORY
     A very basic AG_StyleSheet language first appeared  in  Agar  1.5.0.   Agar
     1.6.0 improved parsing and validation, introduced a new color scheme, added
     typography  features  as well as "padding" and "spacing".	Agar 1.7.0 added
     "margin" and extended "font-weight" and "font-stretch" to include all stan-
     dard weights and width variants.  The selectors E > F (children  of  class)
     and E > "F" (children named) appeared in Agar 1.7.0.

Agar 1.7			February 18, 2023		AG_STYLESHEET(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=AG_StyleSheet&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help