2023-05-29 17:26:33 +00:00

108 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 (_ae "errors";_f "fmt";_fc "github.com/unidoc/freetype/raster";_fd "github.com/unidoc/unipdf/v3/common";_ff "github.com/unidoc/unipdf/v3/internal/transform";_da "github.com/unidoc/unipdf/v3/render/internal/context";_e "golang.org/x/image/draw";
_dac "golang.org/x/image/font";_ffe "golang.org/x/image/math/f64";_db "golang.org/x/image/math/fixed";_ga "image";_g "image/color";_ad "image/draw";_d "math";_a "sort";_bd "strings";);func _eb (_gge ,_dbg ,_ccd ,_gf ,_ada ,_ffea ,_ag ,_ffb ,_ba float64 )(_af ,_dea float64 ){_ccf :=1-_ba ;
_fab :=_ccf *_ccf *_ccf ;_gfd :=3*_ccf *_ccf *_ba ;_gef :=3*_ccf *_ba *_ba ;_cbf :=_ba *_ba *_ba ;_af =_fab *_gge +_gfd *_ccd +_gef *_ada +_cbf *_ag ;_dea =_fab *_dbg +_gfd *_gf +_gef *_ffea +_cbf *_ffb ;return ;};var (_cf =_eeb (_g .White );_dge =_eeb (_g .Black );
);func (_dee *Context )SetFillRule (fillRule _da .FillRule ){_dee ._fag =fillRule };func (_eaf *Context )drawString (_gdda string ,_ggab _dac .Face ,_dcg ,_abc float64 ){_bbe :=&_dac .Drawer {Src :_ga .NewUniform (_eaf ._fbg ),Face :_ggab ,Dot :_cgece (_ff .NewPoint (_dcg ,_abc ))};
_bdcg :=rune (-1);for _ ,_ggd :=range _gdda {if _bdcg >=0{_bbe .Dot .X +=_bbe .Face .Kern (_bdcg ,_ggd );};_cgbd ,_adg ,_cce ,_egd ,_fdgc :=_bbe .Face .Glyph (_bbe .Dot ,_ggd );if !_fdgc {continue ;};_gaa :=_cgbd .Sub (_cgbd .Min );_ced :=_ga .NewRGBA (_gaa );
_e .DrawMask (_ced ,_gaa ,_bbe .Src ,_ga .Point {},_adg ,_cce ,_e .Over );var _fdd *_e .Options ;if _eaf ._gae !=nil {_fdd =&_e .Options {DstMask :_eaf ._gae ,DstMaskP :_ga .Point {}};};_degb :=_eaf ._baa .Clone ().Translate (float64 (_cgbd .Min .X ),float64 (_cgbd .Min .Y ));
_aaef :=_ffe .Aff3 {_degb [0],_degb [3],_degb [6],_degb [1],_degb [4],_degb [7]};_e .BiLinear .Transform (_eaf ._eg ,_aaef ,_ced ,_gaa ,_e .Over ,_fdd );_bbe .Dot .X +=_egd ;_bdcg =_ggd ;};};type Context struct{_bb int ;_gc int ;_acd *_fc .Rasterizer ;
_eg *_ga .RGBA ;_gae *_ga .Alpha ;_fbg _g .Color ;_caf _da .Pattern ;_cfc _da .Pattern ;_ggf _fc .Path ;_egc _fc .Path ;_aaa _ff .Point ;_be _ff .Point ;_cge bool ;_gdg []float64 ;_agd float64 ;_cfa float64 ;_gfg _da .LineCap ;_dcf _da .LineJoin ;_fag _da .FillRule ;
_baa _ff .Matrix ;_ccfb _da .TextState ;_aae []*Context ;};func (_ecbc *solidPattern )ColorAt (x ,y int )_g .Color {return _ecbc ._bfd };func (_ega *Context )ClosePath (){if _ega ._cge {_ee :=_cgece (_ega ._aaa );_ega ._ggf .Add1 (_ee );_ega ._egc .Add1 (_ee );
_ega ._be =_ega ._aaa ;};};func _bafc (_dfff _ga .Image ,_beec repeatOp )_da .Pattern {return &surfacePattern {_geagg :_dfff ,_ddcb :_beec };};func (_fagg *Context )ClipPreserve (){_efa :=_ga .NewAlpha (_ga .Rect (0,0,_fagg ._bb ,_fagg ._gc ));_fdf :=_fc .NewAlphaOverPainter (_efa );
_fagg .fill (_fdf );if _fagg ._gae ==nil {_fagg ._gae =_efa ;}else {_fbba :=_ga .NewAlpha (_ga .Rect (0,0,_fagg ._bb ,_fagg ._gc ));_e .DrawMask (_fbba ,_fbba .Bounds (),_efa ,_ga .Point {},_fagg ._gae ,_ga .Point {},_e .Over );_fagg ._gae =_fbba ;};};
func (_ccbfe *Context )Push (){_ddb :=*_ccbfe ;_ccbfe ._aae =append (_ccbfe ._aae ,&_ddb )};func (_ddf *Context )SetLineJoin (lineJoin _da .LineJoin ){_ddf ._dcf =lineJoin };func (_bfa *Context )Width ()int {return _bfa ._bb };func (_fcfd *Context )SetColor (c _g .Color ){_fcfd .setFillAndStrokeColor (c )};
func (_dfb *Context )LineWidth ()float64 {return _dfb ._cfa };func (_gfb *Context )Image ()_ga .Image {return _gfb ._eg };type solidPattern struct{_bfd _g .Color };func (_dgg *Context )SetLineCap (lineCap _da .LineCap ){_dgg ._gfg =lineCap };func (_fege *Context )Translate (x ,y float64 ){_fege ._baa =_fege ._baa .Translate (x ,y )};
func NewContextForRGBA (im *_ga .RGBA )*Context {_dbf :=im .Bounds ().Size ().X ;_dag :=im .Bounds ().Size ().Y ;return &Context {_bb :_dbf ,_gc :_dag ,_acd :_fc .NewRasterizer (_dbf ,_dag ),_eg :im ,_fbg :_g .Transparent ,_caf :_cf ,_cfc :_dge ,_cfa :1,_fag :_da .FillRuleWinding ,_baa :_ff .IdentityMatrix (),_ccfb :_da .NewTextState ()};
};func _eeb (_dffa _g .Color )_da .Pattern {return &solidPattern {_bfd :_dffa }};func (_cbgg *Context )StrokePattern ()_da .Pattern {return _cbgg ._cfc };func _cgece (_fdfb _ff .Point )_db .Point26_6 {return _db .Point26_6 {X :_gceg (_fdfb .X ),Y :_gceg (_fdfb .Y )};
};func _gda (_bfg _fc .Path )[][]_ff .Point {var _fad [][]_ff .Point ;var _cef []_ff .Point ;var _cgcg ,_gadc float64 ;for _efb :=0;_efb < len (_bfg );{switch _bfg [_efb ]{case 0:if len (_cef )> 0{_fad =append (_fad ,_cef );_cef =nil ;};_fcfdb :=_efgaa (_bfg [_efb +1]);
_gdfd :=_efgaa (_bfg [_efb +2]);_cef =append (_cef ,_ff .NewPoint (_fcfdb ,_gdfd ));_cgcg ,_gadc =_fcfdb ,_gdfd ;_efb +=4;case 1:_dff :=_efgaa (_bfg [_efb +1]);_dgfe :=_efgaa (_bfg [_efb +2]);_cef =append (_cef ,_ff .NewPoint (_dff ,_dgfe ));_cgcg ,_gadc =_dff ,_dgfe ;
_efb +=4;case 2:_cgd :=_efgaa (_bfg [_efb +1]);_bacd :=_efgaa (_bfg [_efb +2]);_aegf :=_efgaa (_bfg [_efb +3]);_bfac :=_efgaa (_bfg [_efb +4]);_cfb :=_fca (_cgcg ,_gadc ,_cgd ,_bacd ,_aegf ,_bfac );_cef =append (_cef ,_cfb ...);_cgcg ,_gadc =_aegf ,_bfac ;
_efb +=6;case 3:_ace :=_efgaa (_bfg [_efb +1]);_cafb :=_efgaa (_bfg [_efb +2]);_cebe :=_efgaa (_bfg [_efb +3]);_cea :=_efgaa (_bfg [_efb +4]);_cafe :=_efgaa (_bfg [_efb +5]);_ddac :=_efgaa (_bfg [_efb +6]);_fcbb :=_gdd (_cgcg ,_gadc ,_ace ,_cafb ,_cebe ,_cea ,_cafe ,_ddac );
_cef =append (_cef ,_fcbb ...);_cgcg ,_gadc =_cafe ,_ddac ;_efb +=8;default:_fd .Log .Debug ("\u0057\u0041\u0052\u004e: \u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0070\u0061\u0074\u0068\u003a\u0020%\u0076",_bfg );return _fad ;};};if len (_cef )> 0{_fad =append (_fad ,_cef );
};return _fad ;};func (_fbad *radialGradient )AddColorStop (offset float64 ,color _g .Color ){_fbad ._debg =append (_fbad ._debg ,stop {_fbgd :offset ,_dfc :color });_a .Sort (_fbad ._debg );};func (_gfa *Context )Height ()int {return _gfa ._gc };func _fae (_caec _fc .Path ,_ggb []float64 ,_bege float64 )_fc .Path {return _afg (_cagb (_gda (_caec ),_ggb ,_bege ));
};func (_dbdd *surfacePattern )ColorAt (x ,y int )_g .Color {_geca :=_dbdd ._geagg .Bounds ();switch _dbdd ._ddcb {case _ecae :if y >=_geca .Dy (){return _g .Transparent ;};case _adge :if x >=_geca .Dx (){return _g .Transparent ;};case _dcc :if x >=_geca .Dx ()||y >=_geca .Dy (){return _g .Transparent ;
};};x =x %_geca .Dx ()+_geca .Min .X ;y =y %_geca .Dy ()+_geca .Min .Y ;return _dbdd ._geagg .At (x ,y );};func (_gba *Context )stroke (_gaef _fc .Painter ){_edc :=_gba ._ggf ;if len (_gba ._gdg )> 0{_edc =_fae (_edc ,_gba ._gdg ,_gba ._agd );}else {_edc =_afg (_gda (_edc ));
};_gde :=_gba ._acd ;_gde .UseNonZeroWinding =true ;_gde .Clear ();_bbf :=(_gba ._baa .ScalingFactorX ()+_gba ._baa .ScalingFactorY ())/2;_gde .AddStroke (_edc ,_gceg (_gba ._cfa *_bbf ),_gba .capper (),_gba .joiner ());_gde .Rasterize (_gaef );};type patternPainter struct{_aga *_ga .RGBA ;
_bdag *_ga .Alpha ;_effc _da .Pattern ;};func NewContext (width ,height int )*Context {return NewContextForRGBA (_ga .NewRGBA (_ga .Rect (0,0,width ,height )));};func (_cbd *Context )DrawArc (x ,y ,r ,angle1 ,angle2 float64 ){_cbd .DrawEllipticalArc (x ,y ,r ,r ,angle1 ,angle2 );
};func _efga (_aebf ,_geag ,_gbde ,_abfe ,_gdcf ,_gaaf float64 )float64 {return _aebf *_abfe +_geag *_gdcf +_gbde *_gaaf ;};func (_cbc *Context )TextState ()*_da .TextState {return &_cbc ._ccfb };func _cagb (_efaf [][]_ff .Point ,_abfb []float64 ,_ggda float64 )[][]_ff .Point {var _gbdf [][]_ff .Point ;
if len (_abfb )==0{return _efaf ;};if len (_abfb )==1{_abfb =append (_abfb ,_abfb [0]);};for _ ,_cbdf :=range _efaf {if len (_cbdf )< 2{continue ;};_ceaa :=_cbdf [0];_agbg :=1;_egge :=0;_dacf :=0.0;if _ggda !=0{var _dgb float64 ;for _ ,_bbb :=range _abfb {_dgb +=_bbb ;
};_ggda =_d .Mod (_ggda ,_dgb );if _ggda < 0{_ggda +=_dgb ;};for _ffg ,_dcgb :=range _abfb {_ggda -=_dcgb ;if _ggda < 0{_egge =_ffg ;_dacf =_dcgb +_ggda ;break ;};};};var _agf []_ff .Point ;_agf =append (_agf ,_ceaa );for _agbg < len (_cbdf ){_ffba :=_abfb [_egge ];
_ebec :=_cbdf [_agbg ];_gbe :=_ceaa .Distance (_ebec );_edge :=_ffba -_dacf ;if _gbe > _edge {_fga :=_edge /_gbe ;_cgbc :=_ceaa .Interpolate (_ebec ,_fga );_agf =append (_agf ,_cgbc );if _egge %2==0&&len (_agf )> 1{_gbdf =append (_gbdf ,_agf );};_agf =nil ;
_agf =append (_agf ,_cgbc );_dacf =0;_ceaa =_cgbc ;_egge =(_egge +1)%len (_abfb );}else {_agf =append (_agf ,_ebec );_ceaa =_ebec ;_dacf +=_gbe ;_agbg ++;};};if _egge %2==0&&len (_agf )> 1{_gbdf =append (_gbdf ,_agf );};};return _gbdf ;};func (_cae *Context )Identity (){_cae ._baa =_ff .IdentityMatrix ()};
func _bddg (_cede ,_cadf _g .Color ,_dce float64 )_g .Color {_ddd ,_caff ,_fedb ,_agea :=_cede .RGBA ();_adab ,_ebe ,_ecgg ,_aab :=_cadf .RGBA ();return _g .RGBA {_dbde (_ddd ,_adab ,_dce ),_dbde (_caff ,_ebe ,_dce ),_dbde (_fedb ,_ecgg ,_dce ),_dbde (_agea ,_aab ,_dce )};
};func (_ecg *Context )SetPixel (x ,y int ){_ecg ._eg .Set (x ,y ,_ecg ._fbg )};func (_gecb *Context )FillPreserve (){var _gcf _fc .Painter ;if _gecb ._gae ==nil {if _aba ,_ebce :=_gecb ._caf .(*solidPattern );_ebce {_agg :=_fc .NewRGBAPainter (_gecb ._eg );
_agg .SetColor (_aba ._bfd );_gcf =_agg ;};};if _gcf ==nil {_gcf =_bdaf (_gecb ._eg ,_gecb ._gae ,_gecb ._caf );};_gecb .fill (_gcf );};func (_ege *Context )SetLineWidth (lineWidth float64 ){_ege ._cfa =lineWidth };func (_cfe *Context )fill (_ccdd _fc .Painter ){_deg :=_cfe ._egc ;
if _cfe ._cge {_deg =make (_fc .Path ,len (_cfe ._egc ));copy (_deg ,_cfe ._egc );_deg .Add1 (_cgece (_cfe ._aaa ));};_dga :=_cfe ._acd ;_dga .UseNonZeroWinding =_cfe ._fag ==_da .FillRuleWinding ;_dga .Clear ();_dga .AddPath (_deg );_dga .Rasterize (_ccdd );
};func (_dbfb *Context )SetMask (mask *_ga .Alpha )error {if mask .Bounds ().Size ()!=_dbfb ._eg .Bounds ().Size (){return _ae .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");
};_dbfb ._gae =mask ;return nil ;};func (_aaga *radialGradient )ColorAt (x ,y int )_g .Color {if len (_aaga ._debg )==0{return _g .Transparent ;};_ecd ,_bac :=float64 (x )+0.5-_aaga ._aaeb ._gcbb ,float64 (y )+0.5-_aaga ._aaeb ._cbbb ;_cdb :=_efga (_ecd ,_bac ,_aaga ._aaeb ._ggc ,_aaga ._gbb ._gcbb ,_aaga ._gbb ._cbbb ,_aaga ._gbb ._ggc );
_bde :=_efga (_ecd ,_bac ,-_aaga ._aaeb ._ggc ,_ecd ,_bac ,_aaga ._aaeb ._ggc );if _aaga ._bdf ==0{if _cdb ==0{return _g .Transparent ;};_fddf :=0.5*_bde /_cdb ;if _fddf *_aaga ._gbb ._ggc >=_aaga ._ccc {return _agb (_fddf ,_aaga ._debg );};return _g .Transparent ;
};_fcc :=_efga (_cdb ,_aaga ._bdf ,0,_cdb ,-_bde ,0);if _fcc >=0{_fdea :=_d .Sqrt (_fcc );_bcd :=(_cdb +_fdea )*_aaga ._dba ;_abfg :=(_cdb -_fdea )*_aaga ._dba ;if _bcd *_aaga ._gbb ._ggc >=_aaga ._ccc {return _agb (_bcd ,_aaga ._debg );}else if _abfg *_aaga ._gbb ._ggc >=_aaga ._ccc {return _agb (_abfg ,_aaga ._debg );
};};return _g .Transparent ;};type linearGradient struct{_fea ,_daac ,_fgb ,_bfb float64 ;_bgac stops ;};func (_eca *Context )ScaleAbout (sx ,sy ,x ,y float64 ){_eca .Translate (x ,y );_eca .Scale (sx ,sy );_eca .Translate (-x ,-y );};func _afg (_fff [][]_ff .Point )_fc .Path {var _fge _fc .Path ;
for _ ,_beb :=range _fff {var _acdg _db .Point26_6 ;for _gfcf ,_aaea :=range _beb {_eff :=_cgece (_aaea );if _gfcf ==0{_fge .Start (_eff );}else {_affe :=_eff .X -_acdg .X ;_cedc :=_eff .Y -_acdg .Y ;if _affe < 0{_affe =-_affe ;};if _cedc < 0{_cedc =-_cedc ;
};if _affe +_cedc > 8{_fge .Add1 (_eff );};};_acdg =_eff ;};};return _fge ;};func (_gcb *linearGradient )AddColorStop (offset float64 ,color _g .Color ){_gcb ._bgac =append (_gcb ._bgac ,stop {_fbgd :offset ,_dfc :color });_a .Sort (_gcb ._bgac );};func (_agdc *Context )Clear (){_cgc :=_ga .NewUniform (_agdc ._fbg );
_e .Draw (_agdc ._eg ,_agdc ._eg .Bounds (),_cgc ,_ga .Point {},_e .Src );};func (_add *Context )QuadraticTo (x1 ,y1 ,x2 ,y2 float64 ){if !_add ._cge {_add .MoveTo (x1 ,y1 );};x1 ,y1 =_add .Transform (x1 ,y1 );x2 ,y2 =_add .Transform (x2 ,y2 );_ccfd :=_ff .NewPoint (x1 ,y1 );
_gbd :=_ff .NewPoint (x2 ,y2 );_edb :=_cgece (_ccfd );_acde :=_cgece (_gbd );_add ._ggf .Add2 (_edb ,_acde );_add ._egc .Add2 (_edb ,_acde );_add ._be =_gbd ;};type stop struct{_fbgd float64 ;_dfc _g .Color ;};type repeatOp int ;func (_bag stops )Len ()int {return len (_bag )};
func (_bggd *Context )SetStrokeRGBA (r ,g ,b ,a float64 ){_dbd :=_g .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_bggd ._cfc =_eeb (_dbd );};func (_ceb *Context )SetMatrix (m _ff .Matrix ){_ceb ._baa =m };func (_fgg *Context )Scale (x ,y float64 ){_fgg ._baa =_fgg ._baa .Scale (x ,y )};
const (_ggfc repeatOp =iota ;_ecae ;_adge ;_dcc ;);func (_adf *Context )joiner ()_fc .Joiner {switch _adf ._dcf {case _da .LineJoinBevel :return _fc .BevelJoiner ;case _da .LineJoinRound :return _fc .RoundJoiner ;};return nil ;};func (_dad *Context )SetRGBA255 (r ,g ,b ,a int ){_dad ._fbg =_g .NRGBA {uint8 (r ),uint8 (g ),uint8 (b ),uint8 (a )};
_dad .setFillAndStrokeColor (_dad ._fbg );};func (_bff *Context )drawRegularPolygon (_gfag int ,_agc ,_gbcd ,_ebg ,_dfbf float64 ){_fba :=2*_d .Pi /float64 (_gfag );_dfbf -=_d .Pi /2;if _gfag %2==0{_dfbf +=_fba /2;};_bff .NewSubPath ();for _daa :=0;_daa < _gfag ;
_daa ++{_cba :=_dfbf +_fba *float64 (_daa );_bff .LineTo (_agc +_ebg *_d .Cos (_cba ),_gbcd +_ebg *_d .Sin (_cba ));};_bff .ClosePath ();};func (_ea *Context )setFillAndStrokeColor (_geb _g .Color ){_ea ._fbg =_geb ;_ea ._caf =_eeb (_geb );_ea ._cfc =_eeb (_geb );
};func (_egf *Context )Clip (){_egf .ClipPreserve ();_egf .ClearPath ()};func (_ebb *Context )DrawImageAnchored (im _ga .Image ,x ,y int ,ax ,ay float64 ){_ebf :=im .Bounds ().Size ();x -=int (ax *float64 (_ebf .X ));y -=int (ay *float64 (_ebf .Y ));_bea :=_e .BiLinear ;
_geda :=_ebb ._baa .Clone ().Translate (float64 (x ),float64 (y ));_bae :=_ffe .Aff3 {_geda [0],_geda [3],_geda [6],_geda [1],_geda [4],_geda [7]};if _ebb ._gae ==nil {_bea .Transform (_ebb ._eg ,_bae ,im ,im .Bounds (),_e .Over ,nil );}else {_bea .Transform (_ebb ._eg ,_bae ,im ,im .Bounds (),_e .Over ,&_e .Options {DstMask :_ebb ._gae ,DstMaskP :_ga .Point {}});
};};func _aa (_bc ,_dc ,_ac ,_ge ,_fa ,_gd ,_c float64 )(_bf ,_dg float64 ){_fe :=1-_c ;_fg :=_fe *_fe ;_gg :=2*_fe *_c ;_aag :=_c *_c ;_bf =_fg *_bc +_gg *_ac +_aag *_fa ;_dg =_fg *_dc +_gg *_ge +_aag *_gd ;return ;};func (_gbfg *Context )RotateAbout (angle ,x ,y float64 ){_gbfg .Translate (x ,y );
_gbfg .Rotate (angle );_gbfg .Translate (-x ,-y );};func (_ccbf *Context )Matrix ()_ff .Matrix {return _ccbf ._baa };func (_dggf *patternPainter )Paint (ss []_fc .Span ,done bool ){_cfaa :=_dggf ._aga .Bounds ();for _ ,_cdf :=range ss {if _cdf .Y < _cfaa .Min .Y {continue ;
};if _cdf .Y >=_cfaa .Max .Y {return ;};if _cdf .X0 < _cfaa .Min .X {_cdf .X0 =_cfaa .Min .X ;};if _cdf .X1 > _cfaa .Max .X {_cdf .X1 =_cfaa .Max .X ;};if _cdf .X0 >=_cdf .X1 {continue ;};const _gced =1<<16-1;_baca :=_cdf .Y -_dggf ._aga .Rect .Min .Y ;
_fce :=_cdf .X0 -_dggf ._aga .Rect .Min .X ;_cgeg :=(_cdf .Y -_dggf ._aga .Rect .Min .Y )*_dggf ._aga .Stride +(_cdf .X0 -_dggf ._aga .Rect .Min .X )*4;_aebc :=_cgeg +(_cdf .X1 -_cdf .X0 )*4;for _aggf ,_bce :=_cgeg ,_fce ;_aggf < _aebc ;_aggf ,_bce =_aggf +4,_bce +1{_bgea :=_cdf .Alpha ;
if _dggf ._bdag !=nil {_bgea =_bgea *uint32 (_dggf ._bdag .AlphaAt (_bce ,_baca ).A )/255;if _bgea ==0{continue ;};};_egeb :=_dggf ._effc .ColorAt (_bce ,_baca );_ffbb ,_bddgc ,_fef ,_cff :=_egeb .RGBA ();_fbadc :=uint32 (_dggf ._aga .Pix [_aggf +0]);_cgfa :=uint32 (_dggf ._aga .Pix [_aggf +1]);
_gdbe :=uint32 (_dggf ._aga .Pix [_aggf +2]);_caee :=uint32 (_dggf ._aga .Pix [_aggf +3]);_edf :=(_gced -(_cff *_bgea /_gced ))*0x101;_dggf ._aga .Pix [_aggf +0]=uint8 ((_fbadc *_edf +_ffbb *_bgea )/_gced >>8);_dggf ._aga .Pix [_aggf +1]=uint8 ((_cgfa *_edf +_bddgc *_bgea )/_gced >>8);
_dggf ._aga .Pix [_aggf +2]=uint8 ((_gdbe *_edf +_fef *_bgea )/_gced >>8);_dggf ._aga .Pix [_aggf +3]=uint8 ((_caee *_edf +_cff *_bgea )/_gced >>8);};};};func (_ebff *Context )Shear (x ,y float64 ){_ebff ._baa .Shear (x ,y )};func (_deb *Context )StrokePreserve (){var _cfcb _fc .Painter ;
if _deb ._gae ==nil {if _eceb ,_afe :=_deb ._cfc .(*solidPattern );_afe {_dggg :=_fc .NewRGBAPainter (_deb ._eg );_dggg .SetColor (_eceb ._bfd );_cfcb =_dggg ;};};if _cfcb ==nil {_cfcb =_bdaf (_deb ._eg ,_deb ._gae ,_deb ._cfc );};_deb .stroke (_cfcb );
};func NewRadialGradient (x0 ,y0 ,r0 ,x1 ,y1 ,r1 float64 )_da .Gradient {_gbab :=circle {x0 ,y0 ,r0 };_dgf :=circle {x1 ,y1 ,r1 };_ffc :=circle {x1 -x0 ,y1 -y0 ,r1 -r0 };_dcdfd :=_efga (_ffc ._gcbb ,_ffc ._cbbb ,-_ffc ._ggc ,_ffc ._gcbb ,_ffc ._cbbb ,_ffc ._ggc );
var _deag float64 ;if _dcdfd !=0{_deag =1.0/_dcdfd ;};_bbcc :=-_gbab ._ggc ;_eda :=&radialGradient {_aaeb :_gbab ,_edg :_dgf ,_gbb :_ffc ,_bdf :_dcdfd ,_dba :_deag ,_ccc :_bbcc };return _eda ;};func (_fdg *Context )SetRGB255 (r ,g ,b int ){_fdg .SetRGBA255 (r ,g ,b ,255)};
func _agb (_dfcd float64 ,_ceda stops )_g .Color {if _dfcd <=0.0||len (_ceda )==1{return _ceda [0]._dfc ;};_cda :=_ceda [len (_ceda )-1];if _dfcd >=_cda ._fbgd {return _cda ._dfc ;};for _eabe ,_efge :=range _ceda [1:]{if _dfcd < _efge ._fbgd {_dfcd =(_dfcd -_ceda [_eabe ]._fbgd )/(_efge ._fbgd -_ceda [_eabe ]._fbgd );
return _bddg (_ceda [_eabe ]._dfc ,_efge ._dfc ,_dfcd );};};return _cda ._dfc ;};func (_cab *Context )Fill (){_cab .FillPreserve ();_cab .ClearPath ()};type radialGradient struct{_aaeb ,_edg ,_gbb circle ;_bdf ,_dba float64 ;_ccc float64 ;_debg stops ;
};func (_dbc *Context )DrawEllipse (x ,y ,rx ,ry float64 ){_dbc .NewSubPath ();_dbc .DrawEllipticalArc (x ,y ,rx ,ry ,0,2*_d .Pi );_dbc .ClosePath ();};func (_bdd *Context )DrawCircle (x ,y ,r float64 ){_bdd .NewSubPath ();_bdd .DrawEllipticalArc (x ,y ,r ,r ,0,2*_d .Pi );
_bdd .ClosePath ();};func (_gdb *Context )MoveTo (x ,y float64 ){if _gdb ._cge {_gdb ._egc .Add1 (_cgece (_gdb ._aaa ));};x ,y =_gdb .Transform (x ,y );_fbb :=_ff .NewPoint (x ,y );_dae :=_cgece (_fbb );_gdb ._ggf .Start (_dae );_gdb ._egc .Start (_dae );
_gdb ._aaa =_fbb ;_gdb ._be =_fbb ;_gdb ._cge =true ;};func (_egdg stops )Swap (i ,j int ){_egdg [i ],_egdg [j ]=_egdg [j ],_egdg [i ]};func (_bdga *Context )NewSubPath (){if _bdga ._cge {_bdga ._egc .Add1 (_cgece (_bdga ._aaa ));};_bdga ._cge =false ;
};func (_aagb *Context )SetFillStyle (pattern _da .Pattern ){if _ccg ,_gfge :=pattern .(*solidPattern );_gfge {_aagb ._fbg =_ccg ._bfd ;};_aagb ._caf =pattern ;};func (_gfdf *Context )SetHexColor (x string ){_dgd ,_gb ,_bbd ,_gec :=_bfgf (x );_gfdf .SetRGBA255 (_dgd ,_gb ,_bbd ,_gec );
};func (_fbgg *Context )Transform (x ,y float64 )(_fddb ,_bec float64 ){return _fbgg ._baa .Transform (x ,y );};type circle struct{_gcbb ,_cbbb ,_ggc float64 };func (_bbc *Context )Rotate (angle float64 ){_bbc ._baa =_bbc ._baa .Rotate (angle )};func (_ede *Context )capper ()_fc .Capper {switch _ede ._gfg {case _da .LineCapButt :return _fc .ButtCapper ;
case _da .LineCapRound :return _fc .RoundCapper ;case _da .LineCapSquare :return _fc .SquareCapper ;};return nil ;};func (_ce *Context )LineTo (x ,y float64 ){if !_ce ._cge {_ce .MoveTo (x ,y );}else {x ,y =_ce .Transform (x ,y );_aff :=_ff .NewPoint (x ,y );
_bge :=_cgece (_aff );_ce ._ggf .Add1 (_bge );_ce ._egc .Add1 (_bge );_ce ._be =_aff ;};};func NewContextForImage (im _ga .Image )*Context {return NewContextForRGBA (_efafc (im ))};func _gceg (_ebd float64 )_db .Int26_6 {return _db .Int26_6 (_ebd *64)};
func _gdd (_fabe ,_dab ,_dda ,_fcf ,_ddc ,_bg ,_bgg ,_dde float64 )[]_ff .Point {_fdb :=(_d .Hypot (_dda -_fabe ,_fcf -_dab )+_d .Hypot (_ddc -_dda ,_bg -_fcf )+_d .Hypot (_bgg -_ddc ,_dde -_bg ));_ab :=int (_fdb +0.5);if _ab < 4{_ab =4;};_cbg :=float64 (_ab )-1;
_ef :=make ([]_ff .Point ,_ab );for _cg :=0;_cg < _ab ;_cg ++{_fed :=float64 (_cg )/_cbg ;_bgb ,_bdg :=_eb (_fabe ,_dab ,_dda ,_fcf ,_ddc ,_bg ,_bgg ,_dde ,_fed );_ef [_cg ]=_ff .NewPoint (_bgb ,_bdg );};return _ef ;};func (_acda *Context )AsMask ()*_ga .Alpha {_eggd :=_ga .NewAlpha (_acda ._eg .Bounds ());
_e .Draw (_eggd ,_acda ._eg .Bounds (),_acda ._eg ,_ga .Point {},_e .Src );return _eggd ;};func _efafc (_aca _ga .Image )*_ga .RGBA {_bccbd :=_aca .Bounds ();_feae :=_ga .NewRGBA (_bccbd );_ad .Draw (_feae ,_bccbd ,_aca ,_bccbd .Min ,_ad .Src );return _feae ;
};func (_abf *Context )SetStrokeStyle (pattern _da .Pattern ){_abf ._cfc =pattern };func (_gag *Context )DrawRoundedRectangle (x ,y ,w ,h ,r float64 ){_gad ,_caga ,_cbgb ,_fcag :=x ,x +r ,x +w -r ,x +w ;_dabc ,_agde ,_bdc ,_gga :=y ,y +r ,y +h -r ,y +h ;
_gag .NewSubPath ();_gag .MoveTo (_caga ,_dabc );_gag .LineTo (_cbgb ,_dabc );_gag .DrawArc (_cbgb ,_agde ,r ,_gadf (270),_gadf (360));_gag .LineTo (_fcag ,_bdc );_gag .DrawArc (_cbgb ,_bdc ,r ,_gadf (0),_gadf (90));_gag .LineTo (_caga ,_gga );_gag .DrawArc (_caga ,_bdc ,r ,_gadf (90),_gadf (180));
_gag .LineTo (_gad ,_agde );_gag .DrawArc (_caga ,_agde ,r ,_gadf (180),_gadf (270));_gag .ClosePath ();};func (_fcb *Context )SetRGBA (r ,g ,b ,a float64 ){_fcb ._fbg =_g .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_fcb .setFillAndStrokeColor (_fcb ._fbg );
};func (_ccec *Context )Pop (){_gce :=*_ccec ;_bga :=_ccec ._aae ;_gdc :=_bga [len (_bga )-1];*_ccec =*_gdc ;_ccec ._ggf =_gce ._ggf ;_ccec ._egc =_gce ._egc ;_ccec ._aaa =_gce ._aaa ;_ccec ._be =_gce ._be ;_ccec ._cge =_gce ._cge ;};func (_fbbe *Context )MeasureString (s string ,face _dac .Face )(_gbf ,_ccb float64 ){_acf :=&_dac .Drawer {Face :face };
_cbb :=_acf .MeasureString (s );return float64 (_cbb >>6),_fbbe ._ccfb .Tf .Size ;};func (_gdef *Context )ResetClip (){_gdef ._gae =nil };func (_aea *Context )ShearAbout (sx ,sy ,x ,y float64 ){_aea .Translate (x ,y );_aea .Shear (sx ,sy );_aea .Translate (-x ,-y );
};func (_ffd *Context )DrawString (s string ,face _dac .Face ,x ,y float64 ){_ffd .DrawStringAnchored (s ,face ,x ,y ,0,0);};func _efgaa (_geaa _db .Int26_6 )float64 {const _cgbb ,_aagc =6,1<<6-1;if _geaa >=0{return float64 (_geaa >>_cgbb )+float64 (_geaa &_aagc )/64;
};_geaa =-_geaa ;if _geaa >=0{return -(float64 (_geaa >>_cgbb )+float64 (_geaa &_aagc )/64);};return 0;};func (_baf stops )Less (i ,j int )bool {return _baf [i ]._fbgd < _baf [j ]._fbgd };func _gadf (_efc float64 )float64 {return _efc *_d .Pi /180};func (_ged *Context )DrawRectangle (x ,y ,w ,h float64 ){_ged .NewSubPath ();
_ged .MoveTo (x ,y );_ged .LineTo (x +w ,y );_ged .LineTo (x +w ,y +h );_ged .LineTo (x ,y +h );_ged .ClosePath ();};func _bdaf (_edbc *_ga .RGBA ,_adcc *_ga .Alpha ,_fegb _da .Pattern )*patternPainter {return &patternPainter {_edbc ,_adcc ,_fegb };};func (_gea *Context )DrawLine (x1 ,y1 ,x2 ,y2 float64 ){_gea .MoveTo (x1 ,y1 );
_gea .LineTo (x2 ,y2 )};func (_cad *Context )FillPattern ()_da .Pattern {return _cad ._caf };func (_caa *Context )DrawStringAnchored (s string ,face _dac .Face ,x ,y ,ax ,ay float64 ){_ead ,_gfe :=_caa .MeasureString (s ,face );_caa .drawString (s ,face ,x -ax *_ead ,y +ay *_gfe );
};func (_dcd *Context )SetDash (dashes ...float64 ){_dcd ._gdg =dashes };func (_cgf *Context )SetDashOffset (offset float64 ){_cgf ._agd =offset };func (_dcb *Context )CubicTo (x1 ,y1 ,x2 ,y2 ,x3 ,y3 float64 ){if !_dcb ._cge {_dcb .MoveTo (x1 ,y1 );};_ebc ,_cag :=_dcb ._be .X ,_dcb ._be .Y ;
x1 ,y1 =_dcb .Transform (x1 ,y1 );x2 ,y2 =_dcb .Transform (x2 ,y2 );x3 ,y3 =_dcb .Transform (x3 ,y3 );_ec :=_gdd (_ebc ,_cag ,x1 ,y1 ,x2 ,y2 ,x3 ,y3 );_gfbb :=_cgece (_dcb ._be );for _ ,_dgdc :=range _ec [1:]{_gdf :=_cgece (_dgdc );if _gdf ==_gfbb {continue ;
};_gfbb =_gdf ;_dcb ._ggf .Add1 (_gdf );_dcb ._egc .Add1 (_gdf );_dcb ._be =_dgdc ;};};func NewLinearGradient (x0 ,y0 ,x1 ,y1 float64 )_da .Gradient {_daeg :=&linearGradient {_fea :x0 ,_daac :y0 ,_fgb :x1 ,_bfb :y1 };return _daeg ;};func (_abe *Context )DrawImage (im _ga .Image ,x ,y int ){_abe .DrawImageAnchored (im ,x ,y ,0,0)};
func _fca (_bcf ,_ed ,_fb ,_fde ,_bcc ,_feg float64 )[]_ff .Point {_cc :=(_d .Hypot (_fb -_bcf ,_fde -_ed )+_d .Hypot (_bcc -_fb ,_feg -_fde ));_df :=int (_cc +0.5);if _df < 4{_df =4;};_ggg :=float64 (_df )-1;_ca :=make ([]_ff .Point ,_df );for _cb :=0;
_cb < _df ;_cb ++{_de :=float64 (_cb )/_ggg ;_fdc ,_dd :=_aa (_bcf ,_ed ,_fb ,_fde ,_bcc ,_feg ,_de );_ca [_cb ]=_ff .NewPoint (_fdc ,_dd );};return _ca ;};func _dbde (_fbfe ,_abb uint32 ,_bbfc float64 )uint8 {return uint8 (int32 (float64 (_fbfe )*(1.0-_bbfc )+float64 (_abb )*_bbfc )>>8);
};func (_egg *Context )SetFillRGBA (r ,g ,b ,a float64 ){_ddg :=_g .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_egg ._fbg =_ddg ;_egg ._caf =_eeb (_ddg );};func (_dggge *Context )Stroke (){_dggge .StrokePreserve ();_dggge .ClearPath ()};
func _bfgf (_cedaf string )(_decc ,_dcbe ,_abaa ,_dbe int ){_cedaf =_bd .TrimPrefix (_cedaf ,"\u0023");_dbe =255;if len (_cedaf )==3{_gagf :="\u00251\u0078\u0025\u0031\u0078\u0025\u0031x";_f .Sscanf (_cedaf ,_gagf ,&_decc ,&_dcbe ,&_abaa );_decc |=_decc <<4;
_dcbe |=_dcbe <<4;_abaa |=_abaa <<4;};if len (_cedaf )==6{_cgec :="\u0025\u0030\u0032x\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_f .Sscanf (_cedaf ,_cgec ,&_decc ,&_dcbe ,&_abaa );};if len (_cedaf )==8{_eceg :="\u0025\u00302\u0078\u0025\u00302\u0078\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";
_f .Sscanf (_cedaf ,_eceg ,&_decc ,&_dcbe ,&_abaa ,&_dbe );};return ;};func (_beg *Context )InvertMask (){if _beg ._gae ==nil {_beg ._gae =_ga .NewAlpha (_beg ._eg .Bounds ());}else {for _bccb ,_bad :=range _beg ._gae .Pix {_beg ._gae .Pix [_bccb ]=255-_bad ;
};};};type stops []stop ;func (_ece *Context )ClearPath (){_ece ._ggf .Clear ();_ece ._egc .Clear ();_ece ._cge =false };func (_ccfbg *linearGradient )ColorAt (x ,y int )_g .Color {if len (_ccfbg ._bgac )==0{return _g .Transparent ;};_debc ,_bda :=float64 (x ),float64 (y );
_efg ,_bfe ,_cbbf ,_cbfd :=_ccfbg ._fea ,_ccfbg ._daac ,_ccfbg ._fgb ,_ccfbg ._bfb ;_eab ,_cee :=_cbbf -_efg ,_cbfd -_bfe ;if _cee ==0&&_eab !=0{return _agb ((_debc -_efg )/_eab ,_ccfbg ._bgac );};if _eab ==0&&_cee !=0{return _agb ((_bda -_bfe )/_cee ,_ccfbg ._bgac );
};_gfbd :=_eab *(_debc -_efg )+_cee *(_bda -_bfe );if _gfbd < 0{return _ccfbg ._bgac [0]._dfc ;};_dcdf :=_d .Hypot (_eab ,_cee );_cbgbg :=((_debc -_efg )*-_cee +(_bda -_bfe )*_eab )/(_dcdf *_dcdf );_geg ,_fbf :=_efg +_cbgbg *-_cee ,_bfe +_cbgbg *_eab ;
_adfc :=_d .Hypot (_debc -_geg ,_bda -_fbf )/_dcdf ;return _agb (_adfc ,_ccfbg ._bgac );};type surfacePattern struct{_geagg _ga .Image ;_ddcb repeatOp ;};func (_fgf *Context )DrawPoint (x ,y ,r float64 ){_fgf .Push ();_gfc ,_cgca :=_fgf .Transform (x ,y );
_fgf .Identity ();_fgf .DrawCircle (_gfc ,_cgca ,r );_fgf .Pop ();};func (_dec *Context )DrawEllipticalArc (x ,y ,rx ,ry ,angle1 ,angle2 float64 ){const _gbc =16;for _cga :=0;_cga < _gbc ;_cga ++{_dfd :=float64 (_cga +0)/_gbc ;_adag :=float64 (_cga +1)/_gbc ;
_bcfc :=angle1 +(angle2 -angle1 )*_dfd ;_fdcf :=angle1 +(angle2 -angle1 )*_adag ;_ecb :=x +rx *_d .Cos (_bcfc );_bee :=y +ry *_d .Sin (_bcfc );_aad :=x +rx *_d .Cos ((_bcfc +_fdcf )/2);_aeb :=y +ry *_d .Sin ((_bcfc +_fdcf )/2);_adc :=x +rx *_d .Cos (_fdcf );
_aeg :=y +ry *_d .Sin (_fdcf );_cd :=2*_aad -_ecb /2-_adc /2;_fbd :=2*_aeb -_bee /2-_aeg /2;if _cga ==0{if _dec ._cge {_dec .LineTo (_ecb ,_bee );}else {_dec .MoveTo (_ecb ,_bee );};};_dec .QuadraticTo (_cd ,_fbd ,_adc ,_aeg );};};func (_age *Context )SetRGB (r ,g ,b float64 ){_age .SetRGBA (r ,g ,b ,1)};