|
|
;----------------------------------------------------------------- ; NTL - Native Theme Language - 07/10/00 ;-----------------------------------------------------------------
Overview: ---------
An .ntl file describes the brushes, lines, rectangles, curves, and shapes needed to draw control parts.
The .ntl file is uses the standard Windows .ini file format with multiple sections and multiple "property = value" lines within each section.
There are 2 section types supported:
[OptionBits] - used to declare the option bit names/mappings used by the drawing sections
[Drawing(xxx)] - used to describe how to draw the state named "xxx"
OptionBits Section: -------------------
The [OptionBits] section contains properties lines of the form:
<name> = <number>
The <name> declares an option bit, whose bit number is specified by <number>. These options bits are passed by the theme-aware control in the lower 16 bits of the last DWORD param to DrawThemeBackground().
Once an optionbit is declared, its value can be tested by an "if" property in the [Drawing.xxx] sections.
Drawing Sections: -----------------
There are 3 types of drawing that can be done in a drawing section. A section can contain one or more of these but each type should complete before the next type starts.
1. Collapsing Border drawing In this mode, successive outer borders of a certain color, width, and height are drawn from the original rectangle specified for the control part inward, towards the center of the part. Properties allowed in this mode are:
AddBorder = SIZE <size4> COLOR <color4>
FillBorder = COLOR <color> FillBorder = IMAGEFILE <imagefile> FillBorder = NONE
Notes: - "FillRect" fills the adjusted rectangle with the specified color or by tiling the specified bitmap
2. FreeHand drawing
In this mode, we describe a brush and then can move, paint lines, and paint curves. There is no filling involved. The x,y point coordinates range from 0-1000, unless the "LogicalRect" property is specified to overrides them. These points are mapped at runtime to the part's actual rectangle. Properties allowed in this mode are:
LogicalRect = RECT <rect>
FillBrush = COLOR <color> FillBrush = IMAGEFILE <imagefile> FillBrush = NONE
LineBrush = COLOR <color> SIZE <size1> LineBrush = NONE
MoveTo = POINT <point> LineTo = POINT <point> CurveTo = CP1 <point> CP2 <point> POINT <point>
3. Filled Shape drawing In this mode, we describe a line brush and a fill brush and then describe the lines and curves of the shape. After the border of the shape is drawn with the line brush, it is filled with the fill brush. Properties allowed in this mode are: Shape = POINT <point>
FillBrush = COLOR <color> FillBrush = IMAGEFILE <imagefile> FillBrush = NONE
LineBrush = COLOR <color> SIZE <size1> LineBrush = NONE
LogicalRect = RECT <rect>
LineTo = POINT <point> CurveTo = CP1 <point> CP2 <point> POINT <point>
EndShape = POINT <point>
Notes: - A Shape subsection must start with a "Shape" property and end with a "EndShape" property
- "LineBrush" and "FillBrush" can only be specified once and must be the first 2 properties after "Shape".
There are also some general properties that can appear anywhere in a section (with the exception of "GotoState", which if used, must be placed at the end of a section). These properties are:
if = <option bit name> (on) if = <option bit name> (off) else = <option bit name> (on) else = <option bit name> (off)
endif = <option bit name>
SetOption = <option bit name> (on) SetOption = <option bit name> (off)
GotoState = <state name>
Note: when an "else" property is used, it must match the most recent, unmatched "if" property and have the opposite on/off setting.
Each "if" property must be matched with an "endif" property of the same <option bit name>.
Parameters: -----------
<imagefile> ::= [ INDEX <number> ]
<color> ::= <red number> <green number> <blue number> ::= <system color name (ex: WindowFrame)> ::= NONE
<color4> ::= <color> ::= <color> "," <color> ::= <color> "," <color> "," <color> "," <color> <point> ::= <x number> <y number>
<rect> ::= <left number> <top number> <right number> <bottom number>
<size1> ::= <size>
<size2> ::= <size> ::= <size> "," <size>
<size4> ::= <size> ::= <size> "," <size> ::= <size> "," <size> "," <size> "," <size>
<size> ::= <number> ::= <system metric name (ex: BorderWidth)>
|