2020-08-27 21:45:09 +00:00
|
|
|
//
|
|
|
|
// 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/
|
|
|
|
|
2021-06-21 14:01:56 +00:00
|
|
|
package imagerender ;import (_eg "errors";_f "fmt";_cc "github.com/golang/freetype/raster";_d "github.com/unidoc/unipdf/v3/common";_fd "github.com/unidoc/unipdf/v3/internal/transform";_ac "github.com/unidoc/unipdf/v3/render/internal/context";_ba "golang.org/x/image/draw";
|
|
|
|
_fg "golang.org/x/image/font";_cb "golang.org/x/image/math/f64";_cg "golang.org/x/image/math/fixed";_ae "image";_e "image/color";_a "image/draw";_b "math";_be "sort";_g "strings";);type Context struct{_dcb int ;_fb int ;_aba *_cc .Rasterizer ;_gbb *_ae .RGBA ;
|
|
|
|
_cff *_ae .Alpha ;_gg _e .Color ;_gc _ac .Pattern ;_dbc _ac .Pattern ;_de _cc .Path ;_dfad _cc .Path ;_eaf _fd .Point ;_ged _fd .Point ;_bg bool ;_gaf []float64 ;_accg float64 ;_daa float64 ;_dd _ac .LineCap ;_ede _ac .LineJoin ;_fba _ac .FillRule ;_abee _fd .Matrix ;
|
|
|
|
_ebd _ac .TextState ;_efb []*Context ;};func (_dfd *Context )capper ()_cc .Capper {switch _dfd ._dd {case _ac .LineCapButt :return _cc .ButtCapper ;case _ac .LineCapRound :return _cc .RoundCapper ;case _ac .LineCapSquare :return _cc .SquareCapper ;};return nil ;
|
|
|
|
};func (_bcd *Context )ClearPath (){_bcd ._de .Clear ();_bcd ._dfad .Clear ();_bcd ._bg =false };func (_fcd *Context )Image ()_ae .Image {return _fcd ._gbb };func (_ebc *Context )Height ()int {return _ebc ._fb };func _eea (_gcb ,_ffaff ,_ffdfd ,_ggfd ,_fcb ,_ade float64 )float64 {return _gcb *_ggfd +_ffaff *_fcb +_ffdfd *_ade ;
|
|
|
|
};func (_eee *Context )ClosePath (){if _eee ._bg {_aca :=_ebda (_eee ._eaf );_eee ._de .Add1 (_aca );_eee ._dfad .Add1 (_aca );_eee ._ged =_eee ._eaf ;};};func (_aaf *Context )ResetClip (){_aaf ._cff =nil };func (_eag *Context )Push (){_fdd :=*_eag ;_eag ._efb =append (_eag ._efb ,&_fdd )};
|
|
|
|
func (_fgb *Context )Fill (){_fgb .FillPreserve ();_fgb .ClearPath ()};func _bdcg (_aebe float64 ,_deec stops )_e .Color {if _aebe <=0.0||len (_deec )==1{return _deec [0]._ffdf ;};_gggc :=_deec [len (_deec )-1];if _aebe >=_gggc ._cabc {return _gggc ._ffdf ;
|
|
|
|
};for _adbb ,_fdad :=range _deec [1:]{if _aebe < _fdad ._cabc {_aebe =(_aebe -_deec [_adbb ]._cabc )/(_fdad ._cabc -_deec [_adbb ]._cabc );return _becb (_deec [_adbb ]._ffdf ,_fdad ._ffdf ,_aebe );};};return _gggc ._ffdf ;};func (_fdf *Context )DrawCircle (x ,y ,r float64 ){_fdf .NewSubPath ();
|
|
|
|
_fdf .DrawEllipticalArc (x ,y ,r ,r ,0,2*_b .Pi );_fdf .ClosePath ();};type circle struct{_bge ,_beba ,_cfaa float64 };func _fdeb (_adb ,_egbc ,_egba ,_befg float64 )_ac .Gradient {_abdc :=&linearGradient {_aag :_adb ,_fad :_egbc ,_afe :_egba ,_fgg :_befg };
|
|
|
|
return _abdc ;};func (_gbe *Context )SetLineCap (lineCap _ac .LineCap ){_gbe ._dd =lineCap };func (_ccag *solidPattern )ColorAt (x ,y int )_e .Color {return _ccag ._bgcd };func _ebdee (_ddea *_ae .RGBA ,_efdf *_ae .Alpha ,_dfdb _ac .Pattern )*patternPainter {return &patternPainter {_ddea ,_efdf ,_dfdb };
|
|
|
|
};func _abe (_gaa ,_eb ,_add ,_bcb ,_ccc ,_cbf ,_cec ,_ega float64 )[]_fd .Point {_cba :=(_b .Hypot (_add -_gaa ,_bcb -_eb )+_b .Hypot (_ccc -_add ,_cbf -_bcb )+_b .Hypot (_cec -_ccc ,_ega -_cbf ));_fgf :=int (_cba +0.5);if _fgf < 4{_fgf =4;};_dcc :=float64 (_fgf )-1;
|
|
|
|
_ff :=make ([]_fd .Point ,_fgf );for _af :=0;_af < _fgf ;_af ++{_acc :=float64 (_af )/_dcc ;_edde ,_gee :=_faa (_gaa ,_eb ,_add ,_bcb ,_ccc ,_cbf ,_cec ,_ega ,_acc );_ff [_af ]=_fd .NewPoint (_edde ,_gee );};return _ff ;};func (_fgc *Context )stroke (_gca _cc .Painter ){_fee :=_fgc ._de ;
|
|
|
|
if len (_fgc ._gaf )> 0{_fee =_ccgc (_fee ,_fgc ._gaf ,_fgc ._accg );}else {_fee =_fcfe (_fdgec (_fee ));};_cac :=_fgc ._aba ;_cac .UseNonZeroWinding =true ;_cac .Clear ();_eff :=(_fgc ._abee .ScalingFactorX ()+_fgc ._abee .ScalingFactorY ())/2;_cac .AddStroke (_fee ,_accc (_fgc ._daa *_eff ),_fgc .capper (),_fgc .joiner ());
|
|
|
|
_cac .Rasterize (_gca );};func _fcfe (_afgb [][]_fd .Point )_cc .Path {var _bbag _cc .Path ;for _ ,_bcdd :=range _afgb {var _fddb _cg .Point26_6 ;for _aggg ,_dfgd :=range _bcdd {_bdca :=_ebda (_dfgd );if _aggg ==0{_bbag .Start (_bdca );}else {_dcg :=_bdca .X -_fddb .X ;
|
|
|
|
_gcbe :=_bdca .Y -_fddb .Y ;if _dcg < 0{_dcg =-_dcg ;};if _gcbe < 0{_gcbe =-_gcbe ;};if _dcg +_gcbe > 8{_bbag .Add1 (_bdca );};};_fddb =_bdca ;};};return _bbag ;};func (_ee *Context )CubicTo (x1 ,y1 ,x2 ,y2 ,x3 ,y3 float64 ){if !_ee ._bg {_ee .MoveTo (x1 ,y1 );
|
|
|
|
};_ggf ,_abd :=_ee ._ged .X ,_ee ._ged .Y ;x1 ,y1 =_ee .Transform (x1 ,y1 );x2 ,y2 =_ee .Transform (x2 ,y2 );x3 ,y3 =_ee .Transform (x3 ,y3 );_cgg :=_abe (_ggf ,_abd ,x1 ,y1 ,x2 ,y2 ,x3 ,y3 );_cbb :=_ebda (_ee ._ged );for _ ,_dce :=range _cgg [1:]{_abdg :=_ebda (_dce );
|
|
|
|
if _abdg ==_cbb {continue ;};_cbb =_abdg ;_ee ._de .Add1 (_abdg );_ee ._dfad .Add1 (_abdg );_ee ._ged =_dce ;};};func (_dg *Context )MoveTo (x ,y float64 ){if _dg ._bg {_dg ._dfad .Add1 (_ebda (_dg ._eaf ));};x ,y =_dg .Transform (x ,y );_fbc :=_fd .NewPoint (x ,y );
|
|
|
|
_cgd :=_ebda (_fbc );_dg ._de .Start (_cgd );_dg ._dfad .Start (_cgd );_dg ._eaf =_fbc ;_dg ._ged =_fbc ;_dg ._bg =true ;};func (_fdge *Context )DrawEllipticalArc (x ,y ,rx ,ry ,angle1 ,angle2 float64 ){const _feeb =16;for _dgf :=0;_dgf < _feeb ;_dgf ++{_ffaf :=float64 (_dgf +0)/_feeb ;
|
|
|
|
_ffc :=float64 (_dgf +1)/_feeb ;_bgfd :=angle1 +(angle2 -angle1 )*_ffaf ;_deg :=angle1 +(angle2 -angle1 )*_ffc ;_faf :=x +rx *_b .Cos (_bgfd );_cfd :=y +ry *_b .Sin (_bgfd );_efff :=x +rx *_b .Cos ((_bgfd +_deg )/2);_cef :=y +ry *_b .Sin ((_bgfd +_deg )/2);
|
|
|
|
_cae :=x +rx *_b .Cos (_deg );_bbc :=y +ry *_b .Sin (_deg );_fcec :=2*_efff -_faf /2-_cae /2;_bga :=2*_cef -_cfd /2-_bbc /2;if _dgf ==0{if _fdge ._bg {_fdge .LineTo (_faf ,_cfd );}else {_fdge .MoveTo (_faf ,_cfd );};};_fdge .QuadraticTo (_fcec ,_bga ,_cae ,_bbc );
|
|
|
|
};};func (_aa *Context )NewSubPath (){if _aa ._bg {_aa ._dfad .Add1 (_ebda (_aa ._eaf ));};_aa ._bg =false ;};func _accc (_eeae float64 )_cg .Int26_6 {return _cg .Int26_6 (_eeae *64)};func (_afa *Context )SetRGB255 (r ,g ,b int ){_afa .SetRGBA255 (r ,g ,b ,255)};
|
|
|
|
func (_acd *Context )SetStrokeRGBA (r ,g ,b ,a float64 ){_acb :=_e .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_acd ._dbc =_feg (_acb );};func (_bgc *Context )SetLineWidth (lineWidth float64 ){_bgc ._daa =lineWidth };var (_cfa =_feg (_e .White );
|
|
|
|
_gad =_feg (_e .Black ););func (_ffd *Context )DrawRectangle (x ,y ,w ,h float64 ){_ffd .NewSubPath ();_ffd .MoveTo (x ,y );_ffd .LineTo (x +w ,y );_ffd .LineTo (x +w ,y +h );_ffd .LineTo (x ,y +h );_ffd .ClosePath ();};func (_agd *Context )SetHexColor (x string ){_cedd ,_bdc ,_bae ,_afg :=_eebd (x );
|
|
|
|
_agd .SetRGBA255 (_cedd ,_bdc ,_bae ,_afg );};func (_aed *Context )Rotate (angle float64 ){_aed ._abee =_aed ._abee .Rotate (angle )};func (_afbg *Context )SetPixel (x ,y int ){_afbg ._gbb .Set (x ,y ,_afbg ._gg )};func (_abf *Context )SetColor (c _e .Color ){_abf .setFillAndStrokeColor (c )};
|
|
|
|
func (_gbbe *Context )SetDash (dashes ...float64 ){_gbbe ._gaf =dashes };func (_dbb *Context )DrawString (s string ,face _fg .Face ,x ,y float64 ){_dbb .DrawStringAnchored (s ,face ,x ,y ,0,0);};func (_cdg *Context )Shear (x ,y float64 ){_cdg ._abee .Shear (x ,y )};
|
|
|
|
func (_acf *Context )SetRGB (r ,g ,b float64 ){_acf .SetRGBA (r ,g ,b ,1)};func _faa (_dc ,_fab ,_cd ,_cdf ,_bf ,_cf ,_ab ,_gdg ,_edd float64 )(_edg ,_ad float64 ){_bc :=1-_edd ;_dfa :=_bc *_bc *_bc ;_gagf :=3*_bc *_bc *_edd ;_gbd :=3*_bc *_edd *_edd ;
|
|
|
|
_dcd :=_edd *_edd *_edd ;_edg =_dfa *_dc +_gagf *_cd +_gbd *_bf +_dcd *_ab ;_ad =_dfa *_fab +_gagf *_cdf +_gbd *_cf +_dcd *_gdg ;return ;};func _feg (_dbg _e .Color )_ac .Pattern {return &solidPattern {_bgcd :_dbg }};func (_dag *Context )Identity (){_dag ._abee =_fd .IdentityMatrix ()};
|
|
|
|
func (_bfd *Context )FillPreserve (){var _geeg _cc .Painter ;if _bfd ._cff ==nil {if _bgf ,_gdf :=_bfd ._gc .(*solidPattern );_gdf {_ggba :=_cc .NewRGBAPainter (_bfd ._gbb );_ggba .SetColor (_bgf ._bgcd );_geeg =_ggba ;};};if _geeg ==nil {_geeg =_ebdee (_bfd ._gbb ,_bfd ._cff ,_bfd ._gc );
|
|
|
|
};_bfd .fill (_geeg );};func (_fccf *linearGradient )ColorAt (x ,y int )_e .Color {if len (_fccf ._bdfd )==0{return _e .Transparent ;};_fbe ,_ggca :=float64 (x ),float64 (y );_dgc ,_fabd ,_fff ,_accga :=_fccf ._aag ,_fccf ._fad ,_fccf ._afe ,_fccf ._fgg ;
|
|
|
|
_bfdg ,_ddd :=_fff -_dgc ,_accga -_fabd ;if _ddd ==0&&_bfdg !=0{return _bdcg ((_fbe -_dgc )/_bfdg ,_fccf ._bdfd );};if _bfdg ==0&&_ddd !=0{return _bdcg ((_ggca -_fabd )/_ddd ,_fccf ._bdfd );};_gace :=_bfdg *(_fbe -_dgc )+_ddd *(_ggca -_fabd );if _gace < 0{return _fccf ._bdfd [0]._ffdf ;
|
|
|
|
};_aeg :=_b .Hypot (_bfdg ,_ddd );_age :=((_fbe -_dgc )*-_ddd +(_ggca -_fabd )*_bfdg )/(_aeg *_aeg );_ebdg ,_beae :=_dgc +_age *-_ddd ,_fabd +_age *_bfdg ;_aggf :=_b .Hypot (_fbe -_ebdg ,_ggca -_beae )/_aeg ;return _bdcg (_aggf ,_fccf ._bdfd );};func (_fcg *Context )LineWidth ()float64 {return _fcg ._daa };
|
|
|
|
type radialGradient struct{_fgeg ,_fbeb ,_ddc circle ;_aac ,_aedd float64 ;_egdf float64 ;_abaa stops ;};func (_dba *Context )SetFillRGBA (r ,g ,b ,a float64 ){_bda :=_e .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_dba ._gg =_bda ;
|
|
|
|
_dba ._gc =_feg (_bda );};func NewContext (width ,height int )*Context {return NewContextForRGBA (_ae .NewRGBA (_ae .Rect (0,0,width ,height )));};func (_feegd stops )Len ()int {return len (_feegd )};type stop struct{_cabc float64 ;_ffdf _e .Color ;};func _fcf (_bfg ,_ebde uint32 ,_cea float64 )uint8 {return uint8 (int32 (float64 (_bfg )*(1.0-_cea )+float64 (_ebde )*_cea )>>8);
|
|
|
|
};func (_cdff *Context )Pop (){_fcda :=*_cdff ;_agc :=_cdff ._efb ;_bbd :=_agc [len (_agc )-1];*_cdff =*_bbd ;_cdff ._de =_fcda ._de ;_cdff ._dfad =_fcda ._dfad ;_cdff ._eaf =_fcda ._eaf ;_cdff ._ged =_fcda ._ged ;_cdff ._bg =_fcda ._bg ;};func (_gea *Context )DrawArc (x ,y ,r ,angle1 ,angle2 float64 ){_gea .DrawEllipticalArc (x ,y ,r ,r ,angle1 ,angle2 );
|
|
|
|
};func (_debe *surfacePattern )ColorAt (x ,y int )_e .Color {_fga :=_debe ._gggcf .Bounds ();switch _debe ._caa {case _afaa :if y >=_fga .Dy (){return _e .Transparent ;};case _bgeb :if x >=_fga .Dx (){return _e .Transparent ;};case _eegb :if x >=_fga .Dx ()||y >=_fga .Dy (){return _e .Transparent ;
|
|
|
|
};};x =x %_fga .Dx ()+_fga .Min .X ;y =y %_fga .Dy ()+_fga .Min .Y ;return _debe ._gggcf .At (x ,y );};func (_edb *linearGradient )AddColorStop (offset float64 ,color _e .Color ){_edb ._bdfd =append (_edb ._bdfd ,stop {_cabc :offset ,_ffdf :color });_be .Sort (_edb ._bdfd );
|
|
|
|
};func (_ecg *Context )Scale (x ,y float64 ){_ecg ._abee =_ecg ._abee .Scale (x ,y )};func (_aec *Context )SetFillStyle (pattern _ac .Pattern ){if _ggb ,_fcc :=pattern .(*solidPattern );_fcc {_aec ._gg =_ggb ._bgcd ;};_aec ._gc =pattern ;};func _eebd (_dbgd string )(_bgb ,_fdcc ,_bacb ,_gggg int ){_dbgd =_g .TrimPrefix (_dbgd ,"\u0023");
|
|
|
|
_gggg =255;if len (_dbgd )==3{_bbaa :="\u00251\u0078\u0025\u0031\u0078\u0025\u0031x";_f .Sscanf (_dbgd ,_bbaa ,&_bgb ,&_fdcc ,&_bacb );_bgb |=_bgb <<4;_fdcc |=_fdcc <<4;_bacb |=_bacb <<4;};if len (_dbgd )==6{_cgea :="\u0025\u0030\u0032x\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";
|
|
|
|
_f .Sscanf (_dbgd ,_cgea ,&_bgb ,&_fdcc ,&_bacb );};if len (_dbgd )==8{_fdfad :="\u0025\u00302\u0078\u0025\u00302\u0078\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_f .Sscanf (_dbgd ,_fdfad ,&_bgb ,&_fdcc ,&_bacb ,&_gggg );};return ;};type linearGradient struct{_aag ,_fad ,_afe ,_fgg float64 ;
|
|
|
|
_bdfd stops ;};func (_egaf *Context )SetLineJoin (lineJoin _ac .LineJoin ){_egaf ._ede =lineJoin };func (_gcfg *Context )DrawImage (im _ae .Image ,x ,y int ){_gcfg .DrawImageAnchored (im ,x ,y ,0,0)};type stops []stop ;func (_ebe *Context )DrawImageAnchored (im _ae .Image ,x ,y int ,ax ,ay float64 ){_dbdb :=im .Bounds ().Size ();
|
|
|
|
x -=int (ax *float64 (_dbdb .X ));y -=int (ay *float64 (_dbdb .Y ));_ggc :=_ba .BiLinear ;_ebcg :=_ebe ._abee .Clone ().Translate (float64 (x ),float64 (y ));_dbf :=_cb .Aff3 {_ebcg [0],_ebcg [3],_ebcg [6],_ebcg [1],_ebcg [4],_ebcg [7]};if _ebe ._cff ==nil {_ggc .Transform (_ebe ._gbb ,_dbf ,im ,im .Bounds (),_ba .Over ,nil );
|
|
|
|
}else {_ggc .Transform (_ebe ._gbb ,_dbf ,im ,im .Bounds (),_ba .Over ,&_ba .Options {DstMask :_ebe ._cff ,DstMaskP :_ae .Point {}});};};func _ebda (_aace _fd .Point )_cg .Point26_6 {return _cg .Point26_6 {X :_accc (_aace .X ),Y :_accc (_aace .Y )}};func (_dcde *Context )DrawRoundedRectangle (x ,y ,w ,h ,r float64 ){_dac ,_bdf ,_bcfc ,_fag :=x ,x +r ,x +w -r ,x +w ;
|
|
|
|
_gae ,_ec ,_bbbg ,_agb :=y ,y +r ,y +h -r ,y +h ;_dcde .NewSubPath ();_dcde .MoveTo (_bdf ,_gae );_dcde .LineTo (_bcfc ,_gae );_dcde .DrawArc (_bcfc ,_ec ,r ,_egf (270),_egf (360));_dcde .LineTo (_fag ,_bbbg );_dcde .DrawArc (_bcfc ,_bbbg ,r ,_egf (0),_egf (90));
|
|
|
|
_dcde .LineTo (_bdf ,_agb );_dcde .DrawArc (_bdf ,_bbbg ,r ,_egf (90),_egf (180));_dcde .LineTo (_dac ,_ec );_dcde .DrawArc (_bdf ,_ec ,r ,_egf (180),_egf (270));_dcde .ClosePath ();};func (_bca *Context )SetFillRule (fillRule _ac .FillRule ){_bca ._fba =fillRule };
|
|
|
|
func (_bcf *Context )DrawLine (x1 ,y1 ,x2 ,y2 float64 ){_bcf .MoveTo (x1 ,y1 );_bcf .LineTo (x2 ,y2 )};func (_egd *Context )Transform (x ,y float64 )(_egb ,_fbab float64 ){return _egd ._abee .Transform (x ,y )};func (_fgd *Context )SetStrokeStyle (pattern _ac .Pattern ){_fgd ._dbc =pattern };
|
|
|
|
func (_dccf *Context )RotateAbout (angle ,x ,y float64 ){_dccf .Translate (x ,y );_dccf .Rotate (angle );_dccf .Translate (-x ,-y );};func _dfg (_fdbg ,_gdec ,_ccg ,_abda ,_edbe ,_ggce float64 )_ac .Gradient {_afab :=circle {_fdbg ,_gdec ,_ccg };_gaeg :=circle {_abda ,_edbe ,_ggce };
|
|
|
|
_egc :=circle {_abda -_fdbg ,_edbe -_gdec ,_ggce -_ccg };_fbcef :=_eea (_egc ._bge ,_egc ._beba ,-_egc ._cfaa ,_egc ._bge ,_egc ._beba ,_egc ._cfaa );var _egbf float64 ;if _fbcef !=0{_egbf =1.0/_fbcef ;};_beg :=-_afab ._cfaa ;_eagd :=&radialGradient {_fgeg :_afab ,_fbeb :_gaeg ,_ddc :_egc ,_aac :_fbcef ,_aedd :_egbf ,_egdf :_beg };
|
|
|
|
return _eagd ;};func (_bbdc *patternPainter )Paint (ss []_cc .Span ,done bool ){_cdb :=_bbdc ._ggdf .Bounds ();for _ ,_edc :=range ss {if _edc .Y < _cdb .Min .Y {continue ;};if _edc .Y >=_cdb .Max .Y {return ;};if _edc .X0 < _cdb .Min .X {_edc .X0 =_cdb .Min .X ;
|
|
|
|
};if _edc .X1 > _cdb .Max .X {_edc .X1 =_cdb .Max .X ;};if _edc .X0 >=_edc .X1 {continue ;};const _dbbe =1<<16-1;_fagb :=_edc .Y -_bbdc ._ggdf .Rect .Min .Y ;_bcg :=_edc .X0 -_bbdc ._ggdf .Rect .Min .X ;_dbcb :=(_edc .Y -_bbdc ._ggdf .Rect .Min .Y )*_bbdc ._ggdf .Stride +(_edc .X0 -_bbdc ._ggdf .Rect .Min .X )*4;
|
|
|
|
_fdcb :=_dbcb +(_edc .X1 -_edc .X0 )*4;for _adc ,_fgda :=_dbcb ,_bcg ;_adc < _fdcb ;_adc ,_fgda =_adc +4,_fgda +1{_cede :=_edc .Alpha ;if _bbdc ._efbb !=nil {_cede =_cede *uint32 (_bbdc ._efbb .AlphaAt (_fgda ,_fagb ).A )/255;if _cede ==0{continue ;};};
|
|
|
|
_cdfb :=_bbdc ._dde .ColorAt (_fgda ,_fagb );_bce ,_aaaf ,_ddb ,_eca :=_cdfb .RGBA ();_caea :=uint32 (_bbdc ._ggdf .Pix [_adc +0]);_bfb :=uint32 (_bbdc ._ggdf .Pix [_adc +1]);_efg :=uint32 (_bbdc ._ggdf .Pix [_adc +2]);_bfgg :=uint32 (_bbdc ._ggdf .Pix [_adc +3]);
|
|
|
|
_dbbg :=(_dbbe -(_eca *_cede /_dbbe ))*0x101;_bbdc ._ggdf .Pix [_adc +0]=uint8 ((_caea *_dbbg +_bce *_cede )/_dbbe >>8);_bbdc ._ggdf .Pix [_adc +1]=uint8 ((_bfb *_dbbg +_aaaf *_cede )/_dbbe >>8);_bbdc ._ggdf .Pix [_adc +2]=uint8 ((_efg *_dbbg +_ddb *_cede )/_dbbe >>8);
|
|
|
|
_bbdc ._ggdf .Pix [_adc +3]=uint8 ((_bfgg *_dbbg +_eca *_cede )/_dbbe >>8);};};};func _becb (_acbc ,_bfa _e .Color ,_agdcb float64 )_e .Color {_ebf ,_ccga ,_cecc ,_dbcae :=_acbc .RGBA ();_dage ,_fccd ,_aea ,_abcg :=_bfa .RGBA ();return _e .RGBA {_fcf (_ebf ,_dage ,_agdcb ),_fcf (_ccga ,_fccd ,_agdcb ),_fcf (_cecc ,_aea ,_agdcb ),_fcf (_dbcae ,_abcg ,_agdcb )};
|
|
|
|
};type patternPainter struct{_ggdf *_ae .RGBA ;_efbb *_ae .Alpha ;_dde _ac .Pattern ;};func _egf (_ffgf float64 )float64 {return _ffgf *_b .Pi /180};func (_ccb *Context )SetRGBA (r ,g ,b ,a float64 ){_ccb ._gg =_e .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};
|
|
|
|
_ccb .setFillAndStrokeColor (_ccb ._gg );};func NewContextForRGBA (im *_ae .RGBA )*Context {_dec :=im .Bounds ().Size ().X ;_fac :=im .Bounds ().Size ().Y ;return &Context {_dcb :_dec ,_fb :_fac ,_aba :_cc .NewRasterizer (_dec ,_fac ),_gbb :im ,_gg :_e .Transparent ,_gc :_cfa ,_dbc :_gad ,_daa :1,_fba :_ac .FillRuleWinding ,_abee :_fd .IdentityMatrix (),_ebd :_ac .NewTextState ()};
|
|
|
|
};const (_ecgcf repeatOp =iota ;_afaa ;_bgeb ;_eegb ;);func (_def *Context )drawString (_fgcc string ,_agdd _fg .Face ,_decf ,_ggff float64 ){_eddg :=&_fg .Drawer {Src :_ae .NewUniform (_def ._gg ),Face :_agdd ,Dot :_ebda (_fd .NewPoint (_decf ,_ggff ))};
|
|
|
|
_ccf :=rune (-1);for _ ,_ccae :=range _fgcc {if _ccf >=0{_eddg .Dot .X +=_eddg .Face .Kern (_ccf ,_ccae );};_faff ,_fdc ,_dea ,_gada ,_bddf :=_eddg .Face .Glyph (_eddg .Dot ,_ccae );if !_bddf {continue ;};_fdfa :=_faff .Sub (_faff .Min );_caeg :=_ae .NewRGBA (_fdfa );
|
|
|
|
_ba .DrawMask (_caeg ,_fdfa ,_eddg .Src ,_ae .Point {},_fdc ,_dea ,_ba .Over );var _gde *_ba .Options ;if _def ._cff !=nil {_gde =&_ba .Options {DstMask :_def ._cff ,DstMaskP :_ae .Point {}};};_agdc :=_def ._abee .Clone ().Translate (float64 (_faff .Min .X ),float64 (_faff .Min .Y ));
|
|
|
|
_fde :=_cb .Aff3 {_agdc [0],_agdc [3],_agdc [6],_agdc [1],_agdc [4],_agdc [7]};_ba .BiLinear .Transform (_def ._gbb ,_fde ,_caeg ,_fdfa ,_ba .Over ,_gde );_eddg .Dot .X +=_gada ;_ccf =_ccae ;};};func (_adg *Context )MeasureString (s string ,face _fg .Face )(_fdb ,_fbce float64 ){_agg :=&_fg .Drawer {Face :face };
|
|
|
|
_cde :=_agg .MeasureString (s );return float64 (_cde >>6),_adg ._ebd .Tf .Size ;};func _cge (_ag ,_gag ,_dad ,_df ,_gd ,_ea float64 )[]_fd .Point {_bb :=(_b .Hypot (_dad -_ag ,_df -_gag )+_b .Hypot (_gd -_dad ,_ea -_df ));_ca :=int (_bb +0.5);if _ca < 4{_ca =4;
|
|
|
|
};_db :=float64 (_ca )-1;_eac :=make ([]_fd .Point ,_ca );for _bd :=0;_bd < _ca ;_bd ++{_aeb :=float64 (_bd )/_db ;_gb ,_bba :=_cca (_ag ,_gag ,_dad ,_df ,_gd ,_ea ,_aeb );_eac [_bd ]=_fd .NewPoint (_gb ,_bba );};return _eac ;};func (_dee *Context )DrawEllipse (x ,y ,rx ,ry float64 ){_dee .NewSubPath ();
|
|
|
|
_dee .DrawEllipticalArc (x ,y ,rx ,ry ,0,2*_b .Pi );_dee .ClosePath ();};type repeatOp int ;func (_gf *Context )DrawStringAnchored (s string ,face _fg .Face ,x ,y ,ax ,ay float64 ){_dceb ,_cbc :=_gf .MeasureString (s ,face );_gf .drawString (s ,face ,x -ax *_dceb ,y +ay *_cbc );
|
|
|
|
};func (_bea *Context )setFillAndStrokeColor (_dbd _e .Color ){_bea ._gg =_dbd ;_bea ._gc =_feg (_dbd );_bea ._dbc =_feg (_dbd );};func (_bbb *Context )Width ()int {return _bbb ._dcb };func (_ecc *Context )SetMatrix (m _fd .Matrix ){_ecc ._abee =m };func (_cgb *Context )QuadraticTo (x1 ,y1 ,x2 ,y2 float64 ){if !_cgb ._bg {_cgb .MoveTo (x1 ,y1 );
|
|
|
|
};x1 ,y1 =_cgb .Transform (x1 ,y1 );x2 ,y2 =_cgb .Transform (x2 ,y2 );_edeb :=_fd .NewPoint (x1 ,y1 );_dfac :=_fd .NewPoint (x2 ,y2 );_geb :=_ebda (_edeb );_fge :=_ebda (_dfac );_cgb ._de .Add2 (_geb ,_fge );_cgb ._dfad .Add2 (_geb ,_fge );_cgb ._ged =_dfac ;
|
|
|
|
};func _gcc (_fdgf _ae .Image )*_ae .RGBA {_dbac :=_fdgf .Bounds ();_fgag :=_ae .NewRGBA (_dbac );_a .Draw (_fgag ,_dbac ,_fdgf ,_dbac .Min ,_a .Src );return _fgag ;};func NewContextForImage (im _ae .Image )*Context {return NewContextForRGBA (_gcc (im ))};
|
|
|
|
func _ccgc (_dda _cc .Path ,_fffd []float64 ,_acgc float64 )_cc .Path {return _fcfe (_abdce (_fdgec (_dda ),_fffd ,_acgc ));};func _fdgec (_fef _cc .Path )[][]_fd .Point {var _afc [][]_fd .Point ;var _acg []_fd .Point ;var _aaa ,_ffe float64 ;for _ddge :=0;
|
|
|
|
_ddge < len (_fef );{switch _fef [_ddge ]{case 0:if len (_acg )> 0{_afc =append (_afc ,_acg );_acg =nil ;};_cdee :=_fdea (_fef [_ddge +1]);_ggd :=_fdea (_fef [_ddge +2]);_acg =append (_acg ,_fd .NewPoint (_cdee ,_ggd ));_aaa ,_ffe =_cdee ,_ggd ;_ddge +=4;
|
|
|
|
case 1:_fgga :=_fdea (_fef [_ddge +1]);_bbg :=_fdea (_fef [_ddge +2]);_acg =append (_acg ,_fd .NewPoint (_fgga ,_bbg ));_aaa ,_ffe =_fgga ,_bbg ;_ddge +=4;case 2:_ceda :=_fdea (_fef [_ddge +1]);_ecb :=_fdea (_fef [_ddge +2]);_efd :=_fdea (_fef [_ddge +3]);
|
|
|
|
_dace :=_fdea (_fef [_ddge +4]);_becc :=_cge (_aaa ,_ffe ,_ceda ,_ecb ,_efd ,_dace );_acg =append (_acg ,_becc ...);_aaa ,_ffe =_efd ,_dace ;_ddge +=6;case 3:_cbe :=_fdea (_fef [_ddge +1]);_deb :=_fdea (_fef [_ddge +2]);_eafb :=_fdea (_fef [_ddge +3]);
|
|
|
|
_eeg :=_fdea (_fef [_ddge +4]);_agee :=_fdea (_fef [_ddge +5]);_bdfa :=_fdea (_fef [_ddge +6]);_daac :=_abe (_aaa ,_ffe ,_cbe ,_deb ,_eafb ,_eeg ,_agee ,_bdfa );_acg =append (_acg ,_daac ...);_aaa ,_ffe =_agee ,_bdfa ;_ddge +=8;default:_d .Log .Debug ("\u0057\u0041\u0052\u004e: \u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0070\u0061\u0074\u0068\u003a\u0020%\u0076",_fef );
|
|
|
|
return _afc ;};};if len (_acg )> 0{_afc =append (_afc ,_acg );};return _afc ;};type solidPattern struct{_bgcd _e .Color };func (_fec stops )Less (i ,j int )bool {return _fec [i ]._cabc < _fec [j ]._cabc };func _abdce (_cccb [][]_fd .Point ,_cgdf []float64 ,_cdfg float64 )[][]_fd .Point {var _bcfe [][]_fd .Point ;
|
|
|
|
if len (_cgdf )==0{return _cccb ;};if len (_cgdf )==1{_cgdf =append (_cgdf ,_cgdf [0]);};for _ ,_dab :=range _cccb {if len (_dab )< 2{continue ;};_ffg :=_dab [0];_ggge :=1;_bfc :=0;_gbc :=0.0;if _cdfg !=0{var _eeed float64 ;for _ ,_acgf :=range _cgdf {_eeed +=_acgf ;
|
|
|
|
};_cdfg =_b .Mod (_cdfg ,_eeed );if _cdfg < 0{_cdfg +=_eeed ;};for _gfe ,_faaa :=range _cgdf {_cdfg -=_faaa ;if _cdfg < 0{_bfc =_gfe ;_gbc =_faaa +_cdfg ;break ;};};};var _feb []_fd .Point ;_feb =append (_feb ,_ffg );for _ggge < len (_dab ){_bdfc :=_cgdf [_bfc ];
|
|
|
|
_gff :=_dab [_ggge ];_fbb :=_ffg .Distance (_gff );_cedc :=_bdfc -_gbc ;if _fbb > _cedc {_cee :=_cedc /_fbb ;_fged :=_ffg .Interpolate (_gff ,_cee );_feb =append (_feb ,_fged );if _bfc %2==0&&len (_feb )> 1{_bcfe =append (_bcfe ,_feb );};_feb =nil ;_feb =append (_feb ,_fged );
|
|
|
|
_gbc =0;_ffg =_fged ;_bfc =(_bfc +1)%len (_cgdf );}else {_feb =append (_feb ,_gff );_ffg =_gff ;_gbc +=_fbb ;_ggge ++;};};if _bfc %2==0&&len (_feb )> 1{_bcfe =append (_bcfe ,_feb );};};return _bcfe ;};func (_adf *Context )StrokePattern ()_ac .Pattern {return _adf ._dbc };
|
|
|
|
func (_fda *Context )AsMask ()*_ae .Alpha {_abcc :=_ae .NewAlpha (_fda ._gbb .Bounds ());_ba .Draw (_abcc ,_fda ._gbb .Bounds (),_fda ._gbb ,_ae .Point {},_ba .Src );return _abcc ;};func (_dgb *radialGradient )ColorAt (x ,y int )_e .Color {if len (_dgb ._abaa )==0{return _e .Transparent ;
|
|
|
|
};_eeb ,_cfde :=float64 (x )+0.5-_dgb ._fgeg ._bge ,float64 (y )+0.5-_dgb ._fgeg ._beba ;_dbca :=_eea (_eeb ,_cfde ,_dgb ._fgeg ._cfaa ,_dgb ._ddc ._bge ,_dgb ._ddc ._beba ,_dgb ._ddc ._cfaa );_bee :=_eea (_eeb ,_cfde ,-_dgb ._fgeg ._cfaa ,_eeb ,_cfde ,_dgb ._fgeg ._cfaa );
|
|
|
|
if _dgb ._aac ==0{if _dbca ==0{return _e .Transparent ;};_ceddg :=0.5*_bee /_dbca ;if _ceddg *_dgb ._ddc ._cfaa >=_dgb ._egdf {return _bdcg (_ceddg ,_dgb ._abaa );};return _e .Transparent ;};_fbaa :=_eea (_dbca ,_dgb ._aac ,0,_dbca ,-_bee ,0);if _fbaa >=0{_ggg :=_b .Sqrt (_fbaa );
|
|
|
|
_dgce :=(_dbca +_ggg )*_dgb ._aedd ;_gab :=(_dbca -_ggg )*_dgb ._aedd ;if _dgce *_dgb ._ddc ._cfaa >=_dgb ._egdf {return _bdcg (_dgce ,_dgb ._abaa );}else if _gab *_dgb ._ddc ._cfaa >=_dgb ._egdf {return _bdcg (_gab ,_dgb ._abaa );};};return _e .Transparent ;
|
|
|
|
};func (_fce *Context )Clip (){_fce .ClipPreserve ();_fce .ClearPath ()};func (_abfc *Context )FillPattern ()_ac .Pattern {return _abfc ._gc };func (_cab *Context )joiner ()_cc .Joiner {switch _cab ._ede {case _ac .LineJoinBevel :return _cc .BevelJoiner ;
|
|
|
|
case _ac .LineJoinRound :return _cc .RoundJoiner ;};return nil ;};func (_gdfc *Context )SetMask (mask *_ae .Alpha )error {if mask .Bounds ().Size ()!=_gdfc ._gbb .Bounds ().Size (){return _eg .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");
|
|
|
|
};_gdfc ._cff =mask ;return nil ;};type surfacePattern struct{_gggcf _ae .Image ;_caa repeatOp ;};func (_dfe *Context )LineTo (x ,y float64 ){if !_dfe ._bg {_dfe .MoveTo (x ,y );}else {x ,y =_dfe .Transform (x ,y );_gac :=_fd .NewPoint (x ,y );_geg :=_ebda (_gac );
|
|
|
|
_dfe ._de .Add1 (_geg );_dfe ._dfad .Add1 (_geg );_dfe ._ged =_gac ;};};func _cca (_bec ,_ga ,_ge ,_fe ,_ce ,_ed ,_fa float64 )(_fc ,_beb float64 ){_da :=1-_fa ;_ef :=_da *_da ;_fca :=2*_da *_fa ;_ced :=_fa *_fa ;_fc =_ef *_bec +_fca *_ge +_ced *_ce ;_beb =_ef *_ga +_fca *_fe +_ced *_ed ;
|
|
|
|
return ;};func (_ege *Context )DrawPoint (x ,y ,r float64 ){_ege .Push ();_cfe ,_bac :=_ege .Transform (x ,y );_ege .Identity ();_ege .DrawCircle (_cfe ,_bac ,r );_ege .Pop ();};func (_fdg *Context )SetDashOffset (offset float64 ){_fdg ._accg =offset };
|
|
|
|
func (_ddg *Context )Clear (){_gcg :=_ae .NewUniform (_ddg ._gg );_ba .Draw (_ddg ._gbb ,_ddg ._gbb .Bounds (),_gcg ,_ae .Point {},_ba .Src );};func (_dcce *Context )SetRGBA255 (r ,g ,b ,a int ){_dcce ._gg =_e .NRGBA {uint8 (r ),uint8 (g ),uint8 (b ),uint8 (a )};
|
|
|
|
_dcce .setFillAndStrokeColor (_dcce ._gg );};func (_bdd *Context )drawRegularPolygon (_gdb int ,_eddf ,_bef ,_bed ,_ebce float64 ){_bad :=2*_b .Pi /float64 (_gdb );_ebce -=_b .Pi /2;if _gdb %2==0{_ebce +=_bad /2;};_bdd .NewSubPath ();for _abag :=0;_abag < _gdb ;
|
|
|
|
_abag ++{_cdd :=_ebce +_bad *float64 (_abag );_bdd .LineTo (_eddf +_bed *_b .Cos (_cdd ),_bef +_bed *_b .Sin (_cdd ));};_bdd .ClosePath ();};func (_dgbg *radialGradient )AddColorStop (offset float64 ,color _e .Color ){_dgbg ._abaa =append (_dgbg ._abaa ,stop {_cabc :offset ,_ffdf :color });
|
|
|
|
_be .Sort (_dgbg ._abaa );};func (_gbdf *Context )InvertMask (){if _gbdf ._cff ==nil {_gbdf ._cff =_ae .NewAlpha (_gbdf ._gbb .Bounds ());}else {for _ffa ,_effd :=range _gbdf ._cff .Pix {_gbdf ._cff .Pix [_ffa ]=255-_effd ;};};};func (_cda *Context )Stroke (){_cda .StrokePreserve ();
|
|
|
|
_cda .ClearPath ()};func _dcee (_dcbf _ae .Image ,_aaad repeatOp )_ac .Pattern {return &surfacePattern {_gggcf :_dcbf ,_caa :_aaad };};func (_bebg *Context )ClipPreserve (){_dccg :=_ae .NewAlpha (_ae .Rect (0,0,_bebg ._dcb ,_bebg ._fb ));_gadc :=_cc .NewAlphaOverPainter (_dccg );
|
|
|
|
_bebg .fill (_gadc );if _bebg ._cff ==nil {_bebg ._cff =_dccg ;}else {_abc :=_ae .NewAlpha (_ae .Rect (0,0,_bebg ._dcb ,_bebg ._fb ));_ba .DrawMask (_abc ,_abc .Bounds (),_dccg ,_ae .Point {},_bebg ._cff ,_ae .Point {},_ba .Over );_bebg ._cff =_abc ;};
|
|
|
|
};func (_fcdb *Context )fill (_cbg _cc .Painter ){_bab :=_fcdb ._dfad ;if _fcdb ._bg {_bab =make (_cc .Path ,len (_fcdb ._dfad ));copy (_bab ,_fcdb ._dfad );_bab .Add1 (_ebda (_fcdb ._eaf ));};_gga :=_fcdb ._aba ;_gga .UseNonZeroWinding =_fcdb ._fba ==_ac .FillRuleWinding ;
|
|
|
|
_gga .Clear ();_gga .AddPath (_bab );_gga .Rasterize (_cbg );};func (_degc *Context )ScaleAbout (sx ,sy ,x ,y float64 ){_degc .Translate (x ,y );_degc .Scale (sx ,sy );_degc .Translate (-x ,-y );};func (_aad *Context )Matrix ()_fd .Matrix {return _aad ._abee };
|
|
|
|
func (_bgg *Context )ShearAbout (sx ,sy ,x ,y float64 ){_bgg .Translate (x ,y );_bgg .Shear (sx ,sy );_bgg .Translate (-x ,-y );};func (_fagf *Context )Translate (x ,y float64 ){_fagf ._abee =_fagf ._abee .Translate (x ,y )};func (_ffb stops )Swap (i ,j int ){_ffb [i ],_ffb [j ]=_ffb [j ],_ffb [i ]};
|
|
|
|
func (_feeg *Context )TextState ()*_ac .TextState {return &_feeg ._ebd };func _fdea (_edbb _cg .Int26_6 )float64 {const _cbgf ,_fed =6,1<<6-1;if _edbb >=0{return float64 (_edbb >>_cbgf )+float64 (_edbb &_fed )/64;};_edbb =-_edbb ;if _edbb >=0{return -(float64 (_edbb >>_cbgf )+float64 (_edbb &_fed )/64);
|
|
|
|
};return 0;};func (_gbdb *Context )StrokePreserve (){var _gebf _cc .Painter ;if _gbdb ._cff ==nil {if _afb ,_gcf :=_gbdb ._dbc .(*solidPattern );_gcf {_addg :=_cc .NewRGBAPainter (_gbdb ._gbb );_addg .SetColor (_afb ._bgcd );_gebf =_addg ;};};if _gebf ==nil {_gebf =_ebdee (_gbdb ._gbb ,_gbdb ._cff ,_gbdb ._dbc );
|
|
|
|
};_gbdb .stroke (_gebf );};
|