以下、横方向、斜め方向のグラデーションです。縦方向との違いは線形方向の指定部分のみです。
Curl実装
Canvas実装
イメージのクリッピング
次にイメージのクリッピングについても簡単に解説します。どちらも以下のような三角形のクリッピングが可能です。Curlとcanvas両者でアプローチは異なっており、Curlでは、Renderer2d.render-triangleメソッドで三角形を描画する際に、塗りつぶしパターンとしてグラデーションを指定しているのに対し、canvasでは三角形のクリッピング領域を設定して、矩形のグラデーションを描画しています。
また、CurlではFrameなどの描画オブジェクトのdrawメソッドをオーバーライドし、引数で渡されるRenderer2dを用いて描画を行います。
Curl実装
Canvas実装
{define-proc {tri-proc ren:Renderer2d}:void let fp:FillPattern = {LinearGradientFillPattern {Fraction2d 0, 0}, {Fraction2d 1, 0}, {Spectrum.from-envelope "#C05050", 0.0, "#C0C050", 0.5, "#5050C0", 1.0 } } {ren.render-triangle {Distance2d 1cm, 4cm}, {Distance2d 4cm, 1cm}, {Distance2d 0cm, 0cm}, fill-pattern = fp } } {define-class RepaintFrame {inherits Frame} {constructor {default ...} {construct-super ...} } {method public {draw ren:Renderer2d}:void {tri-proc ren} } }
グラデーションパターンの部分的な使用
次は、イメージのグラデーションパターンの部分的な使用についてです。この例では、Renderer2d.render-rectangleメソッドのテクスチャ座標パラメータを指定し、元のグラデーションパターン全体を1と考えた時の0.3~0.7の領域を切り出したグラデーションを用いて描画しています。
{ren.render-rectangle 0.5cm, 0.5cm, 2.0cm, 2.0cm, fill-pattern = fp, uv1 = {Fraction2d .3, .3}, uv2 = {Fraction2d .7, .7} }
以上、グラデーションおよび2次元描画について、駆け足ではありましたが紹介しました。ここで紹介はできませんでしたが、Renderer2dにはさまざまな描画メソッドが提供されています。
閉じた図形の描画メソッド
- Renderer2d.render-ellipse
- Renderer2d.render-polygon
- Renderer2d.render-polygon-from-array
- Renderer2d.render-rectangle
- Renderer2d.render-rounded-rectangle
- Renderer2d.render-stippled-rectangle
- Renderer2d.render-region
- Renderer2d.render-triangle
線図形の描画メソッド
- Renderer2d.render-elliptic-path
- Renderer2d.render-path
- Renderer2d.render-rectangular-path
- Renderer2d.render-rounded-rectangular-path
- Renderer2d.render-line
その他の図形の描画メソッド
- Renderer2d.render-drawable…指定されたDrawableのすべてまたは一部をレンダリングします。
- Renderer2d.render-pixmap…指定されたPixmapのすべてまたは一部をレンダリングします。
- Renderer2d.render-string…指定されたStringのすべてまたは一部をレンダリングします。