dw::core::style::Style provides some resources and attributes for drawing widgets, as well as for parts of a widget (e.g., dw::Textblock uses styles for its words). Creating a style is done by filling a dw::core::style::StyleAttrs with the attributes and calling dw::core::style::Style::create:
dw::core::style::Style styleAttrs; dw::core::style::Style *style; dw::core::Layout *layout; // ... styleAttrs.foo = bar; // etc. style = dw::core::style::Style::create (&styleAttrs, layout); // do something with style
After this, the attributes of a dw::core::style::Style should not be changed anymore, since styles are often shared between different widgets etc. (see below). Most times, you simply copy the attributes of another style (possible, since dw::core::style::Style is a sub class of dw::core::style::StyleAttrs), modify them and create a new style:
styleAttrs = *anotherStyle; styleAttrs.foo = baz; style = dw::core::style::Style::create (&styleAttrs, layout);
The dw::core::style::Font structure can be created by dw::core::style::Font::create, in a similar, with dw::core::style::FontAttrs, and colors by dw::core::style::Color::create, passing 0xrrggbb as an argument. Furthermore, there is dw::core::style::Tooltip, created by dw::core::style::Tooltip::create.
Notice that fonts, colors and tooltips are only intended to be used in conjunction with dw::core::style::Style.
dw::core::style::Style will become important for CSS, each CSS attribute, which is supported by dillo, will refer to an attribute in dw::core::style::Style. For this reason, the attributes in dw::core::style::Style get the names from the CSS attributes, with "camelCase" instead of hyphens (e.g. "background-color" becomes "backgroundColor").
However, dw::core::style::Style will be extended by some more attributes, which are not defined by CSS. To distinguish them, they get the prefix "x_", e.g. dw::core::style::Style::x_link.
dw::core::style::Length is a simple data type for lengths and percentages:
For CSS lengths, there are two units: (i) pixels and absolute units, which have to be converted to pixels (a pixel is, unlike in the CSS specification, treated as absolute unit), and (ii) the relative units "em" and "ex" (see below).
Since many values in CSS may be either lengths or percentages, a single type is very useful.
Creating lengths:
Examine lengths:
For borders, margins etc., the box model defined by CSS2 is used. dw::core::style::Style contains some members defining these attributes. A dw::core::Widget must use these values for any calculation of sizes. There are some helper functions (see dw/style.hh). A dw::core::style::Style box looks quite similar to a CSS box:
The background color is stored in dw::core::style::Style::backgroundColor, which may be NULL (the background color of the parent widget is shining through).
For toplevel widgets, this color is set as the background color of the views (dw::core::View::setBgColor), for other widgets, a filled rectangle is drawn, covering the content and padding. (This is compliant with CSS2, the background color of the toplevel element covers the whole canvas.)
The following methods may be useful:
Memory management is done by reference counting, dw::core::style::Style::create returns a pointer to dw::core::style::Style with an increased reference counter, so you should care about calling dw::core::style::Style::unref if it is not used anymore. You do not need to care about the reference counters of fonts and styles.
In detail:
| typedef int dw::core::style::Length |
Type for representing all lengths within dw::core::style.
Lengths are int's. Absolute lengths are represented in the following way:
Percentages:
Relative lengths (only used in HTML):
This is an implementation detail, use one of the following functions:
Creating lengths:
Examine lengths:
"auto" lengths are represented as dw::core::style::LENGTH_AUTO.
| int dw::core::style::absLengthVal | ( | Length | l | ) | [inline] |
Returns the value of a length in pixels, as an integer.
Referenced by dw::Textblock::calcTextSize(), dw::Textblock::calcWidgetSize(), dw::Table::forceCalcCellSizes(), dw::Table::forceCalcColumnExtremes(), dw::Table::getExtremesImpl(), dw::Textblock::getWordExtremes(), dw::Image::sizeRequestImpl(), and dw::Textblock::wordWrap().
| Length dw::core::style::createAbsLength | ( | int | n | ) | [inline] |
Returns a length of n pixels.
| Length dw::core::style::createPerLength | ( | double | v | ) | [inline] |
Returns a percentage, v is relative to 1, not to 100.
| Length dw::core::style::createRelLength | ( | double | v | ) | [inline] |
Returns a relative length.
| void dw::core::style::drawBackground | ( | View * | view, | |
| Rectangle * | area, | |||
| int | x, | |||
| int | y, | |||
| int | width, | |||
| int | height, | |||
| Style * | style, | |||
| bool | inverse | |||
| ) |
Draw the background (content plus padding) of a region in window, according to style.
Used by dw::core::Widget::drawBox and dw::core::Widget::drawWidgetBox.
References dw::core::style::StyleAttrs::backgroundColor, dw::core::style::StyleAttrs::borderWidth, dw::core::style::Box::bottom, dw::core::View::drawRectangle(), dw::core::Rectangle::height, dw::core::Rectangle::intersectsWith(), dw::core::style::Box::left, dw::core::style::StyleAttrs::margin, dw::core::style::Box::right, dw::core::style::Color::SHADING_INVERSE, dw::core::style::Color::SHADING_NORMAL, dw::core::style::Box::top, dw::core::Rectangle::width, dw::core::Rectangle::x, and dw::core::Rectangle::y.
Referenced by dw::core::Widget::drawBox(), and dw::core::Widget::drawWidgetBox().
| void dw::core::style::drawBorder | ( | View * | view, | |
| Rectangle * | area, | |||
| int | x, | |||
| int | y, | |||
| int | width, | |||
| int | height, | |||
| Style * | style, | |||
| bool | inverse | |||
| ) |
Draw the border of a region in window, according to style.
Used by dw::core::Widget::drawBox and dw::core::Widget::drawWidgetBox.
References dw::core::style::Box::bottom, drawBorderBottom(), drawBorderLeft(), drawBorderRight(), drawBorderTop(), dw::core::style::Box::left, dw::core::style::StyleAttrs::margin, dw::core::style::Box::right, and dw::core::style::Box::top.
Referenced by dw::core::Widget::drawBox(), and dw::core::Widget::drawWidgetBox().
| static void dw::core::style::drawBorderBottom | ( | View * | view, | |
| Style * | style, | |||
| int | x1, | |||
| int | y1, | |||
| int | x2, | |||
| int | y2 | |||
| ) | [static] |
References BORDER_DASHED, BORDER_DOTTED, BORDER_DOUBLE, BORDER_GROOVE, BORDER_HIDDEN, BORDER_INSET, BORDER_NONE, BORDER_OUTSET, BORDER_RIDGE, BORDER_SOLID, dw::core::style::StyleAttrs::borderColor, dw::core::style::StyleAttrs::borderStyle, dw::core::style::StyleAttrs::borderWidth, dw::core::style::Box::bottom, dw::core::style::StyleAttrs::bottom, dw::core::View::drawLine(), dw::core::View::drawPolygon(), dw::core::View::drawTypedLine(), dw::core::style::Box::left, LINE_DASHED, LINE_DOTTED, dw::core::style::Box::right, dw::core::style::Color::SHADING_DARK, dw::core::style::Color::SHADING_LIGHT, dw::core::style::Color::SHADING_NORMAL, dw::core::Point::x, and dw::core::Point::y.
Referenced by drawBorder().
| static void dw::core::style::drawBorderLeft | ( | View * | view, | |
| Style * | style, | |||
| int | x1, | |||
| int | y1, | |||
| int | x2, | |||
| int | y2 | |||
| ) | [static] |
References BORDER_DASHED, BORDER_DOTTED, BORDER_DOUBLE, BORDER_GROOVE, BORDER_HIDDEN, BORDER_INSET, BORDER_NONE, BORDER_OUTSET, BORDER_RIDGE, BORDER_SOLID, dw::core::style::StyleAttrs::borderColor, dw::core::style::StyleAttrs::borderStyle, dw::core::style::StyleAttrs::borderWidth, dw::core::style::Box::bottom, dw::core::View::drawLine(), dw::core::View::drawPolygon(), dw::core::View::drawTypedLine(), dw::core::style::Box::left, dw::core::style::StyleAttrs::left, LINE_DASHED, LINE_DOTTED, dw::core::style::Color::SHADING_DARK, dw::core::style::Color::SHADING_LIGHT, dw::core::style::Color::SHADING_NORMAL, dw::core::style::Box::top, dw::core::Point::x, and dw::core::Point::y.
Referenced by drawBorder().
| static void dw::core::style::drawBorderRight | ( | View * | view, | |
| Style * | style, | |||
| int | x1, | |||
| int | y1, | |||
| int | x2, | |||
| int | y2 | |||
| ) | [static] |
References BORDER_DASHED, BORDER_DOTTED, BORDER_DOUBLE, BORDER_GROOVE, BORDER_HIDDEN, BORDER_INSET, BORDER_NONE, BORDER_OUTSET, BORDER_RIDGE, BORDER_SOLID, dw::core::style::StyleAttrs::borderColor, dw::core::style::StyleAttrs::borderStyle, dw::core::style::StyleAttrs::borderWidth, dw::core::style::Box::bottom, dw::core::View::drawLine(), dw::core::View::drawPolygon(), dw::core::View::drawTypedLine(), LINE_DASHED, LINE_DOTTED, dw::core::style::Box::right, dw::core::style::StyleAttrs::right, dw::core::style::Color::SHADING_DARK, dw::core::style::Color::SHADING_LIGHT, dw::core::style::Color::SHADING_NORMAL, dw::core::style::Box::top, dw::core::Point::x, and dw::core::Point::y.
Referenced by drawBorder().
| static void dw::core::style::drawBorderTop | ( | View * | view, | |
| Style * | style, | |||
| int | x1, | |||
| int | y1, | |||
| int | x2, | |||
| int | y2 | |||
| ) | [static] |
References BORDER_DASHED, BORDER_DOTTED, BORDER_DOUBLE, BORDER_GROOVE, BORDER_HIDDEN, BORDER_INSET, BORDER_NONE, BORDER_OUTSET, BORDER_RIDGE, BORDER_SOLID, dw::core::style::StyleAttrs::borderColor, dw::core::style::StyleAttrs::borderStyle, dw::core::style::StyleAttrs::borderWidth, dw::core::View::drawLine(), dw::core::View::drawPolygon(), dw::core::View::drawTypedLine(), dw::core::style::Box::left, LINE_DASHED, LINE_DOTTED, dw::core::style::Box::right, dw::core::style::Color::SHADING_DARK, dw::core::style::Color::SHADING_LIGHT, dw::core::style::Color::SHADING_NORMAL, dw::core::style::Box::top, dw::core::style::StyleAttrs::top, dw::core::Point::x, and dw::core::Point::y.
Referenced by drawBorder().
| bool dw::core::style::isAbsLength | ( | Length | l | ) | [inline] |
Returns true if l is an absolute length.
Referenced by dw::Textblock::calcTextSize(), dw::Textblock::calcWidgetSize(), dw::Table::forceCalcCellSizes(), dw::Table::forceCalcColumnExtremes(), dw::Table::getExtremesImpl(), dw::Textblock::getWordExtremes(), and dw::Image::sizeRequestImpl().
| bool dw::core::style::isPerLength | ( | Length | l | ) | [inline] |
Returns true if l is a percentage.
Referenced by dw::Table::apportion_percentages2(), dw::Table::forceCalcCellSizes(), dw::Table::forceCalcColumnExtremes(), dw::Textblock::getWordExtremes(), and dw::Textblock::wordWrap().
| bool dw::core::style::isRelLength | ( | Length | l | ) | [inline] |
Returns true if l is a relative length.
| void dw::core::style::numtostr | ( | int | num, | |
| char * | buf, | |||
| int | buflen, | |||
| ListStyleType | listStyleType | |||
| ) |
Convert a number into a string, in a given list style.
Used for ordered lists.
References LIST_STYLE_TYPE_DECIMAL, LIST_STYLE_TYPE_LOWER_ALPHA, LIST_STYLE_TYPE_LOWER_LATIN, LIST_STYLE_TYPE_LOWER_ROMAN, LIST_STYLE_TYPE_UPPER_ALPHA, LIST_STYLE_TYPE_UPPER_LATIN, LIST_STYLE_TYPE_UPPER_ROMAN, roman_I0, roman_I1, roman_I2, roman_I3, and strtolower().
| double dw::core::style::perLengthVal | ( | Length | l | ) | [inline] |
Returns the value of a percentage, relative to 1, as a double.
Referenced by dw::Textblock::calcTextSize(), dw::Textblock::calcWidgetSize(), dw::Table::forceCalcCellSizes(), dw::Table::forceCalcColumnExtremes(), and dw::Textblock::wordWrap().
| double dw::core::style::relLengthVal | ( | Length | l | ) | [inline] |
Returns the value of a relative length, as a float.
| static void dw::core::style::strtolower | ( | char * | s | ) | [static] |
Referenced by numtostr().
const char* const dw::core::style::roman_I0[] = { "","I","II","III","IV","V","VI","VII","VIII","IX" } [static] |
Referenced by numtostr().
const char* const * const dw::core::style::roman_I1[] = { "","X","XX","XXX","XL","L","LX","LXX","LXXX","XC" } [static] |
Referenced by numtostr().
const char* const * const * const dw::core::style::roman_I2[] = { "","C","CC","CCC","CD","D","DC","DCC","DCCC","CM" } [static] |
Referenced by numtostr().
const char* const * const * const * const dw::core::style::roman_I3[] = { "","M","MM","MMM","MMMM" } [static] |
Referenced by numtostr().
1.5.9