Appearance
SVG Component
The SVG component allows you to render SVG graphics in your CanvasEngine applications. There are three ways to use SVG graphics:
Direct SVG Tags
You can use SVG directly in your templates. The compiler will automatically convert SVG tags to the appropriate component:
html
<svg viewBox="0 0 100 100" width="100" height="100">
<circle cx="50" cy="50" r="40" fill="blue" stroke="black" stroke-width="2"/>
<path d="M 10 80 Q 52.5 10, 95 80 T 180 80" stroke="red" fill="transparent"/>
</svg>
This approach is perfect for simple, static SVG graphics that you want to embed directly in your template.
Loading SVG from URL
Use the Svg
component with the src
prop to load SVG files from external sources:
html
<Svg src="/assets/logo.svg" x={10} y={20} />
This method is ideal for:
- Loading SVG files from your assets folder
- Dynamically loading different SVG files
- Reusing SVG graphics across multiple components
SVG from String Content
Use the Svg
component with the content
prop to render SVG from a string variable:
html
<script>
const svgContent = `
<svg viewBox="0 0 200 200" width="200" height="200">
<rect x="10" y="10" width="180" height="180" fill="lightblue" stroke="navy" stroke-width="3"/>
<circle cx="100" cy="100" r="50" fill="yellow"/>
<text x="100" y="110" text-anchor="middle" font-family="Arial" font-size="16" fill="black">
Hello SVG!
</text>
</svg>
`;
</script>
<Svg content={svgContent} />
This approach is useful for:
- Generating SVG content dynamically
- Building SVG from data or user input
- Creating complex SVG graphics programmatically
SVG Component Props
Prop | Type | Description |
---|---|---|
src | string | URL path to an SVG file to load |
content | string | Direct SVG content as a string |
svg | string | (Legacy) SVG content string for backward compatibility |
Performance Considerations
- Direct SVG tags are the most efficient for static graphics as they're compiled at build time
- src prop is best for external files as it leverages PixiJS's asset loading system
- content prop is flexible but requires runtime parsing
Common Properties
Property | Type | Description |
---|---|---|
x | number | X-coordinate position of the display object. |
y | number | Y-coordinate position of the display object. |
width | number | Width of the display object. |
height | number | Height of the display object. |
scale | object | Scale of the display object. |
anchor | object | Anchor point of the display object. |
skew | object | Skew of the display object. |
tint | number | Tint color of the display object. |
rotation | number | Rotation of the display object in radians. |
angle | number | Rotation of the display object in degrees. |
zIndex | number | Z-index of the display object. |
roundPixels | boolean | Whether to round pixel values. |
cursor | string | Cursor style when hovering over the display object. |
visible | boolean | Visibility of the display object. |
alpha | number | Alpha transparency of the display object. |
pivot | object | Pivot point of the display object. |
filters | array | Filters applied to the display object. |
maskOf | Element | Element that this display object masks. |
blendMode | string | Blend mode for rendering. |
filterArea | object | Filter area for rendering. |
Layout Properties
Pour obtenir la documentation complète et détaillée sur toutes les propriétés de mise en page, consultez la documentation officielle de PixiJS Layout.
Sizing and Dimensions
Property | Type | Description |
---|---|---|
width | number/string | Width of the display object. Accepts pixels or percentage (e.g. '50%'). |
height | number/string | Height of the display object. Accepts pixels or percentage (e.g. '50%'). |
minWidth | number/string | Minimum width the object can shrink to. |
minHeight | number/string | Minimum height the object can shrink to. |
maxWidth | number/string | Maximum width the object can expand to. |
maxHeight | number/string | Maximum height the object can expand to. |
aspectRatio | number | Ratio between width and height (e.g. 1.5 for 3:2 ratio). |
Flex Layout
Property | Type | Description |
---|---|---|
flexDirection | string | Direction of flex items. Values: 'row', 'column', 'row-reverse', 'column-reverse'. |
flexWrap | string | Whether items wrap. Values: 'wrap', 'nowrap', 'wrap-reverse'. |
justifyContent | string | Alignment along main axis. Values: 'flex-start', 'flex-end', 'center', 'space-between', 'space-around'. |
alignItems | string | Alignment along cross axis. Values: 'flex-start', 'flex-end', 'center', 'stretch', 'baseline'. |
alignContent | string | Alignment of lines with multiple items. Values: 'flex-start', 'flex-end', 'center', 'stretch', 'space-between', 'space-around'. |
alignSelf | string | Override of parent's alignItems for specific item. |
flexGrow | number | Grow factor of item relative to other items. |
flexShrink | number | Shrink factor of item relative to other items. |
flexBasis | number/string | Initial size of item before flex growing/shrinking. |
gap | number/object | Gap between items. |
rowGap | number | Gap between rows. |
columnGap | number | Gap between columns. |
Positioning
Property | Type | Description |
---|---|---|
positionType | string | Type of positioning. Values: 'relative', 'absolute', 'static'. |
top | number/string | Distance from the top edge. |
right | number/string | Distance from the right edge. |
bottom | number/string | Distance from the bottom edge. |
left | number/string | Distance from the left edge. |
Spacing, Margins and Borders
Property | Type | Description |
---|---|---|
margin | number/array | Space outside border box. Can be single value or array for different sides. |
padding | number/array | Space inside border box. Can be single value or array for different sides. |
border | number/array | Border width. Can be single value or array for different sides. |
Object Fitting and Alignment
Property | Type | Description |
---|---|---|
objectFit | string | How object is resized to fit layout box. Values: 'contain', 'cover', 'fill', 'none', 'scale-down'. |
objectPosition | string | Anchor point of object inside layout box. E.g. 'center', 'top left'. |
transformOrigin | string | Pivot point for rotation and scaling of layout box. |
Shadow
Property | Type | Description |
---|---|---|
blur | number | Blur strength. |
color | number | Color of the shadow. |
offset | object | Offset of the shadow. |
quality | number | Quality of the shadow. |
Hook before destroy
html
<script>
import {
signal,
animatedSignal,
effect,
animatedSequence,
} from "canvasengine";
import MyViewport from "./viewport.ce";
let bool = signal(true)
const opacity = animatedSignal(1, { duration: 500 });
const click = async () => {
bool.set(!bool())
}
const beforeDestroy = async () => {
await animatedSequence([
() => opacity.set(0),
])
console.log("before destroy")
}
</script>
<Canvas antialias={true}>
<Container onBeforeDestroy={beforeDestroy}>
@if (bool) {
<Rect width={300} height={300} color="red" alpha={opacity} click />
}
</Container>
</Canvas>