2021-10-22 10:53:20 +00:00

106 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 (_g "errors";_bf "fmt";_fd "github.com/golang/freetype/raster";_cd "github.com/unidoc/unipdf/v3/common";_cf "github.com/unidoc/unipdf/v3/internal/transform";_cg "github.com/unidoc/unipdf/v3/render/internal/context";_ec "golang.org/x/image/draw";
_ecd "golang.org/x/image/font";_d "golang.org/x/image/math/f64";_fc "golang.org/x/image/math/fixed";_cb "image";_ee "image/color";_eef "image/draw";_f "math";_e "sort";_c "strings";);func (_dgeg *patternPainter )Paint (ss []_fd .Span ,done bool ){_fdf :=_dgeg ._gcgb .Bounds ();
for _ ,_dbbe :=range ss {if _dbbe .Y < _fdf .Min .Y {continue ;};if _dbbe .Y >=_fdf .Max .Y {return ;};if _dbbe .X0 < _fdf .Min .X {_dbbe .X0 =_fdf .Min .X ;};if _dbbe .X1 > _fdf .Max .X {_dbbe .X1 =_fdf .Max .X ;};if _dbbe .X0 >=_dbbe .X1 {continue ;};
const _gcecc =1<<16-1;_aceg :=_dbbe .Y -_dgeg ._gcgb .Rect .Min .Y ;_bcee :=_dbbe .X0 -_dgeg ._gcgb .Rect .Min .X ;_afge :=(_dbbe .Y -_dgeg ._gcgb .Rect .Min .Y )*_dgeg ._gcgb .Stride +(_dbbe .X0 -_dgeg ._gcgb .Rect .Min .X )*4;_dgd :=_afge +(_dbbe .X1 -_dbbe .X0 )*4;
for _eaad ,_eagg :=_afge ,_bcee ;_eaad < _dgd ;_eaad ,_eagg =_eaad +4,_eagg +1{_gfd :=_dbbe .Alpha ;if _dgeg ._bacgc !=nil {_gfd =_gfd *uint32 (_dgeg ._bacgc .AlphaAt (_eagg ,_aceg ).A )/255;if _gfd ==0{continue ;};};_ddgd :=_dgeg ._dfcc .ColorAt (_eagg ,_aceg );
_ece ,_cfg ,_bcde ,_aabc :=_ddgd .RGBA ();_fecg :=uint32 (_dgeg ._gcgb .Pix [_eaad +0]);_ddcb :=uint32 (_dgeg ._gcgb .Pix [_eaad +1]);_bade :=uint32 (_dgeg ._gcgb .Pix [_eaad +2]);_fbad :=uint32 (_dgeg ._gcgb .Pix [_eaad +3]);_aagf :=(_gcecc -(_aabc *_gfd /_gcecc ))*0x101;
_dgeg ._gcgb .Pix [_eaad +0]=uint8 ((_fecg *_aagf +_ece *_gfd )/_gcecc >>8);_dgeg ._gcgb .Pix [_eaad +1]=uint8 ((_ddcb *_aagf +_cfg *_gfd )/_gcecc >>8);_dgeg ._gcgb .Pix [_eaad +2]=uint8 ((_bade *_aagf +_bcde *_gfd )/_gcecc >>8);_dgeg ._gcgb .Pix [_eaad +3]=uint8 ((_fbad *_aagf +_aabc *_gfd )/_gcecc >>8);
};};};func (_aef *Context )SetFillStyle (pattern _cg .Pattern ){if _bed ,_dgf :=pattern .(*solidPattern );_dgf {_aef ._gd =_bed ._cffb ;};_aef ._bfb =pattern ;};func (_cbab *Context )Pop (){_fdeb :=*_cbab ;_gcdbf :=_cbab ._ccef ;_aadf :=_gcdbf [len (_gcdbf )-1];
*_cbab =*_aadf ;_cbab ._cge =_fdeb ._cge ;_cbab ._ed =_fdeb ._ed ;_cbab ._gaed =_fdeb ._gaed ;_cbab ._dfa =_fdeb ._dfa ;_cbab ._def =_fdeb ._def ;};func (_gfb *Context )Matrix ()_cf .Matrix {return _gfb ._eae };func (_aade *Context )Height ()int {return _aade ._gcc };
func (_cdc *Context )SetDash (dashes ...float64 ){_cdc ._fef =dashes };func (_dfgf *solidPattern )ColorAt (x ,y int )_ee .Color {return _dfgf ._cffb };func (_fab *Context )ShearAbout (sx ,sy ,x ,y float64 ){_fab .Translate (x ,y );_fab .Shear (sx ,sy );
_fab .Translate (-x ,-y );};func (_gea *Context )LineWidth ()float64 {return _gea ._fcd };func (_debb *Context )MoveTo (x ,y float64 ){if _debb ._def {_debb ._ed .Add1 (_efdg (_debb ._gaed ));};x ,y =_debb .Transform (x ,y );_ad :=_cf .NewPoint (x ,y );
_cfcc :=_efdg (_ad );_debb ._cge .Start (_cfcc );_debb ._ed .Start (_cfcc );_debb ._gaed =_ad ;_debb ._dfa =_ad ;_debb ._def =true ;};func (_aff *Context )Push (){_gfc :=*_aff ;_aff ._ccef =append (_aff ._ccef ,&_gfc )};func (_dece *linearGradient )AddColorStop (offset float64 ,color _ee .Color ){_dece ._bdfa =append (_dece ._bdfa ,stop {_eff :offset ,_bce :color });
_e .Sort (_dece ._bdfa );};func (_ebf *Context )stroke (_dee _fd .Painter ){_bfcg :=_ebf ._cge ;if len (_ebf ._fef )> 0{_bfcg =_deg (_bfcg ,_ebf ._fef ,_ebf ._afg );}else {_bfcg =_eed (_befbb (_bfcg ));};_agf :=_ebf ._dga ;_agf .UseNonZeroWinding =true ;
_agf .Clear ();_aab :=(_ebf ._eae .ScalingFactorX ()+_ebf ._eae .ScalingFactorY ())/2;_agf .AddStroke (_bfcg ,_eba (_ebf ._fcd *_aab ),_ebf .capper (),_ebf .joiner ());_agf .Rasterize (_dee );};func (_acd *Context )Clear (){_ead :=_cb .NewUniform (_acd ._gd );
_ec .Draw (_acd ._eec ,_acd ._eec .Bounds (),_ead ,_cb .Point {},_ec .Src );};func NewContextForRGBA (im *_cb .RGBA )*Context {_gcb :=im .Bounds ().Size ().X ;_eea :=im .Bounds ().Size ().Y ;return &Context {_bfc :_gcb ,_gcc :_eea ,_dga :_fd .NewRasterizer (_gcb ,_eea ),_eec :im ,_gd :_ee .Transparent ,_bfb :_eag ,_bc :_dda ,_fcd :1,_cce :_cg .FillRuleWinding ,_eae :_cf .IdentityMatrix (),_dce :_cg .NewTextState ()};
};func (_dcb *Context )DrawEllipse (x ,y ,rx ,ry float64 ){_dcb .NewSubPath ();_dcb .DrawEllipticalArc (x ,y ,rx ,ry ,0,2*_f .Pi );_dcb .ClosePath ();};func (_fb *linearGradient )ColorAt (x ,y int )_ee .Color {if len (_fb ._bdfa )==0{return _ee .Transparent ;
};_geg ,_afe :=float64 (x ),float64 (y );_cef ,_agb ,_eeb ,_bgef :=_fb ._dbg ,_fb ._abbf ,_fb ._effa ,_fb ._bage ;_fdeg ,_ebg :=_eeb -_cef ,_bgef -_agb ;if _ebg ==0&&_fdeg !=0{return _fgdg ((_geg -_cef )/_fdeg ,_fb ._bdfa );};if _fdeg ==0&&_ebg !=0{return _fgdg ((_afe -_agb )/_ebg ,_fb ._bdfa );
};_gdd :=_fdeg *(_geg -_cef )+_ebg *(_afe -_agb );if _gdd < 0{return _fb ._bdfa [0]._bce ;};_gbd :=_f .Hypot (_fdeg ,_ebg );_abc :=((_geg -_cef )*-_ebg +(_afe -_agb )*_fdeg )/(_gbd *_gbd );_aedc ,_eeaf :=_cef +_abc *-_ebg ,_agb +_abc *_fdeg ;_dccf :=_f .Hypot (_geg -_aedc ,_afe -_eeaf )/_gbd ;
return _fgdg (_dccf ,_fb ._bdfa );};func (_gfcb stops )Less (i ,j int )bool {return _gfcb [i ]._eff < _gfcb [j ]._eff };func (_ggc *Context )capper ()_fd .Capper {switch _ggc ._gda {case _cg .LineCapButt :return _fd .ButtCapper ;case _cg .LineCapRound :return _fd .RoundCapper ;
case _cg .LineCapSquare :return _fd .SquareCapper ;};return nil ;};func _fcc (_ebfc ,_gcec ,_gec ,_eeg float64 )_cg .Gradient {_eac :=&linearGradient {_dbg :_ebfc ,_abbf :_gcec ,_effa :_gec ,_bage :_eeg };return _eac ;};func (_gab *Context )QuadraticTo (x1 ,y1 ,x2 ,y2 float64 ){if !_gab ._def {_gab .MoveTo (x1 ,y1 );
};x1 ,y1 =_gab .Transform (x1 ,y1 );x2 ,y2 =_gab .Transform (x2 ,y2 );_dfg :=_cf .NewPoint (x1 ,y1 );_abb :=_cf .NewPoint (x2 ,y2 );_bef :=_efdg (_dfg );_bd :=_efdg (_abb );_gab ._cge .Add2 (_bef ,_bd );_gab ._ed .Add2 (_bef ,_bd );_gab ._dfa =_abb ;};
func (_gebb *Context )joiner ()_fd .Joiner {switch _gebb ._bgde {case _cg .LineJoinBevel :return _fd .BevelJoiner ;case _cg .LineJoinRound :return _fd .RoundJoiner ;};return nil ;};func (_fdab *Context )Translate (x ,y float64 ){_fdab ._eae =_fdab ._eae .Translate (x ,y )};
func (_eb *Context )ClearPath (){_eb ._cge .Clear ();_eb ._ed .Clear ();_eb ._def =false };func (_bffc *Context )DrawImage (im _cb .Image ,x ,y int ){_bffc .DrawImageAnchored (im ,x ,y ,0,0)};func (_edg *Context )SetMatrix (m _cf .Matrix ){_edg ._eae =m };
func (_defd *Context )AsMask ()*_cb .Alpha {_dcg :=_cb .NewAlpha (_defd ._eec .Bounds ());_ec .Draw (_dcg ,_defd ._eec .Bounds (),_defd ._eec ,_cb .Point {},_ec .Src );return _dcg ;};func (_deb *Context )SetRGB (r ,g ,b float64 ){_deb .SetRGBA (r ,g ,b ,1)};
type surfacePattern struct{_ccgcb _cb .Image ;_ggce repeatOp ;};func (_bbe *Context )FillPattern ()_cg .Pattern {return _bbe ._bfb };func _cebdc (_dgcb string )(_eddg ,_eaeg ,_ceea ,_cgg int ){_dgcb =_c .TrimPrefix (_dgcb ,"\u0023");_cgg =255;if len (_dgcb )==3{_fge :="\u00251\u0078\u0025\u0031\u0078\u0025\u0031x";
_bf .Sscanf (_dgcb ,_fge ,&_eddg ,&_eaeg ,&_ceea );_eddg |=_eddg <<4;_eaeg |=_eaeg <<4;_ceea |=_ceea <<4;};if len (_dgcb )==6{_ffag :="\u0025\u0030\u0032x\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_bf .Sscanf (_dgcb ,_ffag ,&_eddg ,&_eaeg ,&_ceea );
};if len (_dgcb )==8{_feag :="\u0025\u00302\u0078\u0025\u00302\u0078\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_bf .Sscanf (_dgcb ,_feag ,&_eddg ,&_eaeg ,&_ceea ,&_cgg );};return ;};func (_fgc *radialGradient )AddColorStop (offset float64 ,color _ee .Color ){_fgc ._acga =append (_fgc ._acga ,stop {_eff :offset ,_bce :color });
_e .Sort (_fgc ._acga );};func (_fac *Context )SetFillRule (fillRule _cg .FillRule ){_fac ._cce =fillRule };func (_beda *Context )SetPixel (x ,y int ){_beda ._eec .Set (x ,y ,_beda ._gd )};func (_aeg *Context )drawString (_gccd string ,_bafb _ecd .Face ,_deeg ,_cgce float64 ){_fdcb :=&_ecd .Drawer {Src :_cb .NewUniform (_aeg ._gd ),Face :_bafb ,Dot :_efdg (_cf .NewPoint (_deeg ,_cgce ))};
_ddbe :=rune (-1);for _ ,_dbbb :=range _gccd {if _ddbe >=0{_fdcb .Dot .X +=_fdcb .Face .Kern (_ddbe ,_dbbb );};_cff ,_ebb ,_bac ,_bfgc ,_efd :=_fdcb .Face .Glyph (_fdcb .Dot ,_dbbb );if !_efd {continue ;};_cdgfg :=_cff .Sub (_cff .Min );_facb :=_cb .NewRGBA (_cdgfg );
_ec .DrawMask (_facb ,_cdgfg ,_fdcb .Src ,_cb .Point {},_ebb ,_bac ,_ec .Over );var _ada *_ec .Options ;if _aeg ._fdba !=nil {_ada =&_ec .Options {DstMask :_aeg ._fdba ,DstMaskP :_cb .Point {}};};_dgcdc :=_aeg ._eae .Clone ().Translate (float64 (_cff .Min .X ),float64 (_cff .Min .Y ));
_cgced :=_d .Aff3 {_dgcdc [0],_dgcdc [3],_dgcdc [6],_dgcdc [1],_dgcdc [4],_dgcdc [7]};_ec .BiLinear .Transform (_aeg ._eec ,_cgced ,_facb ,_cdgfg ,_ec .Over ,_ada );_fdcb .Dot .X +=_bfgc ;_ddbe =_dbbb ;};};func _gae (_aad ,_gfae ,_bag ,_df ,_cdg ,_cbb ,_ea ,_ccg float64 )[]_cf .Point {_eg :=(_f .Hypot (_bag -_aad ,_df -_gfae )+_f .Hypot (_cdg -_bag ,_cbb -_df )+_f .Hypot (_ea -_cdg ,_ccg -_cbb ));
_aag :=int (_eg +0.5);if _aag < 4{_aag =4;};_ffg :=float64 (_aag )-1;_bgd :=make ([]_cf .Point ,_aag );for _cfe :=0;_cfe < _aag ;_cfe ++{_fdd :=float64 (_cfe )/_ffg ;_ab ,_fgb :=_bbf (_aad ,_gfae ,_bag ,_df ,_cdg ,_cbb ,_ea ,_ccg ,_fdd );_bgd [_cfe ]=_cf .NewPoint (_ab ,_fgb );
};return _bgd ;};func (_ac *Context )SetStrokeRGBA (r ,g ,b ,a float64 ){_gga :=_ee .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_ac ._bc =_eead (_gga );};func _edbe (_gceb ,_cebd uint32 ,_egd float64 )uint8 {return uint8 (int32 (float64 (_gceb )*(1.0-_egd )+float64 (_cebd )*_egd )>>8);
};func _da (_dd ,_de ,_gb ,_a ,_aa ,_fg ,_gf float64 )(_ae ,_fdb float64 ){_ff :=1-_gf ;_gc :=_ff *_ff ;_bg :=2*_ff *_gf ;_ge :=_gf *_gf ;_ae =_gc *_dd +_bg *_gb +_ge *_aa ;_fdb =_gc *_de +_bg *_a +_ge *_fg ;return ;};func (_cee *Context )StrokePreserve (){var _ega _fd .Painter ;
if _cee ._fdba ==nil {if _fcb ,_eda :=_cee ._bc .(*solidPattern );_eda {_eee :=_fd .NewRGBAPainter (_cee ._eec );_eee .SetColor (_fcb ._cffb );_ega =_eee ;};};if _ega ==nil {_ega =_afc (_cee ._eec ,_cee ._fdba ,_cee ._bc );};_cee .stroke (_ega );};type solidPattern struct{_cffb _ee .Color };
func _acgf (_dccd ,_eacg ,_cbgb ,_ceg ,_eefa ,_fbb float64 )_cg .Gradient {_beef :=circle {_dccd ,_eacg ,_cbgb };_befd :=circle {_ceg ,_eefa ,_fbb };_fed :=circle {_ceg -_dccd ,_eefa -_eacg ,_fbb -_cbgb };_fdaa :=_aaf (_fed ._edac ,_fed ._edb ,-_fed ._bad ,_fed ._edac ,_fed ._edb ,_fed ._bad );
var _decc float64 ;if _fdaa !=0{_decc =1.0/_fdaa ;};_bbcf :=-_beef ._bad ;_cffg :=&radialGradient {_dfd :_beef ,_gffg :_befd ,_dcec :_fed ,_cddc :_fdaa ,_ecf :_decc ,_ffe :_bbcf };return _cffg ;};func _bbd (_gcff ,_bdg _ee .Color ,_fae float64 )_ee .Color {_gag ,_aagd ,_ade ,_faca :=_gcff .RGBA ();
_aege ,_efc ,_fbf ,_fgbc :=_bdg .RGBA ();return _ee .RGBA {_edbe (_gag ,_aege ,_fae ),_edbe (_aagd ,_efc ,_fae ),_edbe (_ade ,_fbf ,_fae ),_edbe (_faca ,_fgbc ,_fae )};};func (_fdca *Context )DrawArc (x ,y ,r ,angle1 ,angle2 float64 ){_fdca .DrawEllipticalArc (x ,y ,r ,r ,angle1 ,angle2 );
};func (_dca *radialGradient )ColorAt (x ,y int )_ee .Color {if len (_dca ._acga )==0{return _ee .Transparent ;};_abge ,_bae :=float64 (x )+0.5-_dca ._dfd ._edac ,float64 (y )+0.5-_dca ._dfd ._edb ;_bgff :=_aaf (_abge ,_bae ,_dca ._dfd ._bad ,_dca ._dcec ._edac ,_dca ._dcec ._edb ,_dca ._dcec ._bad );
_ace :=_aaf (_abge ,_bae ,-_dca ._dfd ._bad ,_abge ,_bae ,_dca ._dfd ._bad );if _dca ._cddc ==0{if _bgff ==0{return _ee .Transparent ;};_bba :=0.5*_ace /_bgff ;if _bba *_dca ._dcec ._bad >=_dca ._ffe {return _fgdg (_bba ,_dca ._acga );};return _ee .Transparent ;
};_cgff :=_aaf (_bgff ,_dca ._cddc ,0,_bgff ,-_ace ,0);if _cgff >=0{_baab :=_f .Sqrt (_cgff );_ddc :=(_bgff +_baab )*_dca ._ecf ;_dab :=(_bgff -_baab )*_dca ._ecf ;if _ddc *_dca ._dcec ._bad >=_dca ._ffe {return _fgdg (_ddc ,_dca ._acga );}else if _dab *_dca ._dcec ._bad >=_dca ._ffe {return _fgdg (_dab ,_dca ._acga );
};};return _ee .Transparent ;};func (_dbd *Context )DrawCircle (x ,y ,r float64 ){_dbd .NewSubPath ();_dbd .DrawEllipticalArc (x ,y ,r ,r ,0,2*_f .Pi );_dbd .ClosePath ();};func (_ccgc *Context )Shear (x ,y float64 ){_ccgc ._eae .Shear (x ,y )};func (_fddg *Context )SetLineJoin (lineJoin _cg .LineJoin ){_fddg ._bgde =lineJoin };
func (_gcd *Context )Image ()_cb .Image {return _gcd ._eec };func NewContext (width ,height int )*Context {return NewContextForRGBA (_cb .NewRGBA (_cb .Rect (0,0,width ,height )));};func (_afb *Context )Width ()int {return _afb ._bfc };type linearGradient struct{_dbg ,_abbf ,_effa ,_bage float64 ;
_bdfa stops ;};func (_eaf stops )Swap (i ,j int ){_eaf [i ],_eaf [j ]=_eaf [j ],_eaf [i ]};type circle struct{_edac ,_edb ,_bad float64 };func (_aae *Context )setFillAndStrokeColor (_eefe _ee .Color ){_aae ._gd =_eefe ;_aae ._bfb =_eead (_eefe );_aae ._bc =_eead (_eefe );
};func (_baaa *Context )ScaleAbout (sx ,sy ,x ,y float64 ){_baaa .Translate (x ,y );_baaa .Scale (sx ,sy );_baaa .Translate (-x ,-y );};func (_acg *Context )ResetClip (){_acg ._fdba =nil };type stops []stop ;func (_gcg *Context )Stroke (){_gcg .StrokePreserve ();
_gcg .ClearPath ()};func (_abe *Context )fill (_afgg _fd .Painter ){_bcd :=_abe ._ed ;if _abe ._def {_bcd =make (_fd .Path ,len (_abe ._ed ));copy (_bcd ,_abe ._ed );_bcd .Add1 (_efdg (_abe ._gaed ));};_dbb :=_abe ._dga ;_dbb .UseNonZeroWinding =_abe ._cce ==_cg .FillRuleWinding ;
_dbb .Clear ();_dbb .AddPath (_bcd );_dbb .Rasterize (_afgg );};func (_edgc *Context )Scale (x ,y float64 ){_edgc ._eae =_edgc ._eae .Scale (x ,y )};func (_bbc *Context )SetColor (c _ee .Color ){_bbc .setFillAndStrokeColor (c )};func (_gcfa *Context )TextState ()*_cg .TextState {return &_gcfa ._dce };
func _aaf (_dae ,_ceef ,_caf ,_eegb ,_gcgc ,_cbgad float64 )float64 {return _dae *_eegb +_ceef *_gcgc +_caf *_cbgad ;};func (_dgc *Context )DrawPoint (x ,y ,r float64 ){_dgc .Push ();_gcdb ,_ebfe :=_dgc .Transform (x ,y );_dgc .Identity ();_dgc .DrawCircle (_gcdb ,_ebfe ,r );
_dgc .Pop ();};func (_aed *Context )DrawRectangle (x ,y ,w ,h float64 ){_aed .NewSubPath ();_aed .MoveTo (x ,y );_aed .LineTo (x +w ,y );_aed .LineTo (x +w ,y +h );_aed .LineTo (x ,y +h );_aed .ClosePath ();};type radialGradient struct{_dfd ,_gffg ,_dcec circle ;
_cddc ,_ecf float64 ;_ffe float64 ;_acga stops ;};func (_cfb *Context )NewSubPath (){if _cfb ._def {_cfb ._ed .Add1 (_efdg (_cfb ._gaed ));};_cfb ._def =false ;};func _afc (_fdce *_cb .RGBA ,_abef *_cb .Alpha ,_bagb _cg .Pattern )*patternPainter {return &patternPainter {_fdce ,_abef ,_bagb };
};func (_ffb *Context )SetRGBA255 (r ,g ,b ,a int ){_ffb ._gd =_ee .NRGBA {uint8 (r ),uint8 (g ),uint8 (b ),uint8 (a )};_ffb .setFillAndStrokeColor (_ffb ._gd );};func NewContextForImage (im _cb .Image )*Context {return NewContextForRGBA (_gcda (im ))};
type Context struct{_bfc int ;_gcc int ;_dga *_fd .Rasterizer ;_eec *_cb .RGBA ;_fdba *_cb .Alpha ;_gd _ee .Color ;_bfb _cg .Pattern ;_bc _cg .Pattern ;_cge _fd .Path ;_ed _fd .Path ;_gaed _cf .Point ;_dfa _cf .Point ;_def bool ;_fef []float64 ;_afg float64 ;
_fcd float64 ;_gda _cg .LineCap ;_bgde _cg .LineJoin ;_cce _cg .FillRule ;_eae _cf .Matrix ;_dce _cg .TextState ;_ccef []*Context ;};func _befbb (_fec _fd .Path )[][]_cf .Point {var _bafg [][]_cf .Point ;var _gdga []_cf .Point ;var _fcg ,_edd float64 ;
for _dfae :=0;_dfae < len (_fec );{switch _fec [_dfae ]{case 0:if len (_gdga )> 0{_bafg =append (_bafg ,_gdga );_gdga =nil ;};_aaa :=_bacc (_fec [_dfae +1]);_bdfb :=_bacc (_fec [_dfae +2]);_gdga =append (_gdga ,_cf .NewPoint (_aaa ,_bdfb ));_fcg ,_edd =_aaa ,_bdfb ;
_dfae +=4;case 1:_fgcb :=_bacc (_fec [_dfae +1]);_cebb :=_bacc (_fec [_dfae +2]);_gdga =append (_gdga ,_cf .NewPoint (_fgcb ,_cebb ));_fcg ,_edd =_fgcb ,_cebb ;_dfae +=4;case 2:_gaf :=_bacc (_fec [_dfae +1]);_feff :=_bacc (_fec [_dfae +2]);_aca :=_bacc (_fec [_dfae +3]);
_eefb :=_bacc (_fec [_dfae +4]);_ccc :=_gfa (_fcg ,_edd ,_gaf ,_feff ,_aca ,_eefb );_gdga =append (_gdga ,_ccc ...);_fcg ,_edd =_aca ,_eefb ;_dfae +=6;case 3:_gedf :=_bacc (_fec [_dfae +1]);_gage :=_bacc (_fec [_dfae +2]);_cfag :=_bacc (_fec [_dfae +3]);
_dcef :=_bacc (_fec [_dfae +4]);_afa :=_bacc (_fec [_dfae +5]);_gegb :=_bacc (_fec [_dfae +6]);_bagee :=_gae (_fcg ,_edd ,_gedf ,_gage ,_cfag ,_dcef ,_afa ,_gegb );_gdga =append (_gdga ,_bagee ...);_fcg ,_edd =_afa ,_gegb ;_dfae +=8;default:_cd .Log .Debug ("\u0057\u0041\u0052\u004e: \u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0070\u0061\u0074\u0068\u003a\u0020%\u0076",_fec );
return _bafg ;};};if len (_gdga )> 0{_bafg =append (_bafg ,_gdga );};return _bafg ;};var (_eag =_eead (_ee .White );_dda =_eead (_ee .Black ););func (_dge *Context )Fill (){_dge .FillPreserve ();_dge .ClearPath ()};func (_gg *Context )SetLineCap (lineCap _cg .LineCap ){_gg ._gda =lineCap };
func (_aadc *Context )SetDashOffset (offset float64 ){_aadc ._afg =offset };func _bbf (_cfd ,_fag ,_bge ,_af ,_fda ,_gcf ,_cfc ,_geb ,_ffa float64 )(_ag ,_fea float64 ){_fdc :=1-_ffa ;_cc :=_fdc *_fdc *_fdc ;_dc :=3*_fdc *_fdc *_ffa ;_ba :=3*_fdc *_ffa *_ffa ;
_cbg :=_ffa *_ffa *_ffa ;_ag =_cc *_cfd +_dc *_bge +_ba *_fda +_cbg *_cfc ;_fea =_cc *_fag +_dc *_af +_ba *_gcf +_cbg *_geb ;return ;};func (_fcde *Context )ClipPreserve (){_abba :=_cb .NewAlpha (_cb .Rect (0,0,_fcde ._bfc ,_fcde ._gcc ));_dfe :=_fd .NewAlphaOverPainter (_abba );
_fcde .fill (_dfe );if _fcde ._fdba ==nil {_fcde ._fdba =_abba ;}else {_bfbf :=_cb .NewAlpha (_cb .Rect (0,0,_fcde ._bfc ,_fcde ._gcc ));_ec .DrawMask (_bfbf ,_bfbf .Bounds (),_abba ,_cb .Point {},_fcde ._fdba ,_cb .Point {},_ec .Over );_fcde ._fdba =_bfbf ;
};};func (_ddaa *Context )SetLineWidth (lineWidth float64 ){_ddaa ._fcd =lineWidth };func (_ceaf stops )Len ()int {return len (_ceaf )};type stop struct{_eff float64 ;_bce _ee .Color ;};func (_bgf *Context )InvertMask (){if _bgf ._fdba ==nil {_bgf ._fdba =_cb .NewAlpha (_bgf ._eec .Bounds ());
}else {for _bdc ,_befg :=range _bgf ._fdba .Pix {_bgf ._fdba .Pix [_bdc ]=255-_befg ;};};};func (_bga *Context )RotateAbout (angle ,x ,y float64 ){_bga .Translate (x ,y );_bga .Rotate (angle );_bga .Translate (-x ,-y );};func (_cfeg *Context )Rotate (angle float64 ){_cfeg ._eae =_cfeg ._eae .Rotate (angle )};
func _deg (_dbe _fd .Path ,_gbgd []float64 ,_aec float64 )_fd .Path {return _eed (_abdf (_befbb (_dbe ),_gbgd ,_aec ));};func (_ggaa *Context )DrawStringAnchored (s string ,face _ecd .Face ,x ,y ,ax ,ay float64 ){_cgf ,_fde :=_ggaa .MeasureString (s ,face );
_ggaa .drawString (s ,face ,x -ax *_cgf ,y +ay *_fde );};const (_egfag repeatOp =iota ;_bbae ;_abdc ;_edfc ;);func (_acge *Context )DrawString (s string ,face _ecd .Face ,x ,y float64 ){_acge .DrawStringAnchored (s ,face ,x ,y ,0,0);};func (_cbc *Context )SetFillRGBA (r ,g ,b ,a float64 ){_aga :=_ee .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};
_cbc ._gd =_aga ;_cbc ._bfb =_eead (_aga );};func _eed (_aabg [][]_cf .Point )_fd .Path {var _eage _fd .Path ;for _ ,_gdbc :=range _aabg {var _efcc _fc .Point26_6 ;for _eaca ,_gdgd :=range _gdbc {_cbag :=_efdg (_gdgd );if _eaca ==0{_eage .Start (_cbag );
}else {_dfdf :=_cbag .X -_efcc .X ;_gdac :=_cbag .Y -_efcc .Y ;if _dfdf < 0{_dfdf =-_dfdf ;};if _gdac < 0{_gdac =-_gdac ;};if _dfdf +_gdac > 8{_eage .Add1 (_cbag );};};_efcc =_cbag ;};};return _eage ;};func (_cfbg *Context )DrawRoundedRectangle (x ,y ,w ,h ,r float64 ){_cgd ,_cdd ,_fca ,_dcf :=x ,x +r ,x +w -r ,x +w ;
_dgb ,_cda ,_gff ,_gdadc :=y ,y +r ,y +h -r ,y +h ;_cfbg .NewSubPath ();_cfbg .MoveTo (_cdd ,_dgb );_cfbg .LineTo (_fca ,_dgb );_cfbg .DrawArc (_fca ,_cda ,r ,_aceb (270),_aceb (360));_cfbg .LineTo (_dcf ,_gff );_cfbg .DrawArc (_fca ,_gff ,r ,_aceb (0),_aceb (90));
_cfbg .LineTo (_cdd ,_gdadc );_cfbg .DrawArc (_cdd ,_gff ,r ,_aceb (90),_aceb (180));_cfbg .LineTo (_cgd ,_cda );_cfbg .DrawArc (_cdd ,_cda ,r ,_aceb (180),_aceb (270));_cfbg .ClosePath ();};func (_aefb *Context )LineTo (x ,y float64 ){if !_aefb ._def {_aefb .MoveTo (x ,y );
}else {x ,y =_aefb .Transform (x ,y );_gfg :=_cf .NewPoint (x ,y );_ef :=_efdg (_gfg );_aefb ._cge .Add1 (_ef );_aefb ._ed .Add1 (_ef );_aefb ._dfa =_gfg ;};};func _bacc (_gdaf _fc .Int26_6 )float64 {const _bcf ,_aba =6,1<<6-1;if _gdaf >=0{return float64 (_gdaf >>_bcf )+float64 (_gdaf &_aba )/64;
};_gdaf =-_gdaf ;if _gdaf >=0{return -(float64 (_gdaf >>_bcf )+float64 (_gdaf &_aba )/64);};return 0;};func (_ecg *Context )StrokePattern ()_cg .Pattern {return _ecg ._bc };func (_ebe *Context )MeasureString (s string ,face _ecd .Face )(_cdce ,_dcc float64 ){_cfdg :=&_ecd .Drawer {Face :face };
_bfge :=_cfdg .MeasureString (s );return float64 (_bfge >>6),_ebe ._dce .Tf .Size ;};func (_fdgf *Context )SetMask (mask *_cb .Alpha )error {if mask .Bounds ().Size ()!=_fdgf ._eec .Bounds ().Size (){return _g .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");
};_fdgf ._fdba =mask ;return nil ;};func (_dff *Context )Clip (){_dff .ClipPreserve ();_dff .ClearPath ()};func _eba (_defg float64 )_fc .Int26_6 {return _fc .Int26_6 (_defg *64)};func (_baf *Context )SetRGB255 (r ,g ,b int ){_baf .SetRGBA255 (r ,g ,b ,255)};
func _efdg (_cfdb _cf .Point )_fc .Point26_6 {return _fc .Point26_6 {X :_eba (_cfdb .X ),Y :_eba (_cfdb .Y )}};type patternPainter struct{_gcgb *_cb .RGBA ;_bacgc *_cb .Alpha ;_dfcc _cg .Pattern ;};type repeatOp int ;func (_daf *Context )DrawImageAnchored (im _cb .Image ,x ,y int ,ax ,ay float64 ){_agfd :=im .Bounds ().Size ();
x -=int (ax *float64 (_agfd .X ));y -=int (ay *float64 (_agfd .Y ));_cea :=_ec .BiLinear ;_bdf :=_daf ._eae .Clone ().Translate (float64 (x ),float64 (y ));_egf :=_d .Aff3 {_bdf [0],_bdf [3],_bdf [6],_bdf [1],_bdf [4],_bdf [7]};if _daf ._fdba ==nil {_cea .Transform (_daf ._eec ,_egf ,im ,im .Bounds (),_ec .Over ,nil );
}else {_cea .Transform (_daf ._eec ,_egf ,im ,im .Bounds (),_ec .Over ,&_ec .Options {DstMask :_daf ._fdba ,DstMaskP :_cb .Point {}});};};func _bab (_gba _cb .Image ,_cfae repeatOp )_cg .Pattern {return &surfacePattern {_ccgcb :_gba ,_ggce :_cfae };};func (_ecb *Context )FillPreserve (){var _gfe _fd .Painter ;
if _ecb ._fdba ==nil {if _gdad ,_abg :=_ecb ._bfb .(*solidPattern );_abg {_facd :=_fd .NewRGBAPainter (_ecb ._eec );_facd .SetColor (_gdad ._cffb );_gfe =_facd ;};};if _gfe ==nil {_gfe =_afc (_ecb ._eec ,_ecb ._fdba ,_ecb ._bfb );};_ecb .fill (_gfe );};
func (_bgdeb *Context )CubicTo (x1 ,y1 ,x2 ,y2 ,x3 ,y3 float64 ){if !_bgdeb ._def {_bgdeb .MoveTo (x1 ,y1 );};_db ,_eca :=_bgdeb ._dfa .X ,_bgdeb ._dfa .Y ;x1 ,y1 =_bgdeb .Transform (x1 ,y1 );x2 ,y2 =_bgdeb .Transform (x2 ,y2 );x3 ,y3 =_bgdeb .Transform (x3 ,y3 );
_ce :=_gae (_db ,_eca ,x1 ,y1 ,x2 ,y2 ,x3 ,y3 );_befb :=_efdg (_bgdeb ._dfa );for _ ,_gbb :=range _ce [1:]{_cdgf :=_efdg (_gbb );if _cdgf ==_befb {continue ;};_befb =_cdgf ;_bgdeb ._cge .Add1 (_cdgf );_bgdeb ._ed .Add1 (_cdgf );_bgdeb ._dfa =_gbb ;};};
func (_gdg *Context )Transform (x ,y float64 )(_acc ,_cbga float64 ){return _gdg ._eae .Transform (x ,y )};func (_fba *surfacePattern )ColorAt (x ,y int )_ee .Color {_bgcb :=_fba ._ccgcb .Bounds ();switch _fba ._ggce {case _bbae :if y >=_bgcb .Dy (){return _ee .Transparent ;
};case _abdc :if x >=_bgcb .Dx (){return _ee .Transparent ;};case _edfc :if x >=_bgcb .Dx ()||y >=_bgcb .Dy (){return _ee .Transparent ;};};x =x %_bgcb .Dx ()+_bgcb .Min .X ;y =y %_bgcb .Dy ()+_bgcb .Min .Y ;return _fba ._ccgcb .At (x ,y );};func _gfa (_gce ,_ga ,_dg ,_fdg ,_bfg ,_be float64 )[]_cf .Point {_ddb :=(_f .Hypot (_dg -_gce ,_fdg -_ga )+_f .Hypot (_bfg -_dg ,_be -_fdg ));
_fce :=int (_ddb +0.5);if _fce < 4{_fce =4;};_ged :=float64 (_fce )-1;_beg :=make ([]_cf .Point ,_fce );for _bb :=0;_bb < _fce ;_bb ++{_fa :=float64 (_bb )/_ged ;_fe ,_cbf :=_da (_gce ,_ga ,_dg ,_fdg ,_bfg ,_be ,_fa );_beg [_bb ]=_cf .NewPoint (_fe ,_cbf );
};return _beg ;};func (_fdge *Context )ClosePath (){if _fdge ._def {_egb :=_efdg (_fdge ._gaed );_fdge ._cge .Add1 (_egb );_fdge ._ed .Add1 (_egb );_fdge ._dfa =_fdge ._gaed ;};};func _fgdg (_adb float64 ,_bbb stops )_ee .Color {if _adb <=0.0||len (_bbb )==1{return _bbb [0]._bce ;
};_egfa :=_bbb [len (_bbb )-1];if _adb >=_egfa ._eff {return _egfa ._bce ;};for _ffbc ,_gccc :=range _bbb [1:]{if _adb < _gccc ._eff {_adb =(_adb -_bbb [_ffbc ]._eff )/(_gccc ._eff -_bbb [_ffbc ]._eff );return _bbd (_bbb [_ffbc ]._bce ,_gccc ._bce ,_adb );
};};return _egfa ._bce ;};func (_gbc *Context )DrawEllipticalArc (x ,y ,rx ,ry ,angle1 ,angle2 float64 ){const _baa =16;for _cgc :=0;_cgc < _baa ;_cgc ++{_dgeb :=float64 (_cgc +0)/_baa ;_dec :=float64 (_cgc +1)/_baa ;_gaee :=angle1 +(angle2 -angle1 )*_dgeb ;
_fgd :=angle1 +(angle2 -angle1 )*_dec ;_dcfb :=x +rx *_f .Cos (_gaee );_abbe :=y +ry *_f .Sin (_gaee );_ceb :=x +rx *_f .Cos ((_gaee +_fgd )/2);_agc :=y +ry *_f .Sin ((_gaee +_fgd )/2);_decf :=x +rx *_f .Cos (_fgd );_cbd :=y +ry *_f .Sin (_fgd );_cba :=2*_ceb -_dcfb /2-_decf /2;
_bdd :=2*_agc -_abbe /2-_cbd /2;if _cgc ==0{if _gbc ._def {_gbc .LineTo (_dcfb ,_abbe );}else {_gbc .MoveTo (_dcfb ,_abbe );};};_gbc .QuadraticTo (_cba ,_bdd ,_decf ,_cbd );};};func _abdf (_fgbe [][]_cf .Point ,_adg []float64 ,_gaff float64 )[][]_cf .Point {var _bfec [][]_cf .Point ;
if len (_adg )==0{return _fgbe ;};if len (_adg )==1{_adg =append (_adg ,_adg [0]);};for _ ,_ddg :=range _fgbe {if len (_ddg )< 2{continue ;};_feab :=_ddg [0];_ggac :=1;_efda :=0;_fgfg :=0.0;if _gaff !=0{var _fddf float64 ;for _ ,_edc :=range _adg {_fddf +=_edc ;
};_gaff =_f .Mod (_gaff ,_fddf );if _gaff < 0{_gaff +=_fddf ;};for _ceefg ,_baga :=range _adg {_gaff -=_baga ;if _gaff < 0{_efda =_ceefg ;_fgfg =_baga +_gaff ;break ;};};};var _bacg []_cf .Point ;_bacg =append (_bacg ,_feab );for _ggac < len (_ddg ){_eaa :=_adg [_efda ];
_daeb :=_ddg [_ggac ];_aaaa :=_feab .Distance (_daeb );_ecae :=_eaa -_fgfg ;if _aaaa > _ecae {_cddg :=_ecae /_aaaa ;_fbe :=_feab .Interpolate (_daeb ,_cddg );_bacg =append (_bacg ,_fbe );if _efda %2==0&&len (_bacg )> 1{_bfec =append (_bfec ,_bacg );};_bacg =nil ;
_bacg =append (_bacg ,_fbe );_fgfg =0;_feab =_fbe ;_efda =(_efda +1)%len (_adg );}else {_bacg =append (_bacg ,_daeb );_feab =_daeb ;_fgfg +=_aaaa ;_ggac ++;};};if _efda %2==0&&len (_bacg )> 1{_bfec =append (_bfec ,_bacg );};};return _bfec ;};func _eead (_bgc _ee .Color )_cg .Pattern {return &solidPattern {_cffb :_bgc }};
func (_ffd *Context )DrawLine (x1 ,y1 ,x2 ,y2 float64 ){_ffd .MoveTo (x1 ,y1 );_ffd .LineTo (x2 ,y2 )};func _gcda (_cfdd _cb .Image )*_cb .RGBA {_cad :=_cfdd .Bounds ();_aefg :=_cb .NewRGBA (_cad );_eef .Draw (_aefg ,_cad ,_cfdd ,_cad .Min ,_eef .Src );
return _aefg ;};func (_bea *Context )drawRegularPolygon (_dgcd int ,_bff ,_gbg ,_fgf ,_bbg float64 ){_dfc :=2*_f .Pi /float64 (_dgcd );_bbg -=_f .Pi /2;if _dgcd %2==0{_bbg +=_dfc /2;};_bea .NewSubPath ();for _gdb :=0;_gdb < _dgcd ;_gdb ++{_bee :=_bbg +_dfc *float64 (_gdb );
_bea .LineTo (_bff +_fgf *_f .Cos (_bee ),_gbg +_fgf *_f .Sin (_bee ));};_bea .ClosePath ();};func _aceb (_fcdb float64 )float64 {return _fcdb *_f .Pi /180};func (_befbd *Context )Identity (){_befbd ._eae =_cf .IdentityMatrix ()};func (_caa *Context )SetRGBA (r ,g ,b ,a float64 ){_caa ._gd =_ee .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};
_caa .setFillAndStrokeColor (_caa ._gd );};func (_gee *Context )SetStrokeStyle (pattern _cg .Pattern ){_gee ._bc =pattern };func (_abd *Context )SetHexColor (x string ){_cfa ,_edf ,_ca ,_bfe :=_cebdc (x );_abd .SetRGBA255 (_cfa ,_edf ,_ca ,_bfe );};