2020-10-05 19:28:24 +00:00

12 lines
27 KiB
Go

//
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
package imagerender ;import (_b "errors";_e "fmt";_fac "github.com/golang/freetype/raster";_gb "github.com/unidoc/unipdf/v3/common";_eaf "github.com/unidoc/unipdf/v3/internal/transform";_bf "github.com/unidoc/unipdf/v3/render/internal/context";_fa "golang.org/x/image/draw";_ec "golang.org/x/image/font";_bfd "golang.org/x/image/math/f64";_fe "golang.org/x/image/math/fixed";_ea "image";_dc "image/color";_f "image/draw";_g "math";_ee "sort";_d "strings";);func NewContextForRGBA (im *_ea .RGBA )*Context {_gcd :=im .Bounds ().Size ().X ;_af :=im .Bounds ().Size ().Y ;return &Context {_ffd :_gcd ,_abf :_af ,_fba :_fac .NewRasterizer (_gcd ,_af ),_bda :im ,_fc :_dc .Transparent ,_cf :_dfd ,_cfa :_ccg ,_cbd :1,_bca :_bf .FillRuleWinding ,_ggb :_eaf .IdentityMatrix (),_bfb :_bf .NewTextState ()};};func (_bbf *Context )MeasureString (s string )(_ceg ,_ggbcb float64 ){_gcdg :=&_ec .Drawer {Face :_bbf ._bfb .Tf .Face };_gcag :=_gcdg .MeasureString (s );return float64 (_gcag >>6),_bbf ._bfb .Tf .Size ;};func _aec (_aaa ,_ebea ,_bcd ,_cdg ,_bgf ,_ded float64 )float64 {return _aaa *_cdg +_ebea *_bgf +_bcd *_ded ;};func (_bcad *Context )MoveTo (x ,y float64 ){if _bcad ._ddf {_bcad ._abg .Add1 (_cceg (_bcad ._baa ));};x ,y =_bcad .Transform (x ,y );_agfa :=_eaf .NewPoint (x ,y );_ad :=_cceg (_agfa );_bcad ._dd .Start (_ad );_bcad ._abg .Start (_ad );_bcad ._baa =_agfa ;_bcad ._bbg =_agfa ;_bcad ._ddf =true ;};func _cab (_ggg ,_aad ,_cgc ,_fag ,_cbe ,_eebf float64 )_bf .Gradient {_gab :=circle {_ggg ,_aad ,_cgc };_ega :=circle {_fag ,_cbe ,_eebf };_ffdc :=circle {_fag -_ggg ,_cbe -_aad ,_eebf -_cgc };_cad :=_aec (_ffdc ._fbfa ,_ffdc ._ebec ,-_ffdc ._caed ,_ffdc ._fbfa ,_ffdc ._ebec ,_ffdc ._caed );var _cfea float64 ;if _cad !=0{_cfea =1.0/_cad ;};_effe :=-_gab ._caed ;_dbeg :=&radialGradient {_ebab :_gab ,_bbgd :_ega ,_eddb :_ffdc ,_bbab :_cad ,_bbd :_cfea ,_gaag :_effe };return _dbeg ;};func (_egcb *Context )SetMatrix (m _eaf .Matrix ){_egcb ._ggb =m };func (_ebe *Context )FillPreserve (){var _eddd _fac .Painter ;if _ebe ._fdd ==nil {if _bde ,_bee :=_ebe ._cf .(*solidPattern );_bee {_adb :=_fac .NewRGBAPainter (_ebe ._bda );_adb .SetColor (_bde ._bcce );_eddd =_adb ;};};if _eddd ==nil {_eddd =_caea (_ebe ._bda ,_ebe ._fdd ,_ebe ._cf );};_ebe .fill (_eddd );};func (_fca *Context )ClosePath (){if _fca ._ddf {_gdb :=_cceg (_fca ._baa );_fca ._dd .Add1 (_gdb );_fca ._abg .Add1 (_gdb );_fca ._bbg =_fca ._baa ;};};func (_dfg *Context )Rotate (angle float64 ){_dfg ._ggb .Rotate (angle )};func (_edcf *Context )DrawArc (x ,y ,r ,angle1 ,angle2 float64 ){_edcf .DrawEllipticalArc (x ,y ,r ,r ,angle1 ,angle2 );};func (_aef *Context )SetLineWidth (lineWidth float64 ){_aef ._cbd =lineWidth };func _gecf (_efcb float64 )_fe .Int26_6 {return _fe .Int26_6 (_efcb *64)};func (_de *Context )SetDashOffset (offset float64 ){_de ._ed =offset };func (_dff *Context )AsMask ()*_ea .Alpha {_bdef :=_ea .NewAlpha (_dff ._bda .Bounds ());_fa .Draw (_bdef ,_dff ._bda .Bounds (),_dff ._bda ,_ea .ZP ,_fa .Src );return _bdef ;};func (_bbb *Context )Push (){_fbag :=*_bbb ;_bbb ._cfc =append (_bbb ._cfc ,&_fbag )};func _aacc (_gebd float64 )float64 {return _gebd *_g .Pi /180};func (_dda *Context )Width ()int {return _dda ._ffd };func (_bgd *Context )drawString (_ggbc *_ea .RGBA ,_aggd string ,_cbg ,_cbc float64 ){_eacf :=&_ec .Drawer {Dst :_ggbc ,Src :_ea .NewUniform (_bgd ._fc ),Face :_bgd ._bfb .Tf .Face ,Dot :_cceg (_eaf .NewPoint (_cbg ,_cbc ))};_aga :=rune (-1);for _ ,_bed :=range _aggd {if _aga >=0{_eacf .Dot .X +=_eacf .Face .Kern (_aga ,_bed );};_dbdf ,_gde ,_cdb ,_daa ,_aff :=_eacf .Face .Glyph (_eacf .Dot ,_bed );if !_aff {continue ;};_aea :=_dbdf .Sub (_dbdf .Min );_aac :=_fa .BiLinear ;_eca :=_bgd ._ggb .Clone ();_eca .Translate (float64 (_dbdf .Min .X ),float64 (_dbdf .Min .Y ));_deb :=_bfd .Aff3 {_eca [0],_eca [3],_eca [6],_eca [1],_eca [4],_eca [7]};_aac .Transform (_eacf .Dst ,_deb ,_eacf .Src ,_aea ,_fa .Over ,&_fa .Options {SrcMask :_gde ,SrcMaskP :_cdb });_eacf .Dot .X +=_daa ;_aga =_bed ;};};func _gdge (_agd ,_fcaef ,_ggd ,_cde float64 )_bf .Gradient {_bebb :=&linearGradient {_dcaa :_agd ,_ccdd :_fcaef ,_becb :_ggd ,_gda :_cde };return _bebb ;};type linearGradient struct{_dcaa ,_ccdd ,_becb ,_gda float64 ;_bgb stops ;};func (_ggcd *Context )SetLineCap (lineCap _bf .LineCap ){_ggcd ._agg =lineCap };func (_feea stops )Len ()int {return len (_feea )};func (_gbdb *Context )NewSubPath (){if _gbdb ._ddf {_gbdb ._abg .Add1 (_cceg (_gbdb ._baa ));};_gbdb ._ddf =false ;};func (_bea *Context )DrawEllipse (x ,y ,rx ,ry float64 ){_bea .NewSubPath ();_bea .DrawEllipticalArc (x ,y ,rx ,ry ,0,2*_g .Pi );_bea .ClosePath ();};func (_fcae *Context )Fill (){_fcae .FillPreserve ();_fcae .ClearPath ()};func (_eb *Context )Image ()_ea .Image {return _eb ._bda };func (_gee *Context )Pop (){_fga :=*_gee ;_cag :=_gee ._cfc ;_gedc ,_cag :=_cag [len (_cag )-1],_cag [:len (_cag )-1];*_gee =*_gedc ;_gee ._dd =_fga ._dd ;_gee ._abg =_fga ._abg ;_gee ._baa =_fga ._baa ;_gee ._bbg =_fga ._bbg ;_gee ._ddf =_fga ._ddf ;_gee ._bfb =_fga ._bfb ;};func (_dcfc *Context )DrawImage (im _ea .Image ,x ,y int ){_dcfc .DrawImageAnchored (im ,x ,y ,0,0)};func (_fddb *Context )LineWidth ()float64 {return _fddb ._cbd };func (_ead *Context )setFillAndStrokeColor (_ecg _dc .Color ){_ead ._fc =_ecg ;_ead ._cf =_cgec (_ecg );_ead ._cfa =_cgec (_ecg );};func (_cfd *Context )SetPixel (x ,y int ){_cfd ._bda .Set (x ,y ,_cfd ._fc )};func (_gdc *Context )QuadraticTo (x1 ,y1 ,x2 ,y2 float64 ){if !_gdc ._ddf {_gdc .MoveTo (x1 ,y1 );};x1 ,y1 =_gdc .Transform (x1 ,y1 );x2 ,y2 =_gdc .Transform (x2 ,y2 );_bab :=_eaf .NewPoint (x1 ,y1 );_bdad :=_eaf .NewPoint (x2 ,y2 );_cea :=_cceg (_bab );_gbf :=_cceg (_bdad );_gdc ._dd .Add2 (_cea ,_gbf );_gdc ._abg .Add2 (_cea ,_gbf );_gdc ._bbg =_bdad ;};type circle struct{_fbfa ,_ebec ,_caed float64 };func (_bge *Context )joiner ()_fac .Joiner {switch _bge ._gf {case _bf .LineJoinBevel :return _fac .BevelJoiner ;case _bf .LineJoinRound :return _fac .RoundJoiner ;};return nil ;};func NewContext (width ,height int )*Context {return NewContextForRGBA (_ea .NewRGBA (_ea .Rect (0,0,width ,height )));};func (_fefa *Context )SetRGBA255 (r ,g ,b ,a int ){_fefa ._fc =_dc .NRGBA {uint8 (r ),uint8 (g ),uint8 (b ),uint8 (a )};_fefa .setFillAndStrokeColor (_fefa ._fc );};type solidPattern struct{_bcce _dc .Color };func (_ddd *Context )SetStrokeRGBA (r ,g ,b ,a float64 ){_egc :=_dc .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_ddd ._cfa =_cgec (_egc );};func _fdc (_fb ,_abb ,_cd ,_efb ,_facg ,_efff ,_efg ,_fef ,_bfe float64 )(_cda ,_gbd float64 ){_dgg :=1-_bfe ;_ccc :=_dgg *_dgg *_dgg ;_ac :=3*_dgg *_dgg *_bfe ;_eeb :=3*_dgg *_bfe *_bfe ;_cae :=_bfe *_bfe *_bfe ;_cda =_ccc *_fb +_ac *_cd +_eeb *_facg +_cae *_efg ;_gbd =_ccc *_abb +_ac *_efb +_eeb *_efff +_cae *_fef ;return ;};func (_bga *Context )capper ()_fac .Capper {switch _bga ._agg {case _bf .LineCapButt :return _fac .ButtCapper ;case _bf .LineCapRound :return _fac .RoundCapper ;case _bf .LineCapSquare :return _fac .SquareCapper ;};return nil ;};func (_bdc *Context )Identity (){_bdc ._ggb =_eaf .IdentityMatrix ()};func (_afc *Context )SetRGB (r ,g ,b float64 ){_afc .SetRGBA (r ,g ,b ,1)};func (_bged *Context )ScaleAbout (sx ,sy ,x ,y float64 ){_bged .Translate (x ,y );_bged .Scale (sx ,sy );_bged .Translate (-x ,-y );};func _dfab (_debe _ea .Image ,_eae repeatOp )_bf .Pattern {return &surfacePattern {_fdf :_debe ,_bdgf :_eae };};func (_dca *Context )Clear (){_gae :=_ea .NewUniform (_dca ._fc );_fa .Draw (_dca ._bda ,_dca ._bda .Bounds (),_gae ,_ea .ZP ,_fa .Src );};const (_fgcg repeatOp =iota ;_gede ;_eaca ;_bfa ;);type Context struct{_ffd int ;_abf int ;_fba *_fac .Rasterizer ;_bda *_ea .RGBA ;_fdd *_ea .Alpha ;_fc _dc .Color ;_cf _bf .Pattern ;_cfa _bf .Pattern ;_dd _fac .Path ;_abg _fac .Path ;_baa _eaf .Point ;_bbg _eaf .Point ;_ddf bool ;_dbe []float64 ;_ed float64 ;_cbd float64 ;_agg _bf .LineCap ;_gf _bf .LineJoin ;_bca _bf .FillRule ;_ggb _eaf .Matrix ;_bfb *_bf .TextState ;_cfc []*Context ;};func (_dggd *Context )SetLineJoin (lineJoin _bf .LineJoin ){_dggd ._gf =lineJoin };func (_dee stops )Swap (i ,j int ){_dee [i ],_dee [j ]=_dee [j ],_dee [i ]};func (_edd *Context )SetHexColor (x string ){_gaa ,_afa ,_dbd ,_abfa :=_gad (x );_edd .SetRGBA255 (_gaa ,_afa ,_dbd ,_abfa );};func (_gef *Context )LineTo (x ,y float64 ){if !_gef ._ddf {_gef .MoveTo (x ,y );}else {x ,y =_gef .Transform (x ,y );_afb :=_eaf .NewPoint (x ,y );_gcf :=_cceg (_afb );_gef ._dd .Add1 (_gcf );_gef ._abg .Add1 (_gcf );_gef ._bbg =_afb ;};};func _dab (_bad _fac .Path ,_ebeb []float64 ,_feeba float64 )_fac .Path {return _gecg (_ccae (_caf (_bad ),_ebeb ,_feeba ));};func (_dgge *Context )SetMask (mask *_ea .Alpha )error {if mask .Bounds ().Size ()!=_dgge ._bda .Bounds ().Size (){return _b .New ("\u006d\u0061\u0073\u006b\u0020\u0073i\u007a\u0065\u0020\u006d\u0075\u0073\u0074\u0020\u006d\u0061\u0074\u0063\u0068 \u0063\u006f\u006e\u0074\u0065\u0078\u0074 \u0073\u0069\u007a\u0065");};_dgge ._fdd =mask ;return nil ;};func (_eba *Context )ClearPath (){_eba ._dd .Clear ();_eba ._abg .Clear ();_eba ._ddf =false };func (_dba *Context )Transform (x ,y float64 )(_fcaee ,_eedb float64 ){return _dba ._ggb .Transform (x ,y );};func (_aed *Context )stroke (_cca _fac .Painter ){_efgd :=_aed ._dd ;if len (_aed ._dbe )> 0{_efgd =_dab (_efgd ,_aed ._dbe ,_aed ._ed );}else {_efgd =_gecg (_caf (_efgd ));};_gbdbg :=_aed ._fba ;_gbdbg .UseNonZeroWinding =true ;_gbdbg .Clear ();_gbdbg .AddStroke (_efgd ,_gecf (_aed ._cbd ),_aed .capper (),_aed .joiner ());_gbdbg .Rasterize (_cca );};func _caf (_dbdd _fac .Path )[][]_eaf .Point {var _fagd [][]_eaf .Point ;var _cbdg []_eaf .Point ;var _abee ,_dbg float64 ;for _bcg :=0;_bcg < len (_dbdd );{switch _dbdd [_bcg ]{case 0:if len (_cbdg )> 0{_fagd =append (_fagd ,_cbdg );_cbdg =nil ;};_cdef :=_gfd (_dbdd [_bcg +1]);_cfeg :=_gfd (_dbdd [_bcg +2]);_cbdg =append (_cbdg ,_eaf .NewPoint (_cdef ,_cfeg ));_abee ,_dbg =_cdef ,_cfeg ;_bcg +=4;case 1:_cgcd :=_gfd (_dbdd [_bcg +1]);_dbgf :=_gfd (_dbdd [_bcg +2]);_cbdg =append (_cbdg ,_eaf .NewPoint (_cgcd ,_dbgf ));_abee ,_dbg =_cgcd ,_dbgf ;_bcg +=4;case 2:_fbdg :=_gfd (_dbdd [_bcg +1]);_cadc :=_gfd (_dbdd [_bcg +2]);_gcaa :=_gfd (_dbdd [_bcg +3]);_cabe :=_gfd (_dbdd [_bcg +4]);_cge :=_ecd (_abee ,_dbg ,_fbdg ,_cadc ,_gcaa ,_cabe );_cbdg =append (_cbdg ,_cge ...);_abee ,_dbg =_gcaa ,_cabe ;_bcg +=6;case 3:_bead :=_gfd (_dbdd [_bcg +1]);_fded :=_gfd (_dbdd [_bcg +2]);_gggf :=_gfd (_dbdd [_bcg +3]);_adf :=_gfd (_dbdd [_bcg +4]);_ceff :=_gfd (_dbdd [_bcg +5]);_fdeb :=_gfd (_dbdd [_bcg +6]);_dagf :=_ga (_abee ,_dbg ,_bead ,_fded ,_gggf ,_adf ,_ceff ,_fdeb );_cbdg =append (_cbdg ,_dagf ...);_abee ,_dbg =_ceff ,_fdeb ;_bcg +=8;default:_gb .Log .Debug ("\u0057\u0041\u0052\u004e: \u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0070\u0061\u0074\u0068\u003a\u0020%\u0076",_dbdd );return _fagd ;};};if len (_cbdg )> 0{_fagd =append (_fagd ,_cbdg );};return _fagd ;};func (_age *Context )SetFillRule (fillRule _bf .FillRule ){_age ._bca =fillRule };func (_agf *Context )SetColor (c _dc .Color ){_agf .setFillAndStrokeColor (c )};type surfacePattern struct{_fdf _ea .Image ;_bdgf repeatOp ;};func _bbde (_bdb float64 ,_cbde stops )_dc .Color {if _bdb <=0.0||len (_cbde )==1{return _cbde [0]._bgc ;};_ggef :=_cbde [len (_cbde )-1];if _bdb >=_ggef ._affd {return _ggef ._bgc ;};for _aeg ,_dccg :=range _cbde [1:]{if _bdb < _dccg ._affd {_bdb =(_bdb -_cbde [_aeg ]._affd )/(_dccg ._affd -_cbde [_aeg ]._affd );return _acg (_cbde [_aeg ]._bgc ,_dccg ._bgc ,_bdb );};};return _ggef ._bgc ;};type repeatOp int ;func _cceg (_efbg _eaf .Point )_fe .Point26_6 {return _fe .Point26_6 {X :_gecf (_efbg .X ),Y :_gecf (_efbg .Y )};};func (_bbc *Context )DrawString (s string ,x ,y float64 ){_bbc .DrawStringAnchored (s ,x ,y ,0,0)};func (_afab *Context )DrawRectangle (x ,y ,w ,h float64 ){_afab .NewSubPath ();_afab .MoveTo (x ,y );_afab .LineTo (x +w ,y );_afab .LineTo (x +w ,y +h );_afab .LineTo (x ,y +h );_afab .ClosePath ();};func _gad (_aedf string )(_fbac ,_cacd ,_ffcb ,_cgdg int ){_aedf =_d .TrimPrefix (_aedf ,"\u0023");_cgdg =255;if len (_aedf )==3{_afca :="\u00251\u0078\u0025\u0031\u0078\u0025\u0031x";_e .Sscanf (_aedf ,_afca ,&_fbac ,&_cacd ,&_ffcb );_fbac |=_fbac <<4;_cacd |=_cacd <<4;_ffcb |=_ffcb <<4;};if len (_aedf )==6{_fbacc :="\u0025\u0030\u0032x\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_e .Sscanf (_aedf ,_fbacc ,&_fbac ,&_cacd ,&_ffcb );};if len (_aedf )==8{_bgfa :="\u0025\u00302\u0078\u0025\u00302\u0078\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_e .Sscanf (_aedf ,_bgfa ,&_fbac ,&_cacd ,&_ffcb ,&_cgdg );};return ;};func _gecg (_ace [][]_eaf .Point )_fac .Path {var _agfab _fac .Path ;for _ ,_eddg :=range _ace {var _dfcc _fe .Point26_6 ;for _caaf ,_ffc :=range _eddg {_fbg :=_cceg (_ffc );if _caaf ==0{_agfab .Start (_fbg );}else {_bgee :=_fbg .X -_dfcc .X ;_bdbg :=_fbg .Y -_dfcc .Y ;if _bgee < 0{_bgee =-_bgee ;};if _bdbg < 0{_bdbg =-_bdbg ;};if _bgee +_bdbg > 8{_agfab .Add1 (_fbg );};};_dfcc =_fbg ;};};return _agfab ;};type stops []stop ;func (_bfdg *Context )Shear (x ,y float64 ){_bfdg ._ggb .Shear (x ,y )};func (_bbe *Context )StrokePreserve (){var _ecb _fac .Painter ;if _bbe ._fdd ==nil {if _abc ,_dbb :=_bbe ._cfa .(*solidPattern );_dbb {_edb :=_fac .NewRGBAPainter (_bbe ._bda );_edb .SetColor (_abc ._bcce );_ecb =_edb ;};};if _ecb ==nil {_ecb =_caea (_bbe ._bda ,_bbe ._fdd ,_bbe ._cfa );};_bbe .stroke (_ecb );};func (_fbaa stops )Less (i ,j int )bool {return _fbaa [i ]._affd < _fbaa [j ]._affd };func _dfb (_adbg _ea .Image )*_ea .RGBA {_eega :=_adbg .Bounds ();_eeaa :=_ea .NewRGBA (_eega );_f .Draw (_eeaa ,_eega ,_adbg ,_eega .Min ,_f .Src );return _eeaa ;};func (_adg *Context )ResetClip (){_adg ._fdd =nil };func (_abe *Context )DrawEllipticalArc (x ,y ,rx ,ry ,angle1 ,angle2 float64 ){const _ebd =16;for _bff :=0;_bff < _ebd ;_bff ++{_edg :=float64 (_bff +0)/_ebd ;_caec :=float64 (_bff +1)/_ebd ;_ffa :=angle1 +(angle2 -angle1 )*_edg ;_gdg :=angle1 +(angle2 -angle1 )*_caec ;_eedd :=x +rx *_g .Cos (_ffa );_efd :=y +ry *_g .Sin (_ffa );_fdb :=x +rx *_g .Cos ((_ffa +_gdg )/2);_gegf :=y +ry *_g .Sin ((_ffa +_gdg )/2);_eeba :=x +rx *_g .Cos (_gdg );_fcbe :=y +ry *_g .Sin (_gdg );_faf :=2*_fdb -_eedd /2-_eeba /2;_eag :=2*_gegf -_efd /2-_fcbe /2;if _bff ==0{if _abe ._ddf {_abe .LineTo (_eedd ,_efd );}else {_abe .MoveTo (_eedd ,_efd );};};_abe .QuadraticTo (_faf ,_eag ,_eeba ,_fcbe );};};func (_edc *Context )SetStrokeStyle (pattern _bf .Pattern ){_edc ._cfa =pattern };func (_ffdg *Context )SetRGBA (r ,g ,b ,a float64 ){_ffdg ._fc =_dc .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_ffdg .setFillAndStrokeColor (_ffdg ._fc );};func (_cef *Context )drawRegularPolygon (_dcd int ,_agcc ,_cfe ,_fae ,_eeg float64 ){_bce :=2*_g .Pi /float64 (_dcd );_eeg -=_g .Pi /2;if _dcd %2==0{_eeg +=_bce /2;};_cef .NewSubPath ();for _dce :=0;_dce < _dcd ;_dce ++{_ebeg :=_eeg +_bce *float64 (_dce );_cef .LineTo (_agcc +_fae *_g .Cos (_ebeg ),_cfe +_fae *_g .Sin (_ebeg ));};_cef .ClosePath ();};func _a (_ab ,_fd ,_ge ,_bfda ,_gc ,_bb ,_ce float64 )(_gd ,_ef float64 ){_gbb :=1-_ce ;_ca :=_gbb *_gbb ;_gg :=2*_gbb *_ce ;_df :=_ce *_ce ;_gd =_ca *_ab +_gg *_ge +_df *_gc ;_ef =_ca *_fd +_gg *_bfda +_df *_bb ;return ;};func (_gfa *Context )SetRGB255 (r ,g ,b int ){_gfa .SetRGBA255 (r ,g ,b ,255)};func (_cdf *Context )CubicTo (x1 ,y1 ,x2 ,y2 ,x3 ,y3 float64 ){if !_cdf ._ddf {_cdf .MoveTo (x1 ,y1 );};_dcf ,_fbf :=_cdf ._bbg .X ,_cdf ._bbg .Y ;x1 ,y1 =_cdf .Transform (x1 ,y1 );x2 ,y2 =_cdf .Transform (x2 ,y2 );x3 ,y3 =_cdf .Transform (x3 ,y3 );_efa :=_ga (_dcf ,_fbf ,x1 ,y1 ,x2 ,y2 ,x3 ,y3 );_ggf :=_cceg (_cdf ._bbg );for _ ,_gec :=range _efa [1:]{_ece :=_cceg (_gec );if _ece ==_ggf {continue ;};_ggf =_ece ;_cdf ._dd .Add1 (_ece );_cdf ._abg .Add1 (_ece );_cdf ._bbg =_gec ;};};func (_dad *Context )DrawCircle (x ,y ,r float64 ){_dad .NewSubPath ();_dad .DrawEllipticalArc (x ,y ,r ,r ,0,2*_g .Pi );_dad .ClosePath ();};func (_feec *solidPattern )ColorAt (x ,y int )_dc .Color {return _feec ._bcce };func (_dbf *radialGradient )ColorAt (x ,y int )_dc .Color {if len (_dbf ._ced )==0{return _dc .Transparent ;};_ege ,_fcd :=float64 (x )+0.5-_dbf ._ebab ._fbfa ,float64 (y )+0.5-_dbf ._ebab ._ebec ;_bdeb :=_aec (_ege ,_fcd ,_dbf ._ebab ._caed ,_dbf ._eddb ._fbfa ,_dbf ._eddb ._ebec ,_dbf ._eddb ._caed );_ebda :=_aec (_ege ,_fcd ,-_dbf ._ebab ._caed ,_ege ,_fcd ,_dbf ._ebab ._caed );if _dbf ._bbab ==0{if _bdeb ==0{return _dc .Transparent ;};_cac :=0.5*_ebda /_bdeb ;if _cac *_dbf ._eddb ._caed >=_dbf ._gaag {return _bbde (_cac ,_dbf ._ced );};return _dc .Transparent ;};_cfdd :=_aec (_bdeb ,_dbf ._bbab ,0,_bdeb ,-_ebda ,0);if _cfdd >=0{_cbfb :=_g .Sqrt (_cfdd );_afg :=(_bdeb +_cbfb )*_dbf ._bbd ;_gegb :=(_bdeb -_cbfb )*_dbf ._bbd ;if _afg *_dbf ._eddb ._caed >=_dbf ._gaag {return _bbde (_afg ,_dbf ._ced );}else if _gegb *_dbf ._eddb ._caed >=_dbf ._gaag {return _bbde (_gegb ,_dbf ._ced );};};return _dc .Transparent ;};func (_dbec *Context )Translate (x ,y float64 ){_dbec ._ggb .Translate (x ,y )};func (_gge *Context )TextState ()*_bf .TextState {return _gge ._bfb };func (_gbde *Context )fill (_edf _fac .Painter ){_dcb :=_gbde ._abg ;if _gbde ._ddf {_dcb =make (_fac .Path ,len (_gbde ._abg ));copy (_dcb ,_gbde ._abg );_dcb .Add1 (_cceg (_gbde ._baa ));};_gca :=_gbde ._fba ;_gca .UseNonZeroWinding =_gbde ._bca ==_bf .FillRuleWinding ;_gca .Clear ();_gca .AddPath (_dcb );_gca .Rasterize (_edf );};type stop struct{_affd float64 ;_bgc _dc .Color ;};func (_cfb *Context )Stroke (){_cfb .StrokePreserve ();_cfb .ClearPath ()};var (_dfd =_cgec (_dc .White );_ccg =_cgec (_dc .Black ););func (_bfg *Context )DrawStringAnchored (s string ,x ,y ,ax ,ay float64 ){_ebc ,_ged :=_bfg .MeasureString (s );x -=ax *_ebc ;y +=ay *_ged ;if _bfg ._fdd ==nil {_bfg .drawString (_bfg ._bda ,s ,x ,y );}else {_dec :=_ea .NewRGBA (_ea .Rect (0,0,_bfg ._ffd ,_bfg ._abf ));_bfg .drawString (_dec ,s ,x ,y );_fa .DrawMask (_bfg ._bda ,_bfg ._bda .Bounds (),_dec ,_ea .ZP ,_bfg ._fdd ,_ea .ZP ,_fa .Over );};};func (_ffag *Context )DrawImageAnchored (im _ea .Image ,x ,y int ,ax ,ay float64 ){_gdbd :=im .Bounds ().Size ();x -=int (ax *float64 (_gdbd .X ));y -=int (ay *float64 (_gdbd .Y ));_efc :=_fa .BiLinear ;_bec :=_ffag ._ggb .Clone ();_bec .Translate (float64 (x ),float64 (y ));_adc :=_bfd .Aff3 {_bec [0],_bec [3],_bec [6],_bec [1],_bec [4],_bec [7]};if _ffag ._fdd ==nil {_efc .Transform (_ffag ._bda ,_adc ,im ,im .Bounds (),_fa .Over ,nil );}else {_efc .Transform (_ffag ._bda ,_adc ,im ,im .Bounds (),_fa .Over ,&_fa .Options {DstMask :_ffag ._fdd ,DstMaskP :_ea .ZP });};};func (_cbf *Context )SetFillRGBA (r ,g ,b ,a float64 ){_fcb :=_dc .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_cbf ._fc =_fcb ;_cbf ._cf =_cgec (_fcb );};func (_ccd *Context )SetDash (dashes ...float64 ){_ccd ._dbe =dashes };func NewContextForImage (im _ea .Image )*Context {return NewContextForRGBA (_dfb (im ))};func (_eafa *Context )Clip (){_eafa .ClipPreserve ();_eafa .ClearPath ()};func (_eee *Context )SetFillStyle (pattern _bf .Pattern ){if _bac ,_ccf :=pattern .(*solidPattern );_ccf {_eee ._fc =_bac ._bcce ;};_eee ._cf =pattern ;};func _ecd (_ggc ,_be ,_da ,_fg ,_bc ,_fde float64 )[]_eaf .Point {_dg :=(_g .Hypot (_da -_ggc ,_fg -_be )+_g .Hypot (_bc -_da ,_fde -_fg ));_ba :=int (_dg +0.5);if _ba < 4{_ba =4;};_ag :=float64 (_ba )-1;_bd :=make ([]_eaf .Point ,_ba );for _cc :=0;_cc < _ba ;_cc ++{_fea :=float64 (_cc )/_ag ;_eff ,_bba :=_a (_ggc ,_be ,_da ,_fg ,_bc ,_fde ,_fea );_bd [_cc ]=_eaf .NewPoint (_eff ,_bba );};return _bd ;};func (_bcb *Context )ShearAbout (sx ,sy ,x ,y float64 ){_bcb .Translate (x ,y );_bcb .Shear (sx ,sy );_bcb .Translate (-x ,-y );};func (_gba *patternPainter )Paint (ss []_fac .Span ,done bool ){_gce :=_gba ._bcgc .Bounds ();for _ ,_eebg :=range ss {if _eebg .Y < _gce .Min .Y {continue ;};if _eebg .Y >=_gce .Max .Y {return ;};if _eebg .X0 < _gce .Min .X {_eebg .X0 =_gce .Min .X ;};if _eebg .X1 > _gce .Max .X {_eebg .X1 =_gce .Max .X ;};if _eebg .X0 >=_eebg .X1 {continue ;};const _gbbb =1<<16-1;_fff :=_eebg .Y -_gba ._bcgc .Rect .Min .Y ;_dcef :=_eebg .X0 -_gba ._bcgc .Rect .Min .X ;_cee :=(_eebg .Y -_gba ._bcgc .Rect .Min .Y )*_gba ._bcgc .Stride +(_eebg .X0 -_gba ._bcgc .Rect .Min .X )*4;_gac :=_cee +(_eebg .X1 -_eebg .X0 )*4;for _eebb ,_dde :=_cee ,_dcef ;_eebb < _gac ;_eebb ,_dde =_eebb +4,_dde +1{_ada :=_eebg .Alpha ;if _gba ._cbeb !=nil {_ada =_ada *uint32 (_gba ._cbeb .AlphaAt (_dde ,_fff ).A )/255;if _ada ==0{continue ;};};_acd :=_gba ._cfbf .ColorAt (_dde ,_fff );_bcfd ,_ecdb ,_dbgfc ,_bgcf :=_acd .RGBA ();_bbgde :=uint32 (_gba ._bcgc .Pix [_eebb +0]);_cabee :=uint32 (_gba ._bcgc .Pix [_eebb +1]);_ccad :=uint32 (_gba ._bcgc .Pix [_eebb +2]);_bcde :=uint32 (_gba ._bcgc .Pix [_eebb +3]);_afff :=(_gbbb -(_bgcf *_ada /_gbbb ))*0x101;_gba ._bcgc .Pix [_eebb +0]=uint8 ((_bbgde *_afff +_bcfd *_ada )/_gbbb >>8);_gba ._bcgc .Pix [_eebb +1]=uint8 ((_cabee *_afff +_ecdb *_ada )/_gbbb >>8);_gba ._bcgc .Pix [_eebb +2]=uint8 ((_ccad *_afff +_dbgfc *_ada )/_gbbb >>8);_gba ._bcgc .Pix [_eebb +3]=uint8 ((_bcde *_afff +_bgcf *_ada )/_gbbb >>8);};};};func (_cga *Context )Height ()int {return _cga ._abf };func (_fee *Context )Scale (x ,y float64 ){_fee ._ggb .Scale (x ,y )};func (_gefd *Context )Matrix ()_eaf .Matrix {return _gefd ._ggb };func (_bag *Context )DrawRoundedRectangle (x ,y ,w ,h ,r float64 ){_dcc ,_dfdb ,_fgc ,_dag :=x ,x +r ,x +w -r ,x +w ;_aeff ,_dcbd ,_eed ,_egg :=y ,y +r ,y +h -r ,y +h ;_bag .NewSubPath ();_bag .MoveTo (_dfdb ,_aeff );_bag .LineTo (_fgc ,_aeff );_bag .DrawArc (_fgc ,_dcbd ,r ,_aacc (270),_aacc (360));_bag .LineTo (_dag ,_eed );_bag .DrawArc (_fgc ,_eed ,r ,_aacc (0),_aacc (90));_bag .LineTo (_dfdb ,_egg );_bag .DrawArc (_dfdb ,_eed ,r ,_aacc (90),_aacc (180));_bag .LineTo (_dcc ,_dcbd );_bag .DrawArc (_dfdb ,_dcbd ,r ,_aacc (180),_aacc (270));_bag .ClosePath ();};func (_edcb *radialGradient )AddColorStop (offset float64 ,color _dc .Color ){_edcb ._ced =append (_edcb ._ced ,stop {_affd :offset ,_bgc :color });_ee .Sort (_edcb ._ced );};func (_fcf *linearGradient )AddColorStop (offset float64 ,color _dc .Color ){_fcf ._bgb =append (_fcf ._bgb ,stop {_affd :offset ,_bgc :color });_ee .Sort (_fcf ._bgb );};func (_fda *surfacePattern )ColorAt (x ,y int )_dc .Color {_dfa :=_fda ._fdf .Bounds ();switch _fda ._bdgf {case _gede :if y >=_dfa .Dy (){return _dc .Transparent ;};case _eaca :if x >=_dfa .Dx (){return _dc .Transparent ;};case _bfa :if x >=_dfa .Dx ()||y >=_dfa .Dy (){return _dc .Transparent ;};};x =x %_dfa .Dx ()+_dfa .Min .X ;y =y %_dfa .Dy ()+_dfa .Min .Y ;return _fda ._fdf .At (x ,y );};func _cgec (_dfcb _dc .Color )_bf .Pattern {return &solidPattern {_bcce :_dfcb }};func _dcbf (_gdbe ,_aace uint32 ,_cba float64 )uint8 {return uint8 (int32 (float64 (_gdbe )*(1.0-_cba )+float64 (_aace )*_cba )>>8);};func _ccae (_cdd [][]_eaf .Point ,_ggee []float64 ,_fcc float64 )[][]_eaf .Point {var _cce [][]_eaf .Point ;if len (_ggee )==0{return _cdd ;};if len (_ggee )==1{_ggee =append (_ggee ,_ggee [0]);};for _ ,_dfff :=range _cdd {if len (_dfff )< 2{continue ;};_ggeea :=_dfff [0];_abce :=1;_bfea :=0;_gdda :=0.0;if _fcc !=0{var _bdg float64 ;for _ ,_fcad :=range _ggee {_bdg +=_fcad ;};_fcc =_g .Mod (_fcc ,_bdg );if _fcc < 0{_fcc +=_bdg ;};for _dbc ,_gaee :=range _ggee {_fcc -=_gaee ;if _fcc < 0{_bfea =_dbc ;_gdda =_gaee +_fcc ;break ;};};};var _fab []_eaf .Point ;_fab =append (_fab ,_ggeea );for _abce < len (_dfff ){_gddad :=_ggee [_bfea ];_geb :=_dfff [_abce ];_bfgb :=_ggeea .Distance (_geb );_dga :=_gddad -_gdda ;if _bfgb > _dga {_egeb :=_dga /_bfgb ;_cfdde :=_ggeea .Interpolate (_geb ,_egeb );_fab =append (_fab ,_cfdde );if _bfea %2==0&&len (_fab )> 1{_cce =append (_cce ,_fab );};_fab =nil ;_fab =append (_fab ,_cfdde );_gdda =0;_ggeea =_cfdde ;_bfea =(_bfea +1)%len (_ggee );}else {_fab =append (_fab ,_geb );_ggeea =_geb ;_gdda +=_bfgb ;_abce ++;};};if _bfea %2==0&&len (_fab )> 1{_cce =append (_cce ,_fab );};};return _cce ;};func _caea (_dagd *_ea .RGBA ,_eadb *_ea .Alpha ,_afaf _bf .Pattern )*patternPainter {return &patternPainter {_dagd ,_eadb ,_afaf };};func _gfd (_acb _fe .Int26_6 )float64 {const _cdbd ,_gedf =6,1<<6-1;if _acb >=0{return float64 (_acb >>_cdbd )+float64 (_acb &_gedf )/64;};_acb =-_acb ;if _acb >=0{return -(float64 (_acb >>_cdbd )+float64 (_acb &_gedf )/64);};return 0;};type radialGradient struct{_ebab ,_bbgd ,_eddb circle ;_bbab ,_bbd float64 ;_gaag float64 ;_ced stops ;};func (_gefa *Context )ClipPreserve (){_aa :=_ea .NewAlpha (_ea .Rect (0,0,_gefa ._ffd ,_gefa ._abf ));_bcc :=_fac .NewAlphaOverPainter (_aa );_gefa .fill (_bcc );if _gefa ._fdd ==nil {_gefa ._fdd =_aa ;}else {_cff :=_ea .NewAlpha (_ea .Rect (0,0,_gefa ._ffd ,_gefa ._abf ));_fa .DrawMask (_cff ,_cff .Bounds (),_aa ,_ea .ZP ,_gefa ._fdd ,_ea .ZP ,_fa .Over );_gefa ._fdd =_cff ;};};func (_dcaf *linearGradient )ColorAt (x ,y int )_dc .Color {if len (_dcaf ._bgb )==0{return _dc .Transparent ;};_dae ,_bfc :=float64 (x ),float64 (y );_gcfc ,_dcbc ,_dbece ,_fbfe :=_dcaf ._dcaa ,_dcaf ._ccdd ,_dcaf ._becb ,_dcaf ._gda ;_dagc ,_beag :=_dbece -_gcfc ,_fbfe -_dcbc ;if _beag ==0&&_dagc !=0{return _bbde ((_dae -_gcfc )/_dagc ,_dcaf ._bgb );};if _dagc ==0&&_beag !=0{return _bbde ((_bfc -_dcbc )/_beag ,_dcaf ._bgb );};_bcfg :=_dagc *(_dae -_gcfc )+_beag *(_bfc -_dcbc );if _bcfg < 0{return _dcaf ._bgb [0]._bgc ;};_gdd :=_g .Hypot (_dagc ,_beag );_feg :=((_dae -_gcfc )*-_beag +(_bfc -_dcbc )*_dagc )/(_gdd *_gdd );_afabc ,_caa :=_gcfc +_feg *-_beag ,_dcbc +_feg *_dagc ;_deg :=_g .Hypot (_dae -_afabc ,_bfc -_caa )/_gdd ;return _bbde (_deg ,_dcaf ._bgb );};func _ga (_beb ,_dcg ,_ae ,_geg ,_fefd ,_cb ,_fbd ,_eg float64 )[]_eaf .Point {_cg :=(_g .Hypot (_ae -_beb ,_geg -_dcg )+_g .Hypot (_fefd -_ae ,_cb -_geg )+_g .Hypot (_fbd -_fefd ,_eg -_cb ));_db :=int (_cg +0.5);if _db < 4{_db =4;};_bfdae :=float64 (_db )-1;_ff :=make ([]_eaf .Point ,_db );for _agc :=0;_agc < _db ;_agc ++{_aca :=float64 (_agc )/_bfdae ;_bbae ,_bg :=_fdc (_beb ,_dcg ,_ae ,_geg ,_fefd ,_cb ,_fbd ,_eg ,_aca );_ff [_agc ]=_eaf .NewPoint (_bbae ,_bg );};return _ff ;};func (_fcg *Context )DrawPoint (x ,y ,r float64 ){_fcg .Push ();_cfcc ,_gcg :=_fcg .Transform (x ,y );_fcg .Identity ();_fcg .DrawCircle (_cfcc ,_gcg ,r );_fcg .Pop ();};func (_eac *Context )InvertMask (){if _eac ._fdd ==nil {_eac ._fdd =_ea .NewAlpha (_eac ._bda .Bounds ());}else {for _ccfc ,_afbe :=range _eac ._fdd .Pix {_eac ._fdd .Pix [_ccfc ]=255-_afbe ;};};};func (_egca *Context )DrawLine (x1 ,y1 ,x2 ,y2 float64 ){_egca .MoveTo (x1 ,y1 );_egca .LineTo (x2 ,y2 )};func _acg (_gcgc ,_ebac _dc .Color ,_bfbd float64 )_dc .Color {_dcee ,_egb ,_ddfd ,_eea :=_gcgc .RGBA ();_aab ,_gegg ,_dfc ,_gfe :=_ebac .RGBA ();return _dc .RGBA {_dcbf (_dcee ,_aab ,_bfbd ),_dcbf (_egb ,_gegg ,_bfbd ),_dcbf (_ddfd ,_dfc ,_bfbd ),_dcbf (_eea ,_gfe ,_bfbd )};};func (_bcf *Context )RotateAbout (angle ,x ,y float64 ){_bcf .Translate (x ,y );_bcf .Rotate (angle );_bcf .Translate (-x ,-y );};type patternPainter struct{_bcgc *_ea .RGBA ;_cbeb *_ea .Alpha ;_cfbf _bf .Pattern ;};