Windows Toolkit Invalid Class

-->

The Win2D Path Mini Language is a powerful and sophisticated language based on the SVG Path language specification. It facilitates specifying complex geometries, color, brushes, strokes and stroke styles in a more compact manner.

Windows 10 deployments using the Microsoft Deployment Toolkit (MDT) build 8456 fail when used with the Windows Assessment and Deployment Kit (ADK) for Windows 10, version 2004. The BIOS firmware type is incorrectly identified as UEFI resulting in failures when refreshing an existing computer with a new version of Windows. When this issue occurs. Instead, awt.dll must be reloaded and the. class loader which loaded WToolkit must be finalized before it is. safe to reuse AWT. Dynamic reusability may be added to the toolkit in. the future./ /. Initializes the Toolkit for use in an embedded environment. @return true if the the initialization succeeded; false if it failed. Jun 07, 2021 In this article we will walk through a handful of scenarios and techniques for input validation with the ObservableValidator class of Microsoft MVVM Toolkit. We will cover canonical property validation, comparing two (or more) properties, comparing the new value of a property to its previous one, delaying the validation, and preventing to assign an invalid.

Using the Win2D Path Mini Language, the geometry from the initial CanvasPathGeometry example can be created in the following way:

Requirements

Device familyUniversal, MinVersion or higher
NamespaceMicrosoft.Toolkit.Uwp.UI.Media.Geometry
NuGet packageMicrosoft.Toolkit.Uwp.UI.Media

Table of Contents

  • Introduction
  • Path Mini Language
  • CanvasBrush Mini Language
    • ICanvasBrush Attribute Commands
  • CanvasStrokeStyle Mini Language
    • CanvasStrokeStyle Attributes
  • CanvasStroke Mini Language

Win2D Path Mini Language Overview

Win2D Path Mini Language syntax derives from the SVG path syntax. It is a prefix notation (i.e., commands followed by parameters). In order to ensure that the data, specified in Win2D Path Mini Language, is concise the following rules must be followed

  • The commands are can be expressed as one , two or three characters (e.g., a Move command is expressed as an M , a LinearGradientBrush command is expressed as LG ).
  • Superfluous white space and separators such as commas can be eliminated (e.g., M 100 100 L 200200 contains unnecessary spaces and could be expressed more compactly as M100 100L200 200 ).
  • The command letter can be eliminated on subsequent commands if the same command is used multiple times in a row (e.g., you can drop the second 'L' in 'M 100 200 L 200 100 L - 100 -200' and use 'M 100 200 L 200 100 -100 -200' instead).
  • Relative versions of all commands are available (uppercase means absolute coordinates, lowercase means relative coordinates).
  • Most of the parameters are either integer or floating-point values. The only allowable decimal point is a Unicode U+0046 FULL STOP ('.') character (also referred to in Unicode as PERIOD, dot, and decimal point) and no other delimiter characters are allowed [UNICODE]. (For example, the following is an invalid numeric value in a path data stream: '13,000.56'. Instead, say: '13000.56'.)
  • For the relative versions of the commands, all coordinate values are relative to the current point at the start of the command.

In the following sections, the following notation is used:

  • () indicates the grouping of parameters.
  • + indicates one or more of the given parameter(s) is required.
  • [] indicates any one of the values specified within the square brackets. For e.g. [01] means either 0 or 1.
  • ? denotes an optional parameter

Path Mini Language

Paths represent the outline of a shape, which can be filled, stroked, used as a clipping path, or any combination of the three.

A path is described using the concept of a current point. In an analogy with drawing on paper, the currentpoint can be thought of as the location of the pen. The position of the pen can be changed, and the outlineof a shape (open or closed) can be traced by dragging the pen in either straight lines or curves.

A path can be defined using the following commands

Fill Behavior

Format
F [01]Absolute
f [01]Relative

Fill Behavior specifies how the intersecting areas of geometries or figures are combined to form the area of the composite geometry. It represents the CanvasFilledRegionDetermination enumeration which is based on D2D1_FILL_MODE enumeration. The Fill Behavior parameter can be either 0 or 1.

The parameter value 0 indicates CanvasFilledRegionDetermination.Alternate which determines whether a point is in the fill region by drawing a ray from that point to infinity in any direction, and then counting the number of path segments within the given shape that the ray crosses. If this number is odd, the point is in the fill region; if even, the point is outside the fill region.

The parameter value 1 indicates CanvasFilledRegionDetermination.Winding which determines whether a point is in the fill region of the path by drawing a ray from that point to infinity in any direction, and then examining the places where a segment of the shape crosses the ray. Starting with a count of zero, add one each time a segment crosses the ray from left to right and subtract one each time a path segment crosses the ray from right to left, as long as left and right are seen from the perspective of the ray. After counting the crossings, if the result is zero, then the point is outside the path. Otherwise, it is inside the path.

Each Path data should have only one Fill Behavior specified. Otherwise, an exception will be raised.

CanvasPathGeometry invokes the CanvasPathBuilder.SetFilledRegionDetermination() API for this command.

MoveTo

Format
M (x y)+Absolute
m (x y)+Relative

The MoveTo command establishes a new current point. The effect is as if the 'pen' were lifted and moved to a new location. A path data segment must begin with a Move command. Subsequent 'moveto' commands (i.e., when the Move is not the first command) represent the start of a new subpath.

M (uppercase) indicates that absolute coordinates will follow whereas m (lowercase) indicates that relative coordinates will follow.

If a MoveTo command is followed by multiple pairs of coordinates, the subsequent pairs aretreated as implicit LineTo commands. Hence, implicit LineTo commands will be relative if the MoveTo command is relative and absolute if the MoveTo command is absolute.

If a relative MoveTo (m) command appears as the first element of the path, then its parameters are treated as a pair of absolute coordinates.

In this case, subsequent pairs of coordinates are treated as relative even though the initial MoveTo is interpreted as an absolute MoveTo.

CanvasPathGeometry invokes the CanvasPathBuilder.BeginFigure() API for this command.

LineTo

Format
L (x y)+Absolute
l (x y)+Relative

Draws a line from the current point to the specified (x,y) coordinate. (x,y) becomes the new current point.

L (uppercase) indicates that absolute coordinates will follow whereas l (lowercase) indicates that relative coordinates will follow.

A number of coordinates pairs may be specified to draw a polyline. At the end of the command, the new current point is set to the final set of coordinates provided.

CanvasPathGeometry invokes the CanvasPathBuilder.AddLine() API for this command.

Horizontal LineTo

Format
H x+Absolute
h x+Relative

Draws a horizontal line from the current point (cpx, cpy) to (x, cpy).

H (uppercase) indicates that absolute coordinates will follow whereas h (lowercase) indicates that relative coordinates will follow.

Multiple x values can be provided (although usually this doesn't make sense). At the end of the command, the new current point becomes ( x, cpy ) for the final value of x.

CanvasPathGeometry invokes the CanvasPathBuilder.AddLine() API for this command.

Vertical LineTo

Format
V y+Absolute
v y+Relative

Draws a vertical line from the current point (cpx, cpy) to (cpx, y).

V (uppercase) indicates that absolute coordinates will follow whereas v (lowercase) indicates that relative coordinates will follow.

Multiple y values can be provided (although usually this doesn't make sense). At the end of the command, the new current point becomes (cpx, y) for the final value of y.

CanvasPathGeometry invokes the CanvasPathBuilder.AddLine() API for this command.

Cubic Bézier

Format
C (x1 y1 x2 y2 x y)+Absolute
c (x1 y1 x2 y2 x y)+Relative

Draws a cubic Bézier curve from the current point to (x,y) using (x1,y1) as the control point at the beginning of the curve and (x2,y2) as the control point at the end of the curve.

C (uppercase) indicates that absolute coordinates will follow whereas c (lowercase) indicates that relative coordinates will follow.

Multiple sets of coordinates may be specified to draw a polybézier. At the end of the command, the new current point becomes the final (x,y) coordinate pair used in the polybézier.

CanvasPathGeometry invokes the CanvasPathBuilder.AddCubicBezier() API for this command.

Smooth Cubic Bézier

Format
S (x2 y2 x y)+Absolute
s (x2 y2 x y)+Relative

Draws a cubic Bézier curve from the current point to (x,y). The first control point is assumed to be the reflection of the second control point on the previous command relative to the current point. (If there is no previous command or if the previous command was not a C, c, S or s , assume the first control point is coincident with the current point.)

(x2,y2) is the second control point (i.e., the control point at the end of the curve).

S (uppercase) indicates that absolute coordinates will whereas s (lowercase) indicates that relative coordinates will follow.

Multiple sets of coordinates may be specified to draw a polybézier. At the end of the command,the new current point becomes the final (x,y) coordinate pair used in the polybézier.

CanvasPathGeometry invokes the CanvasPathBuilder.AddCubicBezier() API for this command.

Quadratic Bézier

Format
Q (x1 y1 x y)+Absolute
q (x1 y1 x y)+Relative

Draws a quadratic Bézier curve from the current point to (x,y) using (x1,y1) as the control point.

Q (uppercase) indicates that absolute coordinates will whereas q (lowercase) indicates that relative coordinates will follow.

Multiple sets of coordinates may be specified to draw a polybézier. At the end of the command, the new current point becomes the final (x,y) coordinate pair used in the polybézier.

CanvasPathGeometry invokes the CanvasPathBuilder.AddQuadraticBezier() API for this command.

Smooth Quadratic Bézier

Format
T (x y)+Absolute
t (x y)+Relative

Draws a quadratic Bézier curve from the current point to (x,y). The control point is assumed to be the reflection of the control point on the previous command relative to the current point. (If there is no previous command or if the previous command was not a Q, q, T or t , assume the control point is coincident with the currentpoint.)

T (uppercase) indicates that absolute coordinates will whereas t (lowercase) indicates that relative coordinates will follow.

Multiple sets of coordinates may be specified to draw a polybézier. At the end of the command the new current point becomes the final (x,y) coordinate pair used in the polybézier.

CanvasPathGeometry invokes the CanvasPathBuilder.AddQuadraticBezier() API for this command.

Arc

Format
A (radius radiusY angle IsLargeFlag SweepDirection x y)+Absolute
a (radius radiusY angle IsLargeFlag SweepDirection x y)+Relative

Draws an elliptical arc from the current point to ( x , y ). The size and orientation of the ellipse are defined by two radii ( rx , ry ) and an x-axis-rotation , which indicates how the ellipse as a whole is rotated relative to the current coordinate system. The center ( cx , cy ) of the ellipse is calculated automatically to satisfy the constraintsimposed by the other parameters.

IsLargeFlag specifies whether an arc should take the longer or shorter way, around the ellipse to join its start and end points (0 denotes the arc’s sweep should be π or less whereas 1 denotes the arc’s sweep should be π or more).

SweepDirection specifies the direction that an elliptical arc is drawn (0 meansCounterClockwise and 1 means Clockwise).

CanvasPathGeometry invokes the CanvasPathBuilder.AddArc() API for this command.

Close Path

Format
Z
z

Closes the current subpath by drawing a straight line from the current point to current subpath's initial point. Since the Z and z commands take no parameters, they have an identical effect.

CanvasPathGeometry invokes the CanvasPathBuilder.EndFigure() API for this command.

Ellipse Figure

Format
O (radiusX radiusY x y)+Absolute
o (radiusX radiusY x y)+Relative

Adds an Ellipse Figure to the path. The radiusX and radiusY parameters denote the elliptical radii on the x-axis and y-axis respectively. ( x y ) denotes the center of the Ellipse. The current point remains unchanged.

CanvasPathGeometry internally invokes the CanvasPathBuilder.AddEllipseFigure() extension method for this command.

Polygon Figure

Format
P (numSides radius x y)+Absolute
p (numSides radius x y)+Relative

Adds an n-sided Polygon to the path. The radius parameter denotes the radius of the circle circumscribing the polygon vertices. ( x y ) denotes the center of the polygon. The current point remains unchanged.

This command internally invokes the CanvasPathBuilder.AddPolygonFigure() extension method.

Rectangle Figure

Format
R (x y width height)+Absolute
r (x y width height)+Relative

Adds a Rectangle to the path. ( x y ) denotes the top left corner of the Rectangle. The current point remains unchanged.

CanvasPathGeometry internally invokes the CanvasPathBuilder.AddRectangleFigure() extension method for this command.

RoundedRectangle Figure

Format
U (x y width height radiusX radiusY)+Absolute
u (x y width height radiusX radiusY)+Relative

Adds a RoundedRectangle to the path. ( x y ) denotes the top left corner of the RoundedRectangle. radiusX and radiusY denote the radii of the corner curves on the x-axis and y-axis respectively. The current point remains unchanged.

CanvasPathGeometry internally invokes the CanvasPathBuilder.AddRoundedRectangleFigure() extension method for this command.

CanvasBrush Mini Language

This section describes in detail how a Win2D brush can be defined as a string and an instance created from it. Using the CanvasBrush Mini Language the following Win2D brushes can be created (they all implement the ICanvasBrush interface)

  • SolidColorBrush
  • CanvasLinearGradientBrush
  • CanvasRadialGradientBrush

The Win2D Path Mini Language uses the following syntax to define a brush and its attributes

Format
<BrushTypeCommand> (<BrushAttributeCommand> <BrushAttributeParameters>)+

Some of the attributes are optional while the others are mandatory. The order in which the attributes are specified should be maintained.

ICanvasBrush Attribute Commands

This section describes the various brush attributes that will be used to define and construct an ICanvasBrush.

Start Point

Microsoft
Format
M (x y)

Denotes the point on the canvas where the gradient starts.

End Point

Format
Z (x y)

Denotes the point on the canvas where the gradient ends.

Windows toolkit invalid classic

Opacity

Format
O opacity

Denotes the opacity of the brush. The opacity parameter should have a value in the range [0, 1].

Alpha Mode

Format
A [012]

Specifies the way in which an alpha channel affects color channels. This attribute corresponds to the CanvasAlphaMode enumeration. Default is 0 ( Premultiplied ).

MemberDescription
Premultiplied0The alpha value has been premultiplied. In blending, each color is scaled by the alpha value. Note that the alpha value itself is the same in both straight and premultiplied alpha. Typically, no color channel value is greater than the alpha channel value.
Straight1The alpha channel indicates the transparency of the color.
Ignore2The alpha value is ignored.

Buffer Precision

Format
B [01234]

Specifies the bit depth used for graphical computations. This attribute corresponds to theCanvasBufferPrecision | enumeration |. Default is 0 ( |Precision8UIntNormalized ).

ValueMemberDescription
Precision8UIntNormalized0Use 8-bit normalized integer per channel.
Precision8UIntNormalizedSrgb1Use 8-bit normalized integer standard RGB data per channel.
Precision16UIntNormalized2Use 16-bit normalized integer per channel.
Precision16Float3Use 16-bit floats per channel.
Precision32Float4Use 32-bit floats per channel.

Edge Behavior

Format
E [012]

Specifies the behavior for pixels which fall outside of the gradient's typical rendering area. This attribute corresponds to the CanvasEdgeBehavior enumeration. Default is 0 ( Clamp ).

MemberValueDescription
Clamp0Repeat the edge pixels of the brush's content.
Wrap1Tile the brush's content.
Mirror2Tile the the brush's content, and flip each alternate tile.

Pre Interpolation Color Space

Format
P [012]

Specifies the color space to be used before interpolation. This attribute corresponds to the CanvasColorSpaceenumeration. Default value is 1 ( Srgb ).

MemberValueDescription
Custom0The color space is a custom ICC ColorManagementProfile.
Srgb1The color space is sRGB.
ScRgb2The color space is scRGB.

Post Interpolation Color Space

Format
R [012]

Specifies the color space to be used after interpolation. This attribute corresponds to the CanvasColorSpaceenumeration. Default value is 1 ( Srgb ).

MemberValueDescription
Custom0The color space is a custom ICC ColorManagementProfile.
Srgb1The color space is sRGB.
ScRgb2The color space is scRGB.

Origin Offset

Format
F (x y)

Specifies a displacement from Center, used to form the brush's radial gradient.

GradientStop

Format
S (offset hexColor)+

Specifies one or more gradient stops (using Hexadecimal Color) in a gradient brush.

The parameter offset refers to the position of the gradient stop and should be a floating-point number between 0 and 1, inclusive.

The parameter hexColor denotes the color specified in #RRGGBB or #AARRGGBB format.

Example:

GradientStopHdr

Format
S (offset x y z w)+

Specifies one or more high dynamic range gradient stops in a gradient brush.

The parameter offset refers to the position of the gradient stop and it should be a floating-point number between 0 and 1, inclusive.

The parameters x, y, z and w denote the components of the high dynamic range color.

Example:

SolidColorBrush

Format
SC hexColor (O opacity)?
SC x y z w (O opacity)?

The SolidColorBrush is defined by the SC command. It has two attributes - Color and Opacity.

The Color attribute is specified as either a Hexadecimal Color or a High Dynamic Range Color.

The Opacity attribute is optional and can be specified with the O attribute command and an opacity value in the range [0, 1].

Example:

Windows Toolkit Invalid Class

LinearGradientBrush

Format
LGM x0 y0 Z x1 y1 (O opacity A [012] B [01234] E [012] P [012] R [012])? S (offset hexColor)+

The LinearGradientBrush is defined by the LG command. It has the following mandatory attributes

  • StartPoint ( M )
  • EndPoint ( Z )
  • GradientStops ( S )

It also has the following optional attributes

  • Opacity ( O )
  • Alpha Mode ( A )
  • Buffer Precision ( B )
  • Edge Behavior ( E )
  • Pre Interpolation Color Space ( P )
  • Post Interpolation Color Space ( R )

Example:

LinearGradientBrush with GradientStopHdr

Format
LH M x0 y0 Z x1 y1 (O opacity A [012] B [01234] E [012] P [012] R [012])? S (offset x y z w)+

The LinearGradientBrush with GradientStopHdr is defined by the LH command. It has the following mandatory attributes

  • StartPoint ( M )
  • EndPoint ( Z )
  • GradientStopHdrs ( S )

It also has the following optional attributes

  • Opacity ( O )
  • Alpha Mode ( A )
  • Buffer Precision ( B )
  • Edge Behavior ( E )
  • Pre Interpolation Color Space ( P )
  • Post Interpolation Color Space ( R )

Example:

RadialGradientBrush

Format
RG radX radY x y (O opacity A [012] B [01234] E [012] F x1 y1 P [012] R [012])? S (offset hexColor)+

The RadialGradientBrush is defined by the RG command. It has the following mandatory attributes

  • RadiusX
  • RadiusY
  • CenterX ( x )
  • CenterY ( y )
  • GradientStops ( S )

It also has the following optional attributes

  • Opacity ( O )
  • Alpha Mode ( A )
  • Buffer Precision ( B )
  • Edge Behavior ( E )
  • Origin Offset ( F )
  • Pre Interpolation Color Space ( P )
  • Post Interpolation Color Space ( R )

Example:

RadialGradientBrush with GradientStopHdr

Format
RH radX radY x y (O opacity A [012] B [01234] E [012] F x1 y1 P [012] R [012])? S (offset x y z w)+

Command Parameter

The RadialGradientBrush is defined by the RG command. It has the following mandatory attributes

  • RadiusX
  • RadiusY
  • CenterX ( x )
  • CenterY ( y )
  • GradientStopHdrs ( S )

It also has the following optional attributes

  • Opacity ( O )
  • Alpha Mode ( A )
  • Buffer Precision ( B )
  • Edge Behavior ( E )
  • Origin Offset ( F )
  • Pre Interpolation Color Space ( P )
  • Post Interpolation Color Space ( R )

Example:

CanvasStrokeStyle Mini Language

The Microsoft.Graphics.Canvas.Geometry.CanvasStrokeStyle class defines a stroke style for drawing lines.The stroke style describes whether the line comprises of dashes, dots, or solid line, how to join line segments, how to cap the ends, etc.

This section describes in detail how a CanvasStrokeStyle can be defined as a string and a CanvasStrokeStyle instance created from it.

The Win2D Path Mini Language uses the following format to define a CanvasStrokeStyle and its attributes

Format
CSS (<StrokeStyleAttributeCommand><StrokeStyleAttributeParameter>)+

Some of the attributes are optional while the others are mandatory. The order in which the attributes arespecified should be maintained.

CanvasStrokeStyle Attributes

This section describes the various stroke attributes that are used to define and construct a CanvasStrokeStyle object.

Dash Style

Format
DS [01234]

Describes the sequence of dashes, dots, and gaps in a stroke style. This attribute is ignored if theCustomDashStyle attribute is set. This attribute corresponds to the CanvasDashStyle enumeration. Defaultvalue is 0 ( Solid ).

MemberValueDescription
Solid0A solid line with no breaks.
Dash1A dash followed by a gap of equal length. The dash and the gap are each twice as long as the stroke thickness. The equivalent custom dash style is {2, 2}.
Dot2A dot followed by a longer gap. The equivalent custom dash style is {0, 2}.
DashDot3A dash, followed by a gap, followed by a dot, followed by another gap. The equivalent custom dash style is {2, 2, 0, 2}.
DashDotDot4A dash, followed by a gap, followed by a dot, followed by another gap, followed by another dot, followed by another gap. The equivalent custom dash style is {2, 2, 0, 2, 0, 2}.

Line Join

Format
LJ [0123]

Describes the shape that joins two lines or segments. This attribute corresponds to the CanvasLineJoinenumeration. Default value is 0 (Miter).

MemberValueDescription
Miter0Regular angular vertices.
Bevel1Beveled vertices.
Round2Rounded vertices.
MiterOrBevel3Regular angular vertices unless the join would extend beyond the miter limit; otherwise, beveled vertices.

Miter Limit

Format
ML limit

Describes the limit on the ratio of the miter length to half the stroke's thickness.

Dash Offset

Format
DO offset

Describes how far into the dash sequence the stroke will start.

Start Cap

Format
SC [0123]

Describes the type of shape used at the beginning of a stroke. This attribute corresponds to theCanvasCapStyle enumeration. Default value is 0 (Flat).

MemberValueDescription
Flat0A cap that does not extend past the last point of the line.
Square1Half of a square that has a length equal to the line thickness.
Round2A semicircle that has a diameter equal to the line thickness.
Triangle3An isosceles right triangle whose hypotenuse is equal in length to the thickness of the line.

End Cap

Format
EC [0123]

Describes the type of shape used at the beginning of a stroke. This attribute corresponds to theCanvasCapStyle enumeration. Default value is 0 (Flat).

MemberValueDescription
Flat0A cap that does not extend past the last point of the line.
Square1Half of a square that has a length equal to the line thickness.
Round2A semicircle that has a diameter equal to the line thickness.
Triangle3An isosceles right triangle whose hypotenuse is equal in length to the thickness of the line.

Dash Cap

Format
DC [0123]

Describes the type of shape used at the beginning of a stroke. This attribute corresponds to theCanvasCapStyle enumeration. Default value is 0 ( Flat ).

MemberValueDescription
Flat0A cap that does not extend past the last point of the line. If Dash Cap is set to Flat, dots will have zero size so only dashes are visible.
Square1Half of a square that has a length equal to the line thickness.
Round2A semicircle that has a diameter equal to the line thickness.
Triangle3An isosceles right triangle whose hypotenuse is equal in length to the thickness of the line.

Transform Behavior

Format
TB [012]

Describes how the world transforms, dots per inch (DPI), and stroke width affect the shape of the pen. This attribute corresponds to the CanvasStrokeTransformBehavior enumeration. Default value is 0 (Normal).

MemberValueDescription
Normal0The stroke respects the width. currently set world transform, the DPI, and the stroke
Fixed1The stroke does not respect the world transform but it does respect the DPI and stroke width.
Hairline2The stroke is forced to 1 pixel wide (in device space) and does not respect theworld transform, the DPI, or the stroke width.

Custom Dash Style

Format
CDS (dashSize spaceSize)+

Describes an array describing a custom dash pattern. The array elements specify the length of each dash and space in the pattern. The first element sets the length of a dash, the second element sets the length of a space, and the third element sets the length of a dash, and so on. The length of each dash and space in the dash pattern is the product of the element value in the array and the stroke width.

Note

This overrides the DashStyle property, which is only used when CustomDashStyle is set to null.

This array must contain an even number of elements.

Example:

Defining the CanvasStrokeStyle

Using the attributes defined in the previous section the CanvasStrokeStyle can be defined in the following way

Format
CSS (DS [01234] LJ [0123] ML limit DO offset SC [0123] EC [0123] DC [0123] TB [012] CDS (dashSize spaceSize)+ )?

All the attributes of CanvasStrokeStyle are optional. If none of the attributes is specified in the CanvasStrokeStyle definition string, then the default CanvasStrokeStyle object is created.

Note

Microsoft Toolkit Invalid Class

While specifying the attributes, the order of the attributes must be maintained.

Example:

CanvasStroke Mini Language

ICanvasStroke interface and CanvasStroke class

In Win2D, the stroke, that is used to render an outline to a CanvasGeometry, is comprised of three components

  • Stroke Width – defines the width of the stroke.
  • Stroke Brush – defines the ICanvasBrush that will be used to render the stroke.
  • Stroke Style – defines the CanvasStrokeStyle for the stroke.
  • Transform - defines the Transform property of the stroke brush.

ICanvasStroke interface, defined in the Microsoft.Toolkit.Uwp.UI.Media.Geometry namespace, encapsulates these three components and the CanvasStroke class implements this interface.

In order to define a CanvasStroke using the Mini Language, the ST command is used in the following way

Format
ST strokeWidth <CanvasBrushML><CanvasStrokeStyleML>

In this command string, strokeWidth is a positive floating point number, CanvasBrushML denotes the CanvasBrush Mini Language and the CanvasStrokeStyleML denotes the CanvasStrokeStyle Mini Language.

Example:

Creating Geometries, Brushes, Strokes and StrokeStyles

To create instances of CanvasGeomety, Brushes, CanvasStrokes, and CanvasStrokeStyles you can use the CanvasPathGeometry class in the Microsoft.Toolkit.Uwp.UI.Media.Geometry namespace.

Related Topics

sun.awt.windows

Windows Toolkit Invalid Classes


public class: WToolkit [javadoc | source]

All Implemented Interfaces:
Runnable, ComponentFactory, InputMethodSupport, WindowClosingListener, WindowClosingSupport, KeyboardFocusManagerPeerProvider

Nested Class Summary:
WToolkit.ToolkitDisposer
Field Summary
config
clipboard
dynamicLayoutSetting
DATA_TRANSFERER_CLASS_NAME
screenmodel
Fields inherited from sun.awt.SunToolkit:
GRAB_EVENT_MASK, numberOfButtons, MAX_BUTTONS_SUPPORTED, imgCache, DEFAULT_WAIT_TIME, eqNoEvents, DESKTOPFONTHINTS

Windows Toolkit Invalid Class Id

Fields inherited from java.awt.Toolkit:
desktopProperties, desktopPropsSupport, $assertionsDisabled
Constructor:
Method from sun.awt.windows.WToolkit Summary:
addPropertyChangeListener, areExtraMouseButtonsEnabled, beep, createButton, createCanvas, createCheckbox, createCheckboxMenuItem, createChoice, createCustomCursor, createDesktopPeer, createDialog, createDragGestureRecognizer, createDragSourceContextPeer, createEmbeddedFrame, createFileDialog, createFrame, createKeyboardFocusManagerPeer, createLabel, createList, createMenu, createMenuBar, createMenuItem, createPanel, createPopupMenu, createRobot, createScrollPane, createScrollbar, createSystemTray, createTextArea, createTextField, createTrayIcon, createWPageDialog, createWPrintDialog, createWindow, disableBackgroundErase, displayChanged, embeddedDispose, embeddedEventLoopIdleProcessing, embeddedInit, enableInputMethodsForTextComponent, getBestCursorSize, getColorModel, getDefaultKeyboardLocale, getDesktopAAHints, getFontMetrics, getFontPeer, getInputMethodAdapterDescriptor, getLockingKeyState, getLockingKeyStateNative, getMaximumCursorColors, getNumberOfButtons, getPrintJob, getPrintJob, getScreenHeight, getScreenInsets, getScreenInsets, getScreenResolution, getScreenWidth, getStaticColorModel, getSystemClipboard, getWToolkit, grab, initializeDesktopProperties, isDesktopSupported, isDynamicLayoutActive, isDynamicLayoutSet, isDynamicLayoutSupportedNative, isFrameStateSupported, isModalExclusionTypeSupported, isModalityTypeSupported, isTranslucencyCapable, isTraySupported, isWindowOpacitySupported, isWindowShapingSupported, isWindowTranslucencySupported, lazilyLoadDesktopProperty, loadLibraries, loadSystemColors, makeColorModel, mapInputMethodHighlight, needUpdateWindow, paletteChanged, quitSecondaryEventLoop, resetGC, run, setDynamicLayout, setDynamicLayoutNative, setExtraMouseButtonsEnabledNative, setLockingKeyState, setLockingKeyStateNative, startSecondaryEventLoop, sync, syncNativeQueue, targetDisposedPeer, targetToPeer, ungrab, useBufferPerWindow
Methods from sun.awt.SunToolkit:
addModalityListener, awtLock, awtLockNotify, awtLockNotifyAll, awtLockWait, awtLockWait, awtTryLock, awtUnlock, checkAndSetPolicy, checkImage, closeSplashScreen, consumeNextKeyTyped, createButton, createCanvas, createCheckbox, createCheckboxMenuItem, createChoice, createDialog, createDragSourceContextPeer, createFileDialog, createFrame, createImage, createImage, createImage, createImage, createInputMethodWindow, createKeyboardFocusManagerPeer, createLabel, createList, createMenu, createMenuBar, createMenuItem, createNewAppContext, createPanel, createPopupMenu, createRobot, createScrollPane, createScrollbar, createSystemTray, createTextArea, createTextField, createTrayIcon, createWindow, disableBackgroundErase, disableBackgroundErase, dumpPeers, enableInputMethodsForTextComponent, executeOnEDTAndWait, executeOnEventHandlerThread, executeOnEventHandlerThread, executeOnEventHandlerThread, flushPendingEvents, getBooleanSystemProperty, getContainingWindow, getDataTransfererClassName, getDefaultKeyboardLocale, getDesktopAAHints, getDesktopFontHints, getField, getFontList, getFontMetrics, getFontPeer, getHeavyweightComponent, getImage, getImage, getImageFromHash, getImageFromHash, getMethod, getMouseInfoPeer, getNativeContainer, getNumberOfButtons, getScaledIconData, getScaledIconImage, getScreenHeight, getScreenSize, getScreenWidth, getStartupLocale, getSunAwtDisableMixing, getSunAwtErasebackgroundonresize, getSunAwtNoerasebackground, getSystemEventQueueImpl, getSystemEventQueueImplPP, getSystemEventQueueImplPP, getSystemProperty, getWindowClosingListener, grab, insertTargetMapping, invokeLaterOnAppContext, isAWTLockHeldByCurrentThread, isContainingTopLevelOpaque, isContainingTopLevelTranslucent, isDesktopSupported, isDispatchThreadForAppContext, isInstanceOf, isLightweightOrUnknown, isModalExcluded, isModalExcludedSupported, isModalExcludedSupportedImpl, isModalExclusionTypeSupported, isModalityTypeSupported, isNativeGTKAvailable, isPostEventQueueEmpty, isSystemGenerated, isTranslucencyCapable, isTraySupported, isWindowOpacitySupported, isWindowShapingSupported, isWindowTranslucencySupported, isXEmbedServerRequested, needUpdateWindow, needsXEmbed, needsXEmbedImpl, notifyModalityChange, notifyModalityPopped, notifyModalityPushed, postEvent, postPriorityEvent, prepareImage, realSync, realSync, removeModalityListener, setAAFontSettingsCondition, setDataTransfererClassName, setLWRequestStatus, setModalExcluded, setSystemGenerated, setWindowClosingListener, syncNativeQueue, targetCreatedPeer, targetDisposedPeer, targetToAppContext, targetToPeer, ungrab, useBufferPerWindow, waitForIdle, wakeupEventQueue, windowClosingDelivered, windowClosingNotify
Methods from java.awt.Toolkit:
access$000, access$002, access$102, addAWTEventListener, addPropertyChangeListener, beep, checkImage, countAWTEventListeners, createButton, createCanvas, createCheckbox, createCheckboxMenuItem, createChoice, createComponent, createCustomCursor, createDesktopPeer, createDialog, createDragGestureRecognizer, createDragSourceContextPeer, createFileDialog, createFrame, createImage, createImage, createImage, createImage, createImage, createLabel, createList, createMenu, createMenuBar, createMenuItem, createPanel, createPopupMenu, createScrollPane, createScrollbar, createTextArea, createTextField, createWindow, enabledOnToolkit, getAWTEventListeners, getAWTEventListeners, getBestCursorSize, getColorModel, getDefaultToolkit, getDesktopProperty, getEventQueue, getFontList, getFontMetrics, getFontPeer, getImage, getImage, getLockingKeyState, getMaximumCursorColors, getMenuShortcutKeyMask, getMouseInfoPeer, getNativeContainer, getPrintJob, getPrintJob, getProperty, getPropertyChangeListeners, getPropertyChangeListeners, getScreenInsets, getScreenResolution, getScreenSize, getSystemClipboard, getSystemEventQueue, getSystemEventQueueImpl, getSystemSelection, initializeDesktopProperties, isAlwaysOnTopSupported, isDynamicLayoutActive, isDynamicLayoutSet, isFrameStateSupported, isModalExclusionTypeSupported, isModalityTypeSupported, lazilyLoadDesktopProperty, loadLibraries, loadSystemColors, mapInputMethodHighlight, notifyAWTEventListeners, prepareImage, removeAWTEventListener, removePropertyChangeListener, setDesktopProperty, setDynamicLayout, setLockingKeyState, sync
Methods from java.lang.Object:
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Method from sun.awt.windows.WToolkit Detail:
    Returns a new custom cursor.
    create the peer for a DragSourceContext
    Returns whether enableInputMethods should be set to true for peeredTextComponent instances on this platform.
    Returns the supported cursor size (Win32 only has one).
    Returns the default keyboard locale of the underlying operating system
    Returns a new input method adapter descriptor for native input methods.
    Returns true if this frame state is supported.
    Returns a style map for the input method highlight.
    There are two reasons why we don't use buffer per window whenVista's DWM (aka Aero) is enabled:- since with DWM all windows are already double-buffered, the application doesn't get expose events so we don't get to use our true back-buffer, wasting memory and performance (this is valid for both d3d and gdi pipelines)- in some cases with buffer per window enabled it is possible for the paint manager to redirect rendering to the screen for some operations (like copyArea), and since bpw uses its own BufferStrategy the d3d onscreen rendering support is disabled and rendering goes through GDI. This doesn't work well with Vista's DWM since one can not perform GDI and D3D operations on the same surface (see 6630702 for more info)Note: even though DWM composition state can change during the lifetimeof the application it is a rare event, and it is more often that itis temporarily disabled (because of some app) than it is gettingpermanently enabled so we can live with this approach without thecomplexity of dwm state listeners and such. This can be revisited ifproved otherwise.