2021-02-11 10:35:13 +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 (_dd "errors";_d "fmt";_gb "github.com/golang/freetype/raster";_cb "github.com/unidoc/unipdf/v3/common";_cc "github.com/unidoc/unipdf/v3/internal/transform";_gc "github.com/unidoc/unipdf/v3/render/internal/context";_fa "golang.org/x/image/draw";_gd "golang.org/x/image/font";_ff "golang.org/x/image/math/f64";_ba "golang.org/x/image/math/fixed";_f "image";_cd "image/color";_a "image/draw";_ca "math";_g "sort";_b "strings";);func (_afaf *Context )DrawLine (x1 ,y1 ,x2 ,y2 float64 ){_afaf .MoveTo (x1 ,y1 );_afaf .LineTo (x2 ,y2 )};var (_eb =_fae (_cd .White );_dgd =_fae (_cd .Black ););func (_aaa *Context )DrawRectangle (x ,y ,w ,h float64 ){_aaa .NewSubPath ();_aaa .MoveTo (x ,y );_aaa .LineTo (x +w ,y );_aaa .LineTo (x +w ,y +h );_aaa .LineTo (x ,y +h );_aaa .ClosePath ();};func (_bbc *Context )SetStrokeStyle (pattern _gc .Pattern ){_bbc ._dda =pattern };func (_ada *Context )MeasureString (s string ,face _gd .Face )(_aed ,_bfff float64 ){_fgd :=&_gd .Drawer {Face :face };_ffg :=_fgd .MeasureString (s );return float64 (_ffg >>6),_ada ._aa .Tf .Size ;};type solidPattern struct{_feb _cd .Color };func (_dff *Context )drawString (_gdd string ,_bfd _gd .Face ,_gfa ,_fgc float64 ){_ebfd :=&_gd .Drawer {Src :_f .NewUniform (_dff ._gbd ),Face :_bfd ,Dot :_bac (_cc .NewPoint (_gfa ,_fgc ))};_gab :=rune (-1);for _ ,_bbgg :=range _gdd {if _gab >=0{_ebfd .Dot .X +=_ebfd .Face .Kern (_gab ,_bbgg );};_adg ,_aca ,_egg ,_bddc ,_bge :=_ebfd .Face .Glyph (_ebfd .Dot ,_bbgg );if !_bge {continue ;};_gcec :=_adg .Sub (_adg .Min );_deb :=_f .NewRGBA (_gcec );_fa .DrawMask (_deb ,_gcec ,_ebfd .Src ,_f .Point {},_aca ,_egg ,_fa .Over );var _cef *_fa .Options ;if _dff ._gag !=nil {_cef =&_fa .Options {DstMask :_dff ._gag ,DstMaskP :_f .Point {}};};_dfae :=_dff ._ccg .Clone ().Translate (float64 (_adg .Min .X ),float64 (_adg .Min .Y ));_fdg :=_ff .Aff3 {_dfae [0],_dfae [3],_dfae [6],_dfae [1],_dfae [4],_dfae [7]};_fa .BiLinear .Transform (_dff ._dfa ,_fdg ,_deb ,_gcec ,_fa .Over ,_cef );_ebfd .Dot .X +=_bddc ;_gab =_bbgg ;};};func (_fdfb *Context )ShearAbout (sx ,sy ,x ,y float64 ){_fdfb .Translate (x ,y );_fdfb .Shear (sx ,sy );_fdfb .Translate (-x ,-y );};func (_caed *Context )SetMatrix (m _cc .Matrix ){_caed ._ccg =m };func (_gbgb *Context )MoveTo (x ,y float64 ){if _gbgb ._bd {_gbgb ._de .Add1 (_bac (_gbgb ._gbde ));};x ,y =_gbgb .Transform (x ,y );_bafc :=_cc .NewPoint (x ,y );_bca :=_bac (_bafc );_gbgb ._fcd .Start (_bca );_gbgb ._de .Start (_bca );_gbgb ._gbde =_bafc ;_gbgb ._gbbf =_bafc ;_gbgb ._bd =true ;};func (_acdb *Context )DrawEllipse (x ,y ,rx ,ry float64 ){_acdb .NewSubPath ();_acdb .DrawEllipticalArc (x ,y ,rx ,ry ,0,2*_ca .Pi );_acdb .ClosePath ();};func (_ffb *radialGradient )ColorAt (x ,y int )_cd .Color {if len (_ffb ._gbbb )==0{return _cd .Transparent ;};_gbf ,_fedd :=float64 (x )+0.5-_ffb ._ffd ._aaae ,float64 (y )+0.5-_ffb ._ffd ._dde ;_gcde :=_cbf (_gbf ,_fedd ,_ffb ._ffd ._eda ,_ffb ._bfca ._aaae ,_ffb ._bfca ._dde ,_ffb ._bfca ._eda );_agec :=_cbf (_gbf ,_fedd ,-_ffb ._ffd ._eda ,_gbf ,_fedd ,_ffb ._ffd ._eda );if _ffb ._gae ==0{if _gcde ==0{return _cd .Transparent ;};_beee :=0.5*_agec /_gcde ;if _beee *_ffb ._bfca ._eda >=_ffb ._gded {return _dba (_beee ,_ffb ._gbbb );};return _cd .Transparent ;};_ceg :=_cbf (_gcde ,_ffb ._gae ,0,_gcde ,-_agec ,0);if _ceg >=0{_gfaa :=_ca .Sqrt (_ceg );_gcg :=(_gcde +_gfaa )*_ffb ._cgcf ;_daff :=(_gcde -_gfaa )*_ffb ._cgcf ;if _gcg *_ffb ._bfca ._eda >=_ffb ._gded {return _dba (_gcg ,_ffb ._gbbb );}else if _daff *_ffb ._bfca ._eda >=_ffb ._gded {return _dba (_daff ,_ffb ._gbbb );};};return _cd .Transparent ;};func (_ddd *Context )DrawRoundedRectangle (x ,y ,w ,h ,r float64 ){_eba ,_bcag ,_dfba ,_dbe :=x ,x +r ,x +w -r ,x +w ;_bbeb ,_cdf ,_efg ,_eea :=y ,y +r ,y +h -r ,y +h ;_ddd .NewSubPath ();_ddd .MoveTo (_bcag ,_bbeb );_ddd .LineTo (_dfba ,_bbeb );_ddd .DrawArc (_dfba ,_cdf ,r ,_cebe (270),_cebe (360));_ddd .LineTo (_dbe ,_efg );_ddd .DrawArc (_dfba ,_efg ,r ,_cebe (0),_cebe (90));_ddd .LineTo (_bcag ,_eea );_ddd .DrawArc (_bcag ,_efg ,r ,_cebe (90),_cebe (180));_ddd .LineTo (_eba ,_cdf );_ddd .DrawArc (_bcag ,_cdf ,r ,_cebe (180),_cebe (270));_ddd .ClosePath ();};func (_ageb *Context )Translate (x ,y float64 ){_ageb ._ccg =_ageb ._ccg .Translate (x ,y )};type stops []stop ;func (_dfg *Context )DrawStringAnchored (s string ,face _gd .Face ,x ,y ,ax ,ay float64 ){_ded ,_edd :=_dfg .MeasureString (s ,face );_dfg .drawString (s ,face ,x -ax *_ded ,y +ay *_edd );};func _fae (_cccb _cd .Color )_gc .Pattern {return &solidPattern {_feb :_cccb }};func NewContextForImage (im _f .Image )*Context {return NewContextForRGBA (_ebbd (im ))};func (_fce *Context )SetColor (c _cd .Color ){_fce .setFillAndStrokeColor (c )};func (_gbcb *Context )LineWidth ()float64 {return _gbcb ._ccc };func (_bbe *Context )SetRGBA255 (r ,g ,b ,a int ){_bbe ._gbd =_cd .NRGBA {uint8 (r ),uint8 (g ),uint8 (b ),uint8 (a )};_bbe .setFillAndStrokeColor (_bbe ._gbd );};func _bac (_cbeg _cc .Point )_ba .Point26_6 {return _ba .Point26_6 {X :_deba (_cbeg .X ),Y :_deba (_cbeg .Y )}};func (_dgce *Context )SetStrokeRGBA (r ,g ,b ,a float64 ){_cac :=_cd .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_dgce ._dda =_fae (_cac );};type linearGradient struct{_ccfg ,_cga ,_eec ,_bec float64 ;_gagd stops ;};func (_cbe *Context )TextState ()*_gc .TextState {return _cbe ._aa };func _caa (_dad ,_ga ,_bae ,_cce ,_ef ,_efd float64 )[]_cc .Point {_ab :=(_ca .Hypot (_bae -_dad ,_cce -_ga )+_ca .Hypot (_ef -_bae ,_efd -_cce ));_fd :=int (_ab +0.5);if _fd < 4{_fd =4;};_cdg :=float64 (_fd )-1;_dg :=make ([]_cc .Point ,_fd );for _daa :=0;_daa < _fd ;_daa ++{_eg :=float64 (_daa )/_cdg ;_gbc ,_ac :=_da (_dad ,_ga ,_bae ,_cce ,_ef ,_efd ,_eg );_dg [_daa ]=_cc .NewPoint (_gbc ,_ac );};return _dg ;};func (_eeb *Context )Stroke (){_eeb .StrokePreserve ();_eeb .ClearPath ()};func (_ddc *Context )capper ()_gb .Capper {switch _ddc ._ggg {case _gc .LineCapButt :return _gb .ButtCapper ;case _gc .LineCapRound :return _gb .RoundCapper ;case _gc .LineCapSquare :return _gb .SquareCapper ;};return nil ;};func (_bgf stops )Swap (i ,j int ){_bgf [i ],_bgf [j ]=_bgf [j ],_bgf [i ]};func _dgdd (_cfagd [][]_cc .Point ,_bbff []float64 ,_dccg float64 )[][]_cc .Point {var _fec [][]_cc .Point ;if len (_bbff )==0{return _cfagd ;};if len (_bbff )==1{_bbff =append (_bbff ,_bbff [0]);};for _ ,_cccc :=range _cfagd {if len (_cccc )< 2{continue ;};_ebfc :=_cccc [0];_gcb :=1;_abgef :=0;_cfaa :=0.0;if _dccg !=0{var _cea float64 ;for _ ,_bbfe :=range _bbff {_cea +=_bbfe ;};_dccg =_ca .Mod (_dccg ,_cea );if _dccg < 0{_dccg +=_cea ;};for _fdc ,_dfga :=range _bbff {_dccg -=_dfga ;if _dccg < 0{_abgef =_fdc ;_cfaa =_dfga +_dccg ;break ;};};};var _aba []_cc .Point ;_aba =append (_aba ,_ebfc );for _gcb < len (_cccc ){_dafe :=_bbff [_abgef ];_badg :=_cccc [_gcb ];_cgff :=_ebfc .Distance (_badg );_gbbbb :=_dafe -_cfaa ;if _cgff > _gbbbb {_faae :=_gbbbb /_cgff ;_gcef :=_ebfc .Interpolate (_badg ,_faae );_aba =append (_aba ,_gcef );if _abgef %2==0&&len (_aba )> 1{_fec =append (_fec ,_aba );};_aba =nil ;_aba =append (_aba ,_gcef );_cfaa =0;_ebfc =_gcef ;_abgef =(_abgef +1)%len (_bbff );}else {_aba =append (_aba ,_badg );_ebfc =_badg ;_cfaa +=_cgff ;_gcb ++;};};if _abgef %2==0&&len (_aba )> 1{_fec =append (_fec ,_aba );};};return _fec ;};func NewContext (width ,height int )*Context {return NewContextForRGBA (_f .NewRGBA (_f .Rect (0,0,width ,height )));};func (_acd *Context )SetLineWidth (lineWidth float64 ){_acd ._ccc =lineWidth };func (_cdad *Context )stroke (_fcdb _gb .Painter ){_daae :=_cdad ._fcd ;if len (_cdad ._ee )> 0{_daae =_dgbd (_daae ,_cdad ._ee ,_cdad ._gbef );}else {_daae =_gdgb (_cabg (_daae ));};_gce :=_cdad ._af ;_gce .UseNonZeroWinding =true ;_gce .Clear ();_bea :=(_cdad ._ccg .ScalingFactorX ()+_cdad ._ccg .ScalingFactorY ())/2;_gce .AddStroke (_daae ,_deba (_cdad ._ccc *_bea ),_cdad .capper (),_cdad .joiner ());_gce .Rasterize (_fcdb );};func (_ega *radialGradient )AddColorStop (offset float64 ,color _cd .Color ){_ega ._gbbb =append (_ega ._gbbb ,stop {_ede :offset ,_dddf :color });_g .Sort (_ega ._gbbb );};func (_bfe *Context )fill (_ffa _gb .Painter ){_afb :=_bfe ._de ;if _bfe ._bd {_afb =make (_gb .Path ,len (_bfe ._de ));copy (_afb ,_bfe ._de );_afb .Add1 (_bac (_bfe ._gbde ));};_fga :=_bfe ._af ;_fga .UseNonZeroWinding =_bfe ._ag ==_gc .FillRuleWinding ;_fga .Clear ();_fga .AddPath (_afb );_fga .Rasterize (_ffa );};func (_fad *Context )SetPixel (x ,y int ){_fad ._dfa .Set (x ,y ,_fad ._gbd )};func (_fde *patternPainter )Paint (ss []_gb .Span ,done bool ){_edab :=_fde ._adb .Bounds ();for _ ,_cbc :=range ss {if _cbc .Y < _edab .Min .Y {continue ;};if _cbc .Y >=_edab .Max .Y {return ;};if _cbc .X0 < _edab .Min .X {_cbc .X0 =_edab .Min .X ;};if _cbc .X1 > _edab .Max .X {_cbc .X1 =_edab .Max .X ;};if _cbc .X0 >=_cbc .X1 {continue ;};const _bed =1<<16-1;_fgbb :=_cbc .Y -_fde ._adb .Rect .Min .Y ;_beab :=_cbc .X0 -_fde ._adb .Rect .Min .X ;_dbag :=(_cbc .Y -_fde ._adb .Rect .Min .Y )*_fde ._adb .Stride +(_cbc .X0 -_fde ._adb .Rect .Min .X )*4;_cad :=_dbag +(_cbc .X1 -_cbc .X0 )*4;for _baee ,_ecg :=_dbag ,_beab ;_baee < _cad ;_baee ,_ecg =_baee +4,_ecg +1{_gdfe :=_cbc .Alpha ;if _fde ._ecce !=nil {_gdfe =_gdfe *uint32 (_fde ._ecce .AlphaAt (_ecg ,_fgbb ).A )/255;if _gdfe ==0{continue ;};};_bgfb :=_fde ._egbe .ColorAt (_ecg ,_fgbb );_aafc ,_dbfb ,_cgg ,_bfa :=_bgfb .RGBA ();_gcge :=uint32 (_fde ._adb .Pix [_baee +0]);_gcc :=uint32 (_fde ._adb .Pix [_baee +1]);_bdce :=uint32 (_fde ._adb .Pix [_baee +2]);_gcbb :=uint32 (_fde ._adb .Pix [_baee +3]);_acdc :=(_bed -(_bfa *_gdfe /_bed ))*0x101;_fde ._adb .Pix [_baee +0]=uint8 ((_gcge *_acdc +_aafc *_gdfe )/_bed >>8);_fde ._adb .Pix [_baee +1]=uint8 ((_gcc *_acdc +_dbfb *_gdfe )/_bed >>8);_fde ._adb .Pix [_baee +2]=uint8 ((_bdce *_acdc +_cgg *_gdfe )/_bed >>8);_fde ._adb .Pix [_baee +3]=uint8 ((_gcbb *_acdc +_bfa *_gdfe )/_bed >>8);};};};type stop struct{_ede float64 ;_dddf _cd .Color ;};func _ebbd (_bdbe _f .Image )*_f .RGBA {_aaaa :=_bdbe .Bounds ();_edabg :=_f .NewRGBA (_aaaa );_a .Draw (_edabg ,_aaaa ,_bdbe ,_aaaa .Min ,_a .Src );return _edabg ;};func (_baab *linearGradient )AddColorStop (offset float64 ,color _cd .Color ){_baab ._gagd =append (_baab ._gagd ,stop {_ede :offset ,_dddf :color });_g .Sort (_baab ._gagd );};func _da (_e ,_ea ,_bab ,_be ,_baf ,_gbb ,_gg float64 )(_cab ,_dab float64 ){_bf :=1-_gg ;_gf :=_bf *_bf ;_cdc :=2*_bf *_gg ;_df :=_gg *_gg ;_cab =_gf *_e +_cdc *_bab +_df *_baf ;_dab =_gf *_ea +_cdc *_be +_df *_gbb ;return ;};func (_daea *Context )DrawArc (x ,y ,r ,angle1 ,angle2 float64 ){_daea .DrawEllipticalArc (x ,y ,r ,r ,angle1 ,angle2 );};func (_dgcg *Context )CubicTo (x1 ,y1 ,x2 ,y2 ,x3 ,y3 float64 ){if !_dgcg ._bd {_dgcg .MoveTo (x1 ,y1 );};_afg ,_aee :=_dgcg ._gbbf .X ,_dgcg ._gbbf .Y ;x1 ,y1 =_dgcg .Transform (x1 ,y1 );x2 ,y2 =_dgcg .Transform (x2 ,y2 );x3 ,y3 =_dgcg .Transform (x3 ,y3 );_gfb :=_ad (_afg ,_aee ,x1 ,y1 ,x2 ,y2 ,x3 ,y3 );_fgf :=_bac (_dgcg ._gbbf );for _ ,_bbcd :=range _gfb [1:]{_afa :=_bac (_bbcd );if _afa ==_fgf {continue ;};_fgf =_afa ;_dgcg ._fcd .Add1 (_afa );_dgcg ._de .Add1 (_afa );_dgcg ._gbbf =_bbcd ;};};func (_fbg *Context )NewSubPath (){if _fbg ._bd {_fbg ._de .Add1 (_bac (_fbg ._gbde ));};_fbg ._bd =false ;};func (_bgdf *Context )SetFillStyle (pattern _gc .Pattern ){if _cgb ,_acc :=pattern .(*solidPattern );_acc {_bgdf ._gbd =_cgb ._feb ;};_bgdf ._dgc =pattern ;};func (_gdge *Context )Matrix ()_cc .Matrix {return _gdge ._ccg };func _aeed (_bgdb _ba .Int26_6 )float64 {const _cbd ,_bceb =6,1<<6-1;if _bgdb >=0{return float64 (_bgdb >>_cbd )+float64 (_bgdb &_bceb )/64;};_bgdb =-_bgdb ;if _bgdb >=0{return -(float64 (_bgdb >>_cbd )+float64 (_bgdb &_bceb )/64);};return 0;};func (_abd *Context )drawRegularPolygon (_cae int ,_adc ,_aggg ,_aac ,_cdce float64 ){_eaa :=2*_ca .Pi /float64 (_cae );_cdce -=_ca .Pi /2;if _cae %2==0{_cdce +=_eaa /2;};_abd .NewSubPath ();for _aad :=0;_aad < _cae ;_aad ++{_bbaf :=_cdce +_eaa *float64 (_aad );_abd .LineTo (_adc +_aac *_ca .Cos (_bbaf ),_aggg +_aac *_ca .Sin (_bbaf ));};_abd .ClosePath ();};func (_gfc *Context )ClipPreserve (){_bbf :=_f .NewAlpha (_f .Rect (0,0,_gfc ._ffc ,_gfc ._dbd ));_bdb :=_gb .NewAlphaOverPainter (_bbf );_gfc .fill (_bdb );if _gfc ._gag ==nil {_gfc ._gag =_bbf ;}else {_dgdf :=_f .NewAlpha (_f .Rect (0,0,_gfc ._ffc ,_gfc ._dbd ));_fa .DrawMask (_dgdf ,_dgdf .Bounds (),_bbf ,_f .Point {},_gfc ._gag ,_f .Point {},_fa .Over );_gfc ._gag =_dgdf ;};};func (_cbg *Context )DrawImage (im _f .Image ,x ,y int ){_cbg .DrawImageAnchored (im ,x ,y ,0,0)};func (_fac *Context )SetDashOffset (offset float64 ){_fac ._gbef =offset };func _ad (_bfc ,_cfa ,_geg ,_gdg ,_bad ,_fc ,_dae ,_dbb float64 )[]_cc .Point {_cabe :=(_ca .Hypot (_geg -_bfc ,_gdg -_cfa )+_ca .Hypot (_bad -_geg ,_fc -_gdg )+_ca .Hypot (_dae -_bad ,_dbb -_fc ));_gec :=int (_cabe +0.5);if _gec < 4{_gec =4;};_cg :=float64 (_gec )-1;_dbf :=make ([]_cc .Point ,_gec );for _abg :=0;_abg < _gec ;_abg ++{_cdcd :=float64 (_abg )/_cg ;_bc ,_ae :=_gba (_bfc ,_cfa ,_geg ,_gdg ,_bad ,_fc ,_dae ,_dbb ,_cdcd );_dbf [_abg ]=_cc .NewPoint (_bc ,_ae );};return _dbf ;};func (_daab *Context )Transform (x ,y float64 )(_aaac ,_ecc float64 ){return _daab ._ccg .Transform (x ,y );};func (_baa *Context )joiner ()_gb .Joiner {switch _baa ._gbeg {case _gc .LineJoinBevel :return _gb .BevelJoiner ;case _gc .LineJoinRound :return _gb .RoundJoiner ;};return nil ;};func (_gac *Context )DrawCircle (x ,y ,r float64 ){_gac .NewSubPath ();_gac .DrawEllipticalArc (x ,y ,r ,r ,0,2*_ca .Pi );_gac .ClosePath ();};func (_gde *Context )Identity (){_gde ._ccg =_cc .IdentityMatrix ()};func (_ce *Context )Clip (){_ce .ClipPreserve ();_ce .ClearPath ()};func _cabg (_gddb _gb .Path )[][]_cc .Point {var _bag [][]_cc .Point ;var _dddc []_cc .Point ;var _cgbf ,_ggdd float64 ;for _bgg :=0;_bgg < len (_gddb );{switch _gddb [_bgg ]{case 0:if len (_dddc )> 0{_bag =append (_bag ,_dddc );_dddc =nil ;};_cdaf :=_aeed (_gddb [_bgg +1]);_gfg :=_aeed (_gddb [_bgg +2]);_dddc =append (_dddc ,_cc .NewPoint (_cdaf ,_gfg ));_cgbf ,_ggdd =_cdaf ,_gfg ;_bgg +=4;case 1:_agea :=_aeed (_gddb [_bgg +1]);_gebd :=_aeed (_gddb [_bgg +2]);_dddc =append (_dddc ,_cc .NewPoint (_agea ,_gebd ));_cgbf ,_ggdd =_agea ,_gebd ;_bgg +=4;case 2:_bbcb :=_aeed (_gddb [_bgg +1]);_dfdfa :=_aeed (_gddb [_bgg +2]);_bfbd :=_aeed (_gddb [_bgg +3]);_ffda :=_aeed (_gddb [_bgg +4]);_fda :=_caa (_cgbf ,_ggdd ,_bbcb ,_dfdfa ,_bfbd ,_ffda );_dddc =append (_dddc ,_fda ...);_cgbf ,_ggdd =_bfbd ,_ffda ;_bgg +=6;case 3:_agc :=_aeed (_gddb [_bgg +1]);_addfg :=_aeed (_gddb [_bgg +2]);_abc :=_aeed (_gddb [_bgg +3]);_egb :=_aeed (_gddb [_bgg +4]);_gee :=_aeed (_gddb [_bgg +5]);_aef :=_aeed (_gddb [_bgg +6]);_egbb :=_ad (_cgbf ,_ggdd ,_agc ,_addfg ,_abc ,_egb ,_gee ,_aef );_dddc =append (_dddc ,_egbb ...);_cgbf ,_ggdd =_gee ,_aef ;_bgg +=8;default:_cb .Log .Debug ("\u0057\u0041\u0052\u004e: \u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0070\u0061\u0074\u0068\u003a\u0020%\u0076",_gddb );return _bag ;};};if len (_dddc )> 0{_bag =append (_bag ,_dddc );};return _bag ;};func (_ed *Context )SetRGB255 (r ,g ,b int ){_ed .SetRGBA255 (r ,g ,b ,255)};func (_bgd *Context )SetLineCap (lineCap _gc .LineCap ){_bgd ._ggg =lineCap };func (_aea *Context )SetMask (mask *_f .Alpha )error {if mask .Bounds ().Size ()!=_aea ._dfa .Bounds ().Size (){return _dd .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");};_aea ._gag =mask ;return nil ;};func (_cda *Context )SetFillRGBA (r ,g ,b ,a float64 ){_cag :=_cd .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_cda ._gbd =_cag ;_cda ._dgc =_fae (_cag );};type repeatOp int ;func _deba (_bffa float64 )_ba .Int26_6 {return _ba .Int26_6 (_bffa *64)};func (_fed *Context )Fill (){_fed .FillPreserve ();_fed .ClearPath ()};func (_age *Context )AsMask ()*_f .Alpha {_faa :=_f .NewAlpha (_age ._dfa .Bounds ());_fa .Draw (_faa ,_age ._dfa .Bounds (),_age ._dfa ,_f .Point {},_fa .Src );return _faa ;};type Context struct{_ffc int ;_dbd int ;_af *_gb .Rasterizer ;_dfa *_f .RGBA ;_gag *_f .Alpha ;_gbd _cd .Color ;_dgc _gc .Pattern ;_dda _gc .Pattern ;_fcd _gb .Path ;_de _gb .Path ;_gbde _cc .Point ;_gbbf _cc .Point ;_bd bool ;_ee []float64 ;_gbef float64 ;_ccc float64 ;_ggg _gc .LineCap ;_gbeg _gc .LineJoin ;_ag _gc .FillRule ;_ccg _cc .Matrix ;_aa *_gc .TextState ;_bbb []*Context ;};type circle struct{_aaae ,_dde ,_eda float64 };func (_dead *Context )Push (){_ceb :=*_dead ;_dead ._bbb =append (_dead ._bbb ,&_ceb )};func (_eafd *Context )RotateAbout (angle ,x ,y float64 ){_eafd .Translate (x ,y );_eafd .Rotate (angle );_eafd .Translate (-x ,-y );};func (_dbbe *Context )SetFillRule (fillRule _gc .FillRule ){_dbbe ._ag =fillRule };func (_fdfg *Context )Width ()int {return _fdfg ._ffc };func (_add *Context )SetDash (dashes ...float64 ){_add ._ee =dashes };func (_dgbc stops )Less (i ,j int )bool {return _dgbc [i ]._ede < _dgbc [j ]._ede };func _gbeb (_cbad ,_bfb ,_dfda ,_fdgb ,_gfbf ,_abb float64 )_gc .Gradient {_bddcf :=circle {_cbad ,_bfb ,_dfda };_bbdf :=circle {_fdgb ,_gfbf ,_abb };_cdcec :=circle {_fdgb -_cbad ,_gfbf -_bfb ,_abb -_dfda };_cfag :=_cbf (_cdcec ._aaae ,_cdcec ._dde ,-_cdcec ._eda ,_cdcec ._aaae ,_cdcec ._dde ,_cdcec ._eda );var _cdcc float64 ;if _cfag !=0{_cdcc =1.0/_cfag ;};_eff :=-_bddcf ._eda ;_gbefd :=&radialGradient {_ffd :_bddcf ,_bddb :_bbdf ,_bfca :_cdcec ,_gae :_cfag ,_cgcf :_cdcc ,_gded :_eff };return _gbefd ;};const (_bce repeatOp =iota ;_cage ;_aaf ;_gabb ;);func (_aecd *Context )ClearPath (){_aecd ._fcd .Clear ();_aecd ._de .Clear ();_aecd ._bd =false };func _bde (_afee ,_adgc ,_eabc ,_bef float64 )_gc .Gradient {_afd :=&linearGradient {_ccfg :_afee ,_cga :_adgc ,_eec :_eabc ,_bec :_bef };return _afd ;};func (_abgc *Context )StrokePattern ()_gc .Pattern {return _abgc ._dda };func (_edc *Context )DrawString (s string ,face _gd .Face ,x ,y float64 ){_edc .DrawStringAnchored (s ,face ,x ,y ,0,0);};func _gba (_cba ,_bb ,_dc ,_eaf ,_fdf ,_dfb ,_ge ,_bg ,_eae float64 )(_gbe ,_cf float64 ){_gbg :=1-_eae ;_fb :=_gbg *_gbg *_gbg ;_db :=3*_gbg *_gbg *_eae ;_dgb :=3*_gbg *_eae *_eae ;_acb :=_eae *_eae *_eae ;_gbe =_fb *_cba +_db *_dc +_dgb *_fdf +_acb *_ge ;_cf =_fb *_bb +_db *_eaf +_dgb *_dfb +_acb *_bg ;return ;};func _cbf (_eafe ,_egfe ,_befe ,_cfad ,_eeba ,_fea float64 )float64 {return _eafe *_cfad +_egfe *_eeba +_befe *_fea ;};func (_acbd *Context )Height ()int {return _acbd ._dbd };func _gdgb (_cagc [][]_cc .Point )_gb .Path {var _befg _gb .Path ;for _ ,_eed :=range _cagc {var _acg _ba .Point26_6 ;for _cfff ,_ccfc :=range _eed {_gbdb :=_bac (_ccfc );if _cfff ==0{_befg .Start (_gbdb );}else {_ebb :=_gbdb .X -_acg .X ;_bgfg :=_gbdb .Y -_acg .Y ;if _ebb < 0{_ebb =-_ebb ;};if _bgfg < 0{_bgfg =-_bgfg ;};if _ebb +_bgfg > 8{_befg .Add1 (_gbdb );};};_acg =_gbdb ;};};return _befg ;};func (_dfdf *Context )DrawImageAnchored (im _f .Image ,x ,y int ,ax ,ay float64 ){_efb :=im .Bounds ().Size ();x -=int (ax *float64 (_efb .X ));y -=int (ay *float64 (_efb .Y ));_gca :=_fa .BiLinear ;_gdgg :=_dfdf ._ccg .Clone ().Translate (float64 (x ),float64 (y ));_caad :=_ff .Aff3 {_gdgg [0],_gdgg [3],_gdgg [6],_gdgg [1],_gdgg [4],_gdgg [7]};if _dfdf ._gag ==nil {_gca .Transform (_dfdf ._dfa ,_caad ,im ,im .Bounds (),_fa .Over ,nil );}else {_gca .Transform (_dfdf ._dfa ,_caad ,im ,im .Bounds (),_fa .Over ,&_fa .Options {DstMask :_dfdf ._gag ,DstMaskP :_f .Point {}});};};func (_fcc *Context )DrawEllipticalArc (x ,y ,rx ,ry ,angle1 ,angle2 float64 ){const _afe =16;for _bbd :=0;_bbd < _afe ;_bbd ++{_gfbd :=float64 (_bbd +0)/_afe ;_cfac :=float64 (_bbd +1)/_afe ;_dfd :=angle1 +(angle2 -angle1 )*_gfbd ;_bada :=angle1 +(angle2 -angle1 )*_cfac ;_aae :=x +rx *_ca .Cos (_dfd );_cgf :=y +ry *_ca .Sin (_dfd );_abge :=x +rx *_ca .Cos ((_dfd +_bada )/2);_ebac :=y +ry *_ca .Sin ((_dfd +_bada )/2);_cdgc :=x +rx *_ca .Cos (_bada );_dbgb :=y +ry *_ca .Sin (_bada );_agge :=2*_abge -_aae /2-_cdgc /2;_dafd :=2*_ebac -_cgf /2-_dbgb /2;if _bbd ==0{if _fcc ._bd {_fcc .LineTo (_aae ,_cgf );}else {_fcc .MoveTo (_aae ,_cgf );};};_fcc .QuadraticTo (_agge ,_dafd ,_cdgc ,_dbgb );};};func _dfgd (_gega *_f .RGBA ,_fbd *_f .Alpha ,_ffad _gc .Pattern )*patternPainter {return &patternPainter {_gega ,_fbd ,_ffad };};func (_adf *Context )SetRGB (r ,g ,b float64 ){_adf .SetRGBA (r ,g ,b ,1)};func _dba (_aeac float64 ,_daec stops )_cd .Color {if _aeac <=0.0||len (_daec )==1{return _daec [0]._dddf ;};_fgb :=_daec [len (_daec )-1];if _aeac >=_fgb ._ede {return _fgb ._dddf ;};for _ecb ,_gdb :=range _daec [1:]{if _aeac < _gdb ._ede {_aeac =(_aeac -_daec [_ecb ]._ede )/(_gdb ._ede -_daec [_ecb ]._ede );return _cee (_daec [_ecb ]._dddf ,_gdb ._dddf ,_aeac );};};return _fgb ._dddf ;};func (_abe *Context )InvertMask (){if _abe ._gag ==nil {_abe ._gag =_f .NewAlpha (_abe ._dfa .Bounds ());}else {for _bee ,_eeg :=range _abe ._gag .Pix {_abe ._gag .Pix [_bee ]=255-_eeg ;};};};func _acgd (_efab _f .Image ,_afdb repeatOp )_gc .Pattern {return &surfacePattern {_cgad :_efab ,_ege :_afdb };};func _cdgf (_ggd ,_cddd uint32 ,_ggdb float64 )uint8 {return uint8 (int32 (float64 (_ggd )*(1.0-_ggdb )+float64 (_cddd )*_ggdb )>>8);};func (_gbca *Context )setFillAndStrokeColor (_fba _cd .Color ){_gbca ._gbd =_fba ;_gbca ._dgc =_fae (_fba );_gbca ._dda =_fae (_fba );};func (_cgc *Context )FillPattern ()_gc .Pattern {return _cgc ._dgc };func (_fede *Context )Pop (){_gcd :=*_fede ;_ffgd :=_fede ._bbb ;_dbgc :=_ffgd [len (_ffgd )-1];*_fede =*_dbgc ;_fede ._fcd =_gcd ._fcd ;_fede ._de =_gcd ._de ;_fede ._gbde =_gcd ._gbde ;_fede ._gbbf =_gcd ._gbbf ;_fede ._bd =_gcd ._bd ;_fede ._aa =_gcd ._aa ;};func (_daf *Context )Clear (){_gaf :=_f .NewUniform (_daf ._gbd );_fa .Draw (_daf ._dfa ,_daf ._dfa .Bounds (),_gaf ,_f .Point {},_fa .Src );};func _dgbd (_acce _gb .Path ,_bddcd []float64 ,_cec float64 )_gb .Path {return _gdgb (_dgdd (_cabg (_acce ),_bddcd ,_cec ));};func _cee (_ggb ,_dag _cd .Color ,_dcbe float64 )_cd .Color {_aade ,_gcf ,_dge ,_gdf :=_ggb .RGBA ();_ebaa ,_gaa ,_beb ,_feab :=_dag .RGBA ();return _cd .RGBA {_cdgf (_aade ,_ebaa ,_dcbe ),_cdgf (_gcf ,_gaa ,_dcbe ),_cdgf (_dge ,_beb ,_dcbe ),_cdgf (_gdf ,_feab ,_dcbe )};};func (_aag *Context )Scale (x ,y float64 ){_aag ._ccg =_aag ._ccg .Scale (x ,y )};func (_affe *linearGradient )ColorAt (x ,y int )_cd .Color {if len (_affe ._gagd )==0{return _cd .Transparent ;};_cdd ,_dbeb :=float64 (x ),float64 (y );_aggb ,_ddcb ,_gaba ,_ebe :=_affe ._ccfg ,_affe ._cga ,_affe ._eec ,_affe ._bec ;_dcb ,_dabd :=_gaba -_aggb ,_ebe -_ddcb ;if _dabd ==0&&_dcb !=0{return _dba ((_cdd -_aggb )/_dcb ,_affe ._gagd );};if _dcb ==0&&_dabd !=0{return _dba ((_dbeb -_ddcb )/_dabd ,_affe ._gagd );};_gebg :=_dcb *(_cdd -_aggb )+_dabd *(_dbeb -_ddcb );if _gebg < 0{return _affe ._gagd [0]._dddf ;};_cfd :=_ca .Hypot (_dcb ,_dabd );_affd :=((_cdd -_aggb )*-_dabd +(_dbeb -_ddcb )*_dcb )/(_cfd *_cfd );_adaa ,_bfcg :=_aggb +_affd *-_dabd ,_ddcb +_affd *_dcb ;_cff :=_ca .Hypot (_cdd -_adaa ,_dbeb -_bfcg )/_cfd ;return _dba (_cff ,_affe ._gagd );};type patternPainter struct{_adb *_f .RGBA ;_ecce *_f .Alpha ;_egbe _gc .Pattern ;};func (_gad *Context )ClosePath (){if _gad ._bd {_ebf :=_bac (_gad ._gbde );_gad ._fcd .Add1 (_ebf );_gad ._de .Add1 (_ebf );_gad ._gbbf =_gad ._gbde ;};};func _cebe (_bdeg float64 )float64 {return _bdeg *_ca .Pi /180};type radialGradient struct{_ffd ,_bddb ,_bfca circle ;_gae ,_cgcf float64 ;_gded float64 ;_gbbb stops ;};func (_efc *solidPattern )ColorAt (x ,y int )_cd .Color {return _efc ._feb };func (_ccf *Context )SetLineJoin (lineJoin _gc .LineJoin ){_ccf ._gbeg =lineJoin };func (_egge *Context )ScaleAbout (sx ,sy ,x ,y float64 ){_egge .Translate (x ,y );_egge .Scale (sx ,sy );_egge .Translate (-x ,-y );};func (_fbe stops )Len ()int {return len (_fbe )};func (_bba *Context )FillPreserve (){var _eab _gb .Painter ;if _bba ._gag ==nil {if _geb ,_dbfd :=_bba ._dgc .(*solidPattern );_dbfd {_dea :=_gb .NewRGBAPainter (_bba ._dfa );_dea .SetColor (_geb ._feb );_eab =_dea ;};};if _eab ==nil {_eab =_dfgd (_bba ._dfa ,_bba ._gag ,_bba ._dgc );};_bba .fill (_eab );};func (_aff *Context )StrokePreserve (){var _aecg _gb .Painter ;if _aff ._gag ==nil {if _bdd ,_ddcc :=_aff ._dda .(*solidPattern );_ddcc {_bbg :=_gb .NewRGBAPainter (_aff ._dfa );_bbg .SetColor (_bdd ._feb );_aecg =_bbg ;};};if _aecg ==nil {_aecg =_dfgd (_aff ._dfa ,_aff ._gag ,_aff ._dda );};_aff .stroke (_aecg );};func (_bcd *Context )ResetClip (){_bcd ._gag =nil };type surfacePattern struct{_cgad _f .Image ;_ege repeatOp ;};func (_eac *Context )Rotate (angle float64 ){_eac ._ccg =_eac ._ccg .Rotate (angle )};func (_eacf *surfacePattern )ColorAt (x ,y int )_cd .Color {_dafb :=_eacf ._cgad .Bounds ();switch _eacf ._ege {case _cage :if y >=_dafb .Dy (){return _cd .Transparent ;};case _aaf :if x >=_dafb .Dx (){return _cd .Transparent ;};case _gabb :if x >=_dafb .Dx ()||y >=_dafb .Dy (){return _cd .Transparent ;};};x =x %_dafb .Dx ()+_dafb .Min .X ;y =y %_dafb .Dy ()+_dafb .Min .Y ;return _eacf ._cgad .At (x ,y );};func (_efa *Context )LineTo (x ,y float64 ){if !_efa ._bd {_efa .MoveTo (x ,y );}else {x ,y =_efa .Transform (x ,y );_egf :=_cc .NewPoint (x ,y );_fab :=_bac (_egf );_efa ._fcd .Add1 (_fab );_efa ._de .Add1 (_fab );_efa ._gbbf =_egf ;};};func (_agg *Context )Image ()_f .Image {return _agg ._dfa };func (_aec *Context )SetRGBA (r ,g ,b ,a float64 ){_aec ._gbd =_cd .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_aec .setFillAndStrokeColor (_aec ._gbd );};func _defg (_faf string )(_ecf ,_fbae ,_efe ,_dcg int ){_faf =_b .TrimPrefix (_faf ,"\u0023");_dcg =255;if len (_faf )==3{_fadc :="\u00251\u0078\u0025\u0031\u0078\u0025\u0031x";_d .Sscanf (_faf ,_fadc ,&_ecf ,&_fbae ,&_efe );_ecf |=_ecf <<4;_fbae |=_fbae <<4;_efe |=_efe <<4;};if len (_faf )==6{_cgd :="\u0025\u0030\u0032x\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_d .Sscanf (_faf ,_cgd ,&_ecf ,&_fbae ,&_efe );};if len (_faf )==8{_efae :="\u0025\u00302\u0078\u0025\u00302\u0078\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_d .Sscanf (_faf ,_efae ,&_ecf ,&_fbae ,&_efe ,&_dcg );};return ;};func (_def *Context )Shear (x ,y float64 ){_def ._ccg .Shear (x ,y )};func (_bff *Context )SetHexColor (x string ){_addf ,_fe ,_bfce ,_aggd :=_defg (x );_bff .SetRGBA255 (_addf ,_fe ,_bfce ,_aggd );};func (_ebd *Context )QuadraticTo (x1 ,y1 ,x2 ,y2 float64 ){if !_ebd ._bd {_ebd .MoveTo (x1 ,y1 );};x1 ,y1 =_ebd .Transform (x1 ,y1 );x2 ,y2 =_ebd .Transform (x2 ,y2 );_fg :=_cc .NewPoint (x1 ,y1 );_dcc :=_cc .NewPoint (x2 ,y2 );_bdc :=_bac (_fg );_abf :=_bac (_dcc );_ebd ._fcd .Add2 (_bdc ,_abf );_ebd ._de .Add2 (_bdc ,_abf );_ebd ._gbbf =_dcc ;};func (_gbdc *Context )DrawPoint (x ,y ,r float64 ){_gbdc .Push ();_eebg ,_gga :=_gbdc .Transform (x ,y );_gbdc .Identity ();_gbdc .DrawCircle (_eebg ,_gga ,r );_gbdc .Pop ();};func NewContextForRGBA (im *_f .RGBA )*Context {_egd :=im .Bounds ().Size ().X ;_ec :=im .Bounds ().Size ().Y ;return &Context {_ffc :_egd ,_dbd :_ec ,_af :_gb .NewRasterizer (_egd ,_ec ),_dfa :im ,_gbd :_cd .Transparent ,_dgc :_eb ,_dda :_dgd ,_ccc :1,_ag :_gc .FillRuleWinding ,_ccg :_cc .IdentityMatrix (),_aa :_gc .NewTextState ()};};