mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-02 22:17:06 +08:00
106 lines
27 KiB
Go
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 (_ef "errors";_gf "fmt";_bc "github.com/golang/freetype/raster";_bb "github.com/unidoc/unipdf/v3/common";_d "github.com/unidoc/unipdf/v3/internal/transform";_ca "github.com/unidoc/unipdf/v3/render/internal/context";_db "golang.org/x/image/draw";
|
|
_cc "golang.org/x/image/font";_a "golang.org/x/image/math/f64";_cd "golang.org/x/image/math/fixed";_fb "image";_gg "image/color";_f "image/draw";_g "math";_b "sort";_e "strings";);func (_cae *Context )QuadraticTo (x1 ,y1 ,x2 ,y2 float64 ){if !_cae ._baa {_cae .MoveTo (x1 ,y1 );
|
|
};x1 ,y1 =_cae .Transform (x1 ,y1 );x2 ,y2 =_cae .Transform (x2 ,y2 );_aab :=_d .NewPoint (x1 ,y1 );_bbbb :=_d .NewPoint (x2 ,y2 );_efb :=_fcec (_aab );_cacf :=_fcec (_bbbb );_cae ._cab .Add2 (_efb ,_cacf );_cae ._gcg .Add2 (_efb ,_cacf );_cae ._cfde =_bbbb ;
|
|
};func NewContextForImage (im _fb .Image )*Context {return NewContextForRGBA (_agbd (im ))};func (_abc *Context )FillPreserve (){var _bfc _bc .Painter ;if _abc ._ccc ==nil {if _gda ,_aeb :=_abc ._aga .(*solidPattern );_aeb {_abd :=_bc .NewRGBAPainter (_abc ._cdfg );
|
|
_abd .SetColor (_gda ._dbfd );_bfc =_abd ;};};if _bfc ==nil {_bfc =_dfc (_abc ._cdfg ,_abc ._ccc ,_abc ._aga );};_abc .fill (_bfc );};func (_dcb *Context )drawRegularPolygon (_bacd int ,_gagf ,_dbed ,_acc ,_agag float64 ){_eec :=2*_g .Pi /float64 (_bacd );
|
|
_agag -=_g .Pi /2;if _bacd %2==0{_agag +=_eec /2;};_dcb .NewSubPath ();for _fee :=0;_fee < _bacd ;_fee ++{_ggbe :=_agag +_eec *float64 (_fee );_dcb .LineTo (_gagf +_acc *_g .Cos (_ggbe ),_dbed +_acc *_g .Sin (_ggbe ));};_dcb .ClosePath ();};type surfacePattern struct{_aebf _fb .Image ;
|
|
_ebbad repeatOp ;};func (_ggcd *Context )Pop (){_dafe :=*_ggcd ;_ccce :=_ggcd ._fad ;_baaa :=_ccce [len (_ccce )-1];*_ggcd =*_baaa ;_ggcd ._cab =_dafe ._cab ;_ggcd ._gcg =_dafe ._gcg ;_ggcd ._bcg =_dafe ._bcg ;_ggcd ._cfde =_dafe ._cfde ;_ggcd ._baa =_dafe ._baa ;
|
|
};func (_ebb *Context )drawString (_fcb string ,_aac _cc .Face ,_dga ,_cfdd float64 ){_cecd :=&_cc .Drawer {Src :_fb .NewUniform (_ebb ._ggd ),Face :_aac ,Dot :_fcec (_d .NewPoint (_dga ,_cfdd ))};_dcc :=rune (-1);for _ ,_edc :=range _fcb {if _dcc >=0{_cecd .Dot .X +=_cecd .Face .Kern (_dcc ,_edc );
|
|
};_eebgb ,_fff ,_eag ,_dac ,_de :=_cecd .Face .Glyph (_cecd .Dot ,_edc );if !_de {continue ;};_bab :=_eebgb .Sub (_eebgb .Min );_bgab :=_fb .NewRGBA (_bab );_db .DrawMask (_bgab ,_bab ,_cecd .Src ,_fb .Point {},_fff ,_eag ,_db .Over );var _afcb *_db .Options ;
|
|
if _ebb ._ccc !=nil {_afcb =&_db .Options {DstMask :_ebb ._ccc ,DstMaskP :_fb .Point {}};};_ecg :=_ebb ._ggc .Clone ().Translate (float64 (_eebgb .Min .X ),float64 (_eebgb .Min .Y ));_bcgc :=_a .Aff3 {_ecg [0],_ecg [3],_ecg [6],_ecg [1],_ecg [4],_ecg [7]};
|
|
_db .BiLinear .Transform (_ebb ._cdfg ,_bcgc ,_bgab ,_bab ,_db .Over ,_afcb );_cecd .Dot .X +=_dac ;_dcc =_edc ;};};func (_cba *Context )SetMask (mask *_fb .Alpha )error {if mask .Bounds ().Size ()!=_cba ._cdfg .Bounds ().Size (){return _ef .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");
|
|
};_cba ._ccc =mask ;return nil ;};func (_abf *Context )SetStrokeRGBA (r ,g ,b ,a float64 ){_bdg :=_gg .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_abf ._faad =_egce (_bdg );};func (_fbfb *Context )Fill (){_fbfb .FillPreserve ();
|
|
_fbfb .ClearPath ()};func (_fef *radialGradient )ColorAt (x ,y int )_gg .Color {if len (_fef ._accc )==0{return _gg .Transparent ;};_dbad ,_eacf :=float64 (x )+0.5-_fef ._cadd ._gefe ,float64 (y )+0.5-_fef ._cadd ._eafd ;_beb :=_ffa (_dbad ,_eacf ,_fef ._cadd ._dea ,_fef ._gbc ._gefe ,_fef ._gbc ._eafd ,_fef ._gbc ._dea );
|
|
_dgd :=_ffa (_dbad ,_eacf ,-_fef ._cadd ._dea ,_dbad ,_eacf ,_fef ._cadd ._dea );if _fef ._gaag ==0{if _beb ==0{return _gg .Transparent ;};_ggfd :=0.5*_dgd /_beb ;if _ggfd *_fef ._gbc ._dea >=_fef ._fbc {return _fffg (_ggfd ,_fef ._accc );};return _gg .Transparent ;
|
|
};_acdg :=_ffa (_beb ,_fef ._gaag ,0,_beb ,-_dgd ,0);if _acdg >=0{_fda :=_g .Sqrt (_acdg );_cgg :=(_beb +_fda )*_fef ._dgaa ;_geeg :=(_beb -_fda )*_fef ._dgaa ;if _cgg *_fef ._gbc ._dea >=_fef ._fbc {return _fffg (_cgg ,_fef ._accc );}else if _geeg *_fef ._gbc ._dea >=_fef ._fbc {return _fffg (_geeg ,_fef ._accc );
|
|
};};return _gg .Transparent ;};func (_fag *Context )ClosePath (){if _fag ._baa {_cgc :=_fcec (_fag ._bcg );_fag ._cab .Add1 (_cgc );_fag ._gcg .Add1 (_cgc );_fag ._cfde =_fag ._bcg ;};};func _ec (_faa ,_egb ,_cb ,_fbd ,_acd ,_bba ,_aad ,_eed float64 )[]_d .Point {_bd :=(_g .Hypot (_cb -_faa ,_fbd -_egb )+_g .Hypot (_acd -_cb ,_bba -_fbd )+_g .Hypot (_aad -_acd ,_eed -_bba ));
|
|
_ga :=int (_bd +0.5);if _ga < 4{_ga =4;};_fbf :=float64 (_ga )-1;_cfd :=make ([]_d .Point ,_ga );for _ge :=0;_ge < _ga ;_ge ++{_ae :=float64 (_ge )/_fbf ;_ed ,_eca :=_fd (_faa ,_egb ,_cb ,_fbd ,_acd ,_bba ,_aad ,_eed ,_ae );_cfd [_ge ]=_d .NewPoint (_ed ,_eca );
|
|
};return _cfd ;};func (_ggf *Context )SetLineJoin (lineJoin _ca .LineJoin ){_ggf ._gac =lineJoin };func (_egef *Context )SetRGBA (r ,g ,b ,a float64 ){_egef ._ggd =_gg .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_egef .setFillAndStrokeColor (_egef ._ggd );
|
|
};func (_ce *Context )SetColor (c _gg .Color ){_ce .setFillAndStrokeColor (c )};func (_aaa *radialGradient )AddColorStop (offset float64 ,color _gg .Color ){_aaa ._accc =append (_aaa ._accc ,stop {_gcgb :offset ,_eeef :color });_b .Sort (_aaa ._accc );
|
|
};func (_gfca *Context )Shear (x ,y float64 ){_gfca ._ggc .Shear (x ,y )};func (_feg *Context )CubicTo (x1 ,y1 ,x2 ,y2 ,x3 ,y3 float64 ){if !_feg ._baa {_feg .MoveTo (x1 ,y1 );};_gcf ,_feab :=_feg ._cfde .X ,_feg ._cfde .Y ;x1 ,y1 =_feg .Transform (x1 ,y1 );
|
|
x2 ,y2 =_feg .Transform (x2 ,y2 );x3 ,y3 =_feg .Transform (x3 ,y3 );_gaga :=_ec (_gcf ,_feab ,x1 ,y1 ,x2 ,y2 ,x3 ,y3 );_adb :=_fcec (_feg ._cfde );for _ ,_cgf :=range _gaga [1:]{_ecb :=_fcec (_cgf );if _ecb ==_adb {continue ;};_adb =_ecb ;_feg ._cab .Add1 (_ecb );
|
|
_feg ._gcg .Add1 (_ecb );_feg ._cfde =_cgf ;};};func (_bad *Context )DrawArc (x ,y ,r ,angle1 ,angle2 float64 ){_bad .DrawEllipticalArc (x ,y ,r ,r ,angle1 ,angle2 );};func (_bbfa *Context )DrawCircle (x ,y ,r float64 ){_bbfa .NewSubPath ();_bbfa .DrawEllipticalArc (x ,y ,r ,r ,0,2*_g .Pi );
|
|
_bbfa .ClosePath ();};func (_fegb *Context )NewSubPath (){if _fegb ._baa {_fegb ._gcg .Add1 (_fcec (_fegb ._bcg ));};_fegb ._baa =false ;};func (_gad *Context )Image ()_fb .Image {return _gad ._cdfg };func (_aec *Context )ClipPreserve (){_bac :=_fb .NewAlpha (_fb .Rect (0,0,_aec ._eac ,_aec ._ggaa ));
|
|
_ccac :=_bc .NewAlphaOverPainter (_bac );_aec .fill (_ccac );if _aec ._ccc ==nil {_aec ._ccc =_bac ;}else {_eaf :=_fb .NewAlpha (_fb .Rect (0,0,_aec ._eac ,_aec ._ggaa ));_db .DrawMask (_eaf ,_eaf .Bounds (),_bac ,_fb .Point {},_aec ._ccc ,_fb .Point {},_db .Over );
|
|
_aec ._ccc =_eaf ;};};func _aba (_fcad ,_eeac uint32 ,_edb float64 )uint8 {return uint8 (int32 (float64 (_fcad )*(1.0-_edb )+float64 (_eeac )*_edb )>>8);};func _egce (_cece _gg .Color )_ca .Pattern {return &solidPattern {_dbfd :_cece }};func (_fgg *Context )SetPixel (x ,y int ){_fgg ._cdfg .Set (x ,y ,_fgg ._ggd )};
|
|
func (_gcd *Context )Translate (x ,y float64 ){_gcd ._ggc =_gcd ._ggc .Translate (x ,y )};func _dfc (_egaf *_fb .RGBA ,_gged *_fb .Alpha ,_agfa _ca .Pattern )*patternPainter {return &patternPainter {_egaf ,_gged ,_agfa };};func (_dc *Context )LineWidth ()float64 {return _dc ._aae };
|
|
func _ffa (_bcff ,_dgad ,_bde ,_egab ,_gba ,_ggbf float64 )float64 {return _bcff *_egab +_dgad *_gba +_bde *_ggbf ;};func (_daf *Context )fill (_beg _bc .Painter ){_efg :=_daf ._gcg ;if _daf ._baa {_efg =make (_bc .Path ,len (_daf ._gcg ));copy (_efg ,_daf ._gcg );
|
|
_efg .Add1 (_fcec (_daf ._bcg ));};_bbf :=_daf ._eb ;_bbf .UseNonZeroWinding =_daf ._gag ==_ca .FillRuleWinding ;_bbf .Clear ();_bbf .AddPath (_efg );_bbf .Rasterize (_beg );};func (_bbeb *Context )TextState ()*_ca .TextState {return &_bbeb ._ege };func (_efa *Context )setFillAndStrokeColor (_eba _gg .Color ){_efa ._ggd =_eba ;
|
|
_efa ._aga =_egce (_eba );_efa ._faad =_egce (_eba );};func NewContext (width ,height int )*Context {return NewContextForRGBA (_fb .NewRGBA (_fb .Rect (0,0,width ,height )));};func _fd (_fa ,_fe ,_fcd ,_bee ,_ag ,_efd ,_cf ,_fea ,_cad float64 )(_gca ,_bgf float64 ){_fbg :=1-_cad ;
|
|
_ab :=_fbg *_fbg *_fbg ;_gfd :=3*_fbg *_fbg *_cad ;_dbf :=3*_fbg *_cad *_cad ;_eebg :=_cad *_cad *_cad ;_gca =_ab *_fa +_gfd *_fcd +_dbf *_ag +_eebg *_cf ;_bgf =_ab *_fe +_gfd *_bee +_dbf *_efd +_eebg *_fea ;return ;};func (_ced *Context )StrokePattern ()_ca .Pattern {return _ced ._faad };
|
|
func (_dce *Context )Matrix ()_d .Matrix {return _dce ._ggc };func _fdag (_bgd float64 )_cd .Int26_6 {return _cd .Int26_6 (_bgd *64)};func (_ceb *Context )MoveTo (x ,y float64 ){if _ceb ._baa {_ceb ._gcg .Add1 (_fcec (_ceb ._bcg ));};x ,y =_ceb .Transform (x ,y );
|
|
_dba :=_d .NewPoint (x ,y );_afc :=_fcec (_dba );_ceb ._cab .Start (_afc );_ceb ._gcg .Start (_afc );_ceb ._bcg =_dba ;_ceb ._cfde =_dba ;_ceb ._baa =true ;};func (_fbfe *Context )capper ()_bc .Capper {switch _fbfe ._fg {case _ca .LineCapButt :return _bc .ButtCapper ;
|
|
case _ca .LineCapRound :return _bc .RoundCapper ;case _ca .LineCapSquare :return _bc .SquareCapper ;};return nil ;};func (_dae stops )Len ()int {return len (_dae )};func NewContextForRGBA (im *_fb .RGBA )*Context {_da :=im .Bounds ().Size ().X ;_beeb :=im .Bounds ().Size ().Y ;
|
|
return &Context {_eac :_da ,_ggaa :_beeb ,_eb :_bc .NewRasterizer (_da ,_beeb ),_cdfg :im ,_ggd :_gg .Transparent ,_aga :_ade ,_faad :_cde ,_aae :1,_gag :_ca .FillRuleWinding ,_ggc :_d .IdentityMatrix (),_ege :_ca .NewTextState ()};};func (_ddd *Context )DrawPoint (x ,y ,r float64 ){_ddd .Push ();
|
|
_aaf ,_bcf :=_ddd .Transform (x ,y );_ddd .Identity ();_ddd .DrawCircle (_aaf ,_bcf ,r );_ddd .Pop ();};func _fffg (_acg float64 ,_efad stops )_gg .Color {if _acg <=0.0||len (_efad )==1{return _efad [0]._eeef ;};_efae :=_efad [len (_efad )-1];if _acg >=_efae ._gcgb {return _efae ._eeef ;
|
|
};for _ebba ,_beegb :=range _efad [1:]{if _acg < _beegb ._gcgb {_acg =(_acg -_efad [_ebba ]._gcgb )/(_beegb ._gcgb -_efad [_ebba ]._gcgb );return _eead (_efad [_ebba ]._eeef ,_beegb ._eeef ,_acg );};};return _efae ._eeef ;};func _fcec (_adab _d .Point )_cd .Point26_6 {return _cd .Point26_6 {X :_fdag (_adab .X ),Y :_fdag (_adab .Y )}};
|
|
func (_cg *Context )SetLineCap (lineCap _ca .LineCap ){_cg ._fg =lineCap };func (_aca *Context )AsMask ()*_fb .Alpha {_ddc :=_fb .NewAlpha (_aca ._cdfg .Bounds ());_db .Draw (_ddc ,_aca ._cdfg .Bounds (),_aca ._cdfg ,_fb .Point {},_db .Src );return _ddc ;
|
|
};func (_beeg *Context )Stroke (){_beeg .StrokePreserve ();_beeg .ClearPath ()};func (_cfc stops )Swap (i ,j int ){_cfc [i ],_cfc [j ]=_cfc [j ],_cfc [i ]};func (_cga *Context )SetRGB255 (r ,g ,b int ){_cga .SetRGBA255 (r ,g ,b ,255)};func (_acad *Context )MeasureString (s string ,face _cc .Face )(_cgdb ,_eea float64 ){_dbg :=&_cc .Drawer {Face :face };
|
|
_edg :=_dbg .MeasureString (s );return float64 (_edg >>6),_acad ._ege .Tf .Size ;};func (_gd *Context )SetStrokeStyle (pattern _ca .Pattern ){_gd ._faad =pattern };func _deg (_fac _cd .Int26_6 )float64 {const _fcf ,_bgae =6,1<<6-1;if _fac >=0{return float64 (_fac >>_fcf )+float64 (_fac &_bgae )/64;
|
|
};_fac =-_fac ;if _fac >=0{return -(float64 (_fac >>_fcf )+float64 (_fac &_bgae )/64);};return 0;};func (_gde *linearGradient )ColorAt (x ,y int )_gg .Color {if len (_gde ._agg )==0{return _gg .Transparent ;};_acae ,_aef :=float64 (x ),float64 (y );_dcf ,_bfgg ,_abde ,_bdgg :=_gde ._gef ,_gde ._acec ,_gde ._fcg ,_gde ._cdee ;
|
|
_bcfe ,_gfcg :=_abde -_dcf ,_bdgg -_bfgg ;if _gfcg ==0&&_bcfe !=0{return _fffg ((_acae -_dcf )/_bcfe ,_gde ._agg );};if _bcfe ==0&&_gfcg !=0{return _fffg ((_aef -_bfgg )/_gfcg ,_gde ._agg );};_efaa :=_bcfe *(_acae -_dcf )+_gfcg *(_aef -_bfgg );if _efaa < 0{return _gde ._agg [0]._eeef ;
|
|
};_caad :=_g .Hypot (_bcfe ,_gfcg );_gcbb :=((_acae -_dcf )*-_gfcg +(_aef -_bfgg )*_bcfe )/(_caad *_caad );_gcbe ,_eab :=_dcf +_gcbb *-_gfcg ,_bfgg +_gcbb *_bcfe ;_ebd :=_g .Hypot (_acae -_gcbe ,_aef -_eab )/_caad ;return _fffg (_ebd ,_gde ._agg );};func _aebg (_gbe ,_cbc ,_gadb ,_dca float64 )_ca .Gradient {_accd :=&linearGradient {_gef :_gbe ,_acec :_cbc ,_fcg :_gadb ,_cdee :_dca };
|
|
return _accd ;};func (_bf *Context )LineTo (x ,y float64 ){if !_bf ._baa {_bf .MoveTo (x ,y );}else {x ,y =_bf .Transform (x ,y );_bgb :=_d .NewPoint (x ,y );_geb :=_fcec (_bgb );_bf ._cab .Add1 (_geb );_bf ._gcg .Add1 (_geb );_bf ._cfde =_bgb ;};};type radialGradient struct{_cadd ,_ffc ,_gbc circle ;
|
|
_gaag ,_dgaa float64 ;_fbc float64 ;_accc stops ;};func _eead (_gfg ,_cfa _gg .Color ,_dbfb float64 )_gg .Color {_egfd ,_ffcd ,_dad ,_gcc :=_gfg .RGBA ();_dceb ,_gbb ,_fdc ,_adg :=_cfa .RGBA ();return _gg .RGBA {_aba (_egfd ,_dceb ,_dbfb ),_aba (_ffcd ,_gbb ,_dbfb ),_aba (_dad ,_fdc ,_dbfb ),_aba (_gcc ,_adg ,_dbfb )};
|
|
};func _dff (_cfbe [][]_d .Point )_bc .Path {var _fefb _bc .Path ;for _ ,_gbbf :=range _cfbe {var _egfg _cd .Point26_6 ;for _edfb ,_fdg :=range _gbbf {_bbg :=_fcec (_fdg );if _edfb ==0{_fefb .Start (_bbg );}else {_bbfcf :=_bbg .X -_egfg .X ;_abegb :=_bbg .Y -_egfg .Y ;
|
|
if _bbfcf < 0{_bbfcf =-_bbfcf ;};if _abegb < 0{_abegb =-_abegb ;};if _bbfcf +_abegb > 8{_fefb .Add1 (_bbg );};};_egfg =_bbg ;};};return _fefb ;};func _aade (_ggdb float64 )float64 {return _ggdb *_g .Pi /180};func (_bgbg *Context )ScaleAbout (sx ,sy ,x ,y float64 ){_bgbg .Translate (x ,y );
|
|
_bgbg .Scale (sx ,sy );_bgbg .Translate (-x ,-y );};func (_gaa *Context )RotateAbout (angle ,x ,y float64 ){_gaa .Translate (x ,y );_gaa .Rotate (angle );_gaa .Translate (-x ,-y );};var (_ade =_egce (_gg .White );_cde =_egce (_gg .Black ););func (_gge *Context )DrawString (s string ,face _cc .Face ,x ,y float64 ){_gge .DrawStringAnchored (s ,face ,x ,y ,0,0);
|
|
};func (_bdc *Context )DrawEllipticalArc (x ,y ,rx ,ry ,angle1 ,angle2 float64 ){const _bade =16;for _ega :=0;_ega < _bade ;_ega ++{_caeg :=float64 (_ega +0)/_bade ;_eaff :=float64 (_ega +1)/_bade ;_dbe :=angle1 +(angle2 -angle1 )*_caeg ;_cdff :=angle1 +(angle2 -angle1 )*_eaff ;
|
|
_gfe :=x +rx *_g .Cos (_dbe );_bfb :=y +ry *_g .Sin (_dbe );_bfce :=x +rx *_g .Cos ((_dbe +_cdff )/2);_cbf :=y +ry *_g .Sin ((_dbe +_cdff )/2);_ff :=x +rx *_g .Cos (_cdff );_aebd :=y +ry *_g .Sin (_cdff );_bdcg :=2*_bfce -_gfe /2-_ff /2;_gfa :=2*_cbf -_bfb /2-_aebd /2;
|
|
if _ega ==0{if _bdc ._baa {_bdc .LineTo (_gfe ,_bfb );}else {_bdc .MoveTo (_gfe ,_bfb );};};_bdc .QuadraticTo (_bdcg ,_gfa ,_ff ,_aebd );};};func _ecag (_fgb string )(_effe ,_fced ,_bgfc ,_gaaf int ){_fgb =_e .TrimPrefix (_fgb ,"\u0023");_gaaf =255;if len (_fgb )==3{_dgf :="\u00251\u0078\u0025\u0031\u0078\u0025\u0031x";
|
|
_gf .Sscanf (_fgb ,_dgf ,&_effe ,&_fced ,&_bgfc );_effe |=_effe <<4;_fced |=_fced <<4;_bgfc |=_bgfc <<4;};if len (_fgb )==6{_eecg :="\u0025\u0030\u0032x\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_gf .Sscanf (_fgb ,_eecg ,&_effe ,&_fced ,&_bgfc );
|
|
};if len (_fgb )==8{_abbg :="\u0025\u00302\u0078\u0025\u00302\u0078\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_gf .Sscanf (_fgb ,_abbg ,&_effe ,&_fced ,&_bgfc ,&_gaaf );};return ;};func (_gfc *Context )SetFillStyle (pattern _ca .Pattern ){if _adf ,_eacc :=pattern .(*solidPattern );
|
|
_eacc {_gfc ._ggd =_adf ._dbfd ;};_gfc ._aga =pattern ;};func (_febg *Context )Clear (){_bag :=_fb .NewUniform (_febg ._ggd );_db .Draw (_febg ._cdfg ,_febg ._cdfg .Bounds (),_bag ,_fb .Point {},_db .Src );};func (_ggfa *Context )Identity (){_ggfa ._ggc =_d .IdentityMatrix ()};
|
|
func (_gaf *Context )InvertMask (){if _gaf ._ccc ==nil {_gaf ._ccc =_fb .NewAlpha (_gaf ._cdfg .Bounds ());}else {for _bff ,_dgc :=range _gaf ._ccc .Pix {_gaf ._ccc .Pix [_bff ]=255-_dgc ;};};};func (_bbb *Context )SetFillRule (fillRule _ca .FillRule ){_bbb ._gag =fillRule };
|
|
func (_gbd *Context )SetDash (dashes ...float64 ){_gbd ._agf =dashes };func (_bae *Context )DrawEllipse (x ,y ,rx ,ry float64 ){_bae .NewSubPath ();_bae .DrawEllipticalArc (x ,y ,rx ,ry ,0,2*_g .Pi );_bae .ClosePath ();};func _ad (_cdf ,_ba ,_ac ,_cca ,_fbe ,_gga ,_gc float64 )(_af ,_cda float64 ){_ee :=1-_gc ;
|
|
_eg :=_ee *_ee ;_gce :=2*_ee *_gc ;_bbe :=_gc *_gc ;_af =_eg *_cdf +_gce *_ac +_bbe *_fbe ;_cda =_eg *_ba +_gce *_cca +_bbe *_gga ;return ;};type stop struct{_gcgb float64 ;_eeef _gg .Color ;};type linearGradient struct{_gef ,_acec ,_fcg ,_cdee float64 ;
|
|
_agg stops ;};func (_fgd *Context )joiner ()_bc .Joiner {switch _fgd ._gac {case _ca .LineJoinBevel :return _bc .BevelJoiner ;case _ca .LineJoinRound :return _bc .RoundJoiner ;};return nil ;};const (_acag repeatOp =iota ;_fgf ;_eccd ;_def ;);func (_gagg *Context )Push (){_cdb :=*_gagg ;
|
|
_gagg ._fad =append (_gagg ._fad ,&_cdb )};func (_cac *Context )FillPattern ()_ca .Pattern {return _cac ._aga };func _agbd (_fbec _fb .Image )*_fb .RGBA {_aebfe :=_fbec .Bounds ();_afa :=_fb .NewRGBA (_aebfe );_f .Draw (_afa ,_aebfe ,_fbec ,_aebfe .Min ,_f .Src );
|
|
return _afa ;};func (_cbaf *Context )DrawRectangle (x ,y ,w ,h float64 ){_cbaf .NewSubPath ();_cbaf .MoveTo (x ,y );_cbaf .LineTo (x +w ,y );_cbaf .LineTo (x +w ,y +h );_cbaf .LineTo (x ,y +h );_cbaf .ClosePath ();};func (_gadg *Context )ShearAbout (sx ,sy ,x ,y float64 ){_gadg .Translate (x ,y );
|
|
_gadg .Shear (sx ,sy );_gadg .Translate (-x ,-y );};func (_bcfc *Context )DrawStringAnchored (s string ,face _cc .Face ,x ,y ,ax ,ay float64 ){_fdf ,_fbfa :=_bcfc .MeasureString (s ,face );_bcfc .drawString (s ,face ,x -ax *_fdf ,y +ay *_fbfa );};func (_feb *Context )ClearPath (){_feb ._cab .Clear ();
|
|
_feb ._gcg .Clear ();_feb ._baa =false };func _bedc (_bfe _bc .Path )[][]_d .Point {var _gcgg [][]_d .Point ;var _aefb []_d .Point ;var _eedb ,_cgfd float64 ;for _efcd :=0;_efcd < len (_bfe );{switch _bfe [_efcd ]{case 0:if len (_aefb )> 0{_gcgg =append (_gcgg ,_aefb );
|
|
_aefb =nil ;};_adfd :=_deg (_bfe [_efcd +1]);_dfa :=_deg (_bfe [_efcd +2]);_aefb =append (_aefb ,_d .NewPoint (_adfd ,_dfa ));_eedb ,_cgfd =_adfd ,_dfa ;_efcd +=4;case 1:_cfad :=_deg (_bfe [_efcd +1]);_abfc :=_deg (_bfe [_efcd +2]);_aefb =append (_aefb ,_d .NewPoint (_cfad ,_abfc ));
|
|
_eedb ,_cgfd =_cfad ,_abfc ;_efcd +=4;case 2:_cge :=_deg (_bfe [_efcd +1]);_gfcc :=_deg (_bfe [_efcd +2]);_abeg :=_deg (_bfe [_efcd +3]);_gbf :=_deg (_bfe [_efcd +4]);_eff :=_cag (_eedb ,_cgfd ,_cge ,_gfcc ,_abeg ,_gbf );_aefb =append (_aefb ,_eff ...);
|
|
_eedb ,_cgfd =_abeg ,_gbf ;_efcd +=6;case 3:_faaa :=_deg (_bfe [_efcd +1]);_gdec :=_deg (_bfe [_efcd +2]);_bdf :=_deg (_bfe [_efcd +3]);_edd :=_deg (_bfe [_efcd +4]);_ebdg :=_deg (_bfe [_efcd +5]);_fffa :=_deg (_bfe [_efcd +6]);_abce :=_ec (_eedb ,_cgfd ,_faaa ,_gdec ,_bdf ,_edd ,_ebdg ,_fffa );
|
|
_aefb =append (_aefb ,_abce ...);_eedb ,_cgfd =_ebdg ,_fffa ;_efcd +=8;default:_bb .Log .Debug ("\u0057\u0041\u0052\u004e: \u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0070\u0061\u0074\u0068\u003a\u0020%\u0076",_bfe );return _gcgg ;};};if len (_aefb )> 0{_gcgg =append (_gcgg ,_aefb );
|
|
};return _gcgg ;};func (_ace *Context )Scale (x ,y float64 ){_ace ._ggc =_ace ._ggc .Scale (x ,y )};func (_fbed *Context )DrawRoundedRectangle (x ,y ,w ,h ,r float64 ){_agae ,_aeg ,_cfbg ,_abg :=x ,x +r ,x +w -r ,x +w ;_ddg ,_bgfg ,_bbbba ,_dda :=y ,y +r ,y +h -r ,y +h ;
|
|
_fbed .NewSubPath ();_fbed .MoveTo (_aeg ,_ddg );_fbed .LineTo (_cfbg ,_ddg );_fbed .DrawArc (_cfbg ,_bgfg ,r ,_aade (270),_aade (360));_fbed .LineTo (_abg ,_bbbba );_fbed .DrawArc (_cfbg ,_bbbba ,r ,_aade (0),_aade (90));_fbed .LineTo (_aeg ,_dda );_fbed .DrawArc (_aeg ,_bbbba ,r ,_aade (90),_aade (180));
|
|
_fbed .LineTo (_agae ,_bgfg );_fbed .DrawArc (_aeg ,_bgfg ,r ,_aade (180),_aade (270));_fbed .ClosePath ();};func (_afb *Context )Rotate (angle float64 ){_afb ._ggc =_afb ._ggc .Rotate (angle )};func (_cec *Context )SetRGB (r ,g ,b float64 ){_cec .SetRGBA (r ,g ,b ,1)};
|
|
func (_abb *Context )SetDashOffset (offset float64 ){_abb ._ggb =offset };type circle struct{_gefe ,_eafd ,_dea float64 };type stops []stop ;func (_dge *linearGradient )AddColorStop (offset float64 ,color _gg .Color ){_dge ._agg =append (_dge ._agg ,stop {_gcgb :offset ,_eeef :color });
|
|
_b .Sort (_dge ._agg );};func (_cagf *Context )DrawImage (im _fb .Image ,x ,y int ){_cagf .DrawImageAnchored (im ,x ,y ,0,0)};func (_cgd *Context )Clip (){_cgd .ClipPreserve ();_cgd .ClearPath ()};func _agfc (_bbde _fb .Image ,_fdfc repeatOp )_ca .Pattern {return &surfacePattern {_aebf :_bbde ,_ebbad :_fdfc };
|
|
};type patternPainter struct{_fcgb *_fb .RGBA ;_aed *_fb .Alpha ;_ede _ca .Pattern ;};type Context struct{_eac int ;_ggaa int ;_eb *_bc .Rasterizer ;_cdfg *_fb .RGBA ;_ccc *_fb .Alpha ;_ggd _gg .Color ;_aga _ca .Pattern ;_faad _ca .Pattern ;_cab _bc .Path ;
|
|
_gcg _bc .Path ;_bcg _d .Point ;_cfde _d .Point ;_baa bool ;_agf []float64 ;_ggb float64 ;_aae float64 ;_fg _ca .LineCap ;_gac _ca .LineJoin ;_gag _ca .FillRule ;_ggc _d .Matrix ;_ege _ca .TextState ;_fad []*Context ;};func (_gee *Context )DrawLine (x1 ,y1 ,x2 ,y2 float64 ){_gee .MoveTo (x1 ,y1 );
|
|
_gee .LineTo (x2 ,y2 )};type solidPattern struct{_dbfd _gg .Color };func (_bea *patternPainter )Paint (ss []_bc .Span ,done bool ){_bcgb :=_bea ._fcgb .Bounds ();for _ ,_ead :=range ss {if _ead .Y < _bcgb .Min .Y {continue ;};if _ead .Y >=_bcgb .Max .Y {return ;
|
|
};if _ead .X0 < _bcgb .Min .X {_ead .X0 =_bcgb .Min .X ;};if _ead .X1 > _bcgb .Max .X {_ead .X1 =_bcgb .Max .X ;};if _ead .X0 >=_ead .X1 {continue ;};const _efde =1<<16-1;_fbda :=_ead .Y -_bea ._fcgb .Rect .Min .Y ;_cbcb :=_ead .X0 -_bea ._fcgb .Rect .Min .X ;
|
|
_ggab :=(_ead .Y -_bea ._fcgb .Rect .Min .Y )*_bea ._fcgb .Stride +(_ead .X0 -_bea ._fcgb .Rect .Min .X )*4;_dcd :=_ggab +(_ead .X1 -_ead .X0 )*4;for _deb ,_edee :=_ggab ,_cbcb ;_deb < _dcd ;_deb ,_edee =_deb +4,_edee +1{_abbe :=_ead .Alpha ;if _bea ._aed !=nil {_abbe =_abbe *uint32 (_bea ._aed .AlphaAt (_edee ,_fbda ).A )/255;
|
|
if _abbe ==0{continue ;};};_fcdc :=_bea ._ede .ColorAt (_edee ,_fbda );_ccgc ,_fcbd ,_caba ,_gcbg :=_fcdc .RGBA ();_dgdd :=uint32 (_bea ._fcgb .Pix [_deb +0]);_fdce :=uint32 (_bea ._fcgb .Pix [_deb +1]);_ece :=uint32 (_bea ._fcgb .Pix [_deb +2]);_cce :=uint32 (_bea ._fcgb .Pix [_deb +3]);
|
|
_fcbb :=(_efde -(_gcbg *_abbe /_efde ))*0x101;_bea ._fcgb .Pix [_deb +0]=uint8 ((_dgdd *_fcbb +_ccgc *_abbe )/_efde >>8);_bea ._fcgb .Pix [_deb +1]=uint8 ((_fdce *_fcbb +_fcbd *_abbe )/_efde >>8);_bea ._fcgb .Pix [_deb +2]=uint8 ((_ece *_fcbb +_caba *_abbe )/_efde >>8);
|
|
_bea ._fcgb .Pix [_deb +3]=uint8 ((_cce *_fcbb +_gcbg *_abbe )/_efde >>8);};};};func (_dde *solidPattern )ColorAt (x ,y int )_gg .Color {return _dde ._dbfd };func (_eecd *Context )Transform (x ,y float64 )(_gfdb ,_fgdb float64 ){return _eecd ._ggc .Transform (x ,y );
|
|
};func (_bga *Context )StrokePreserve (){var _bbd _bc .Painter ;if _bga ._ccc ==nil {if _edf ,_fgc :=_bga ._faad .(*solidPattern );_fgc {_ggdg :=_bc .NewRGBAPainter (_bga ._cdfg );_ggdg .SetColor (_edf ._dbfd );_bbd =_ggdg ;};};if _bbd ==nil {_bbd =_dfc (_bga ._cdfg ,_bga ._ccc ,_bga ._faad );
|
|
};_bga .stroke (_bbd );};func (_acb *Context )Height ()int {return _acb ._ggaa };func (_ebf *Context )SetRGBA255 (r ,g ,b ,a int ){_ebf ._ggd =_gg .NRGBA {uint8 (r ),uint8 (g ),uint8 (b ),uint8 (a )};_ebf .setFillAndStrokeColor (_ebf ._ggd );};func _bdb (_ada [][]_d .Point ,_dgdc []float64 ,_bfd float64 )[][]_d .Point {var _gea [][]_d .Point ;
|
|
if len (_dgdc )==0{return _ada ;};if len (_dgdc )==1{_dgdc =append (_dgdc ,_dgdc [0]);};for _ ,_gcce :=range _ada {if len (_gcce )< 2{continue ;};_bdd :=_gcce [0];_agda :=1;_egc :=0;_abggc :=0.0;if _bfd !=0{var _ebbb float64 ;for _ ,_accde :=range _dgdc {_ebbb +=_accde ;
|
|
};_bfd =_g .Mod (_bfd ,_ebbb );if _bfd < 0{_bfd +=_ebbb ;};for _gacd ,_cgb :=range _dgdc {_bfd -=_cgb ;if _bfd < 0{_egc =_gacd ;_abggc =_cgb +_bfd ;break ;};};};var _aeef []_d .Point ;_aeef =append (_aeef ,_bdd );for _agda < len (_gcce ){_egbd :=_dgdc [_egc ];
|
|
_afd :=_gcce [_agda ];_acf :=_bdd .Distance (_afd );_dbb :=_egbd -_abggc ;if _acf > _dbb {_bbfc :=_dbb /_acf ;_gdf :=_bdd .Interpolate (_afd ,_bbfc );_aeef =append (_aeef ,_gdf );if _egc %2==0&&len (_aeef )> 1{_gea =append (_gea ,_aeef );};_aeef =nil ;
|
|
_aeef =append (_aeef ,_gdf );_abggc =0;_bdd =_gdf ;_egc =(_egc +1)%len (_dgdc );}else {_aeef =append (_aeef ,_afd );_bdd =_afd ;_abggc +=_acf ;_agda ++;};};if _egc %2==0&&len (_aeef )> 1{_gea =append (_gea ,_aeef );};};return _gea ;};func (_ebe *Context )ResetClip (){_ebe ._ccc =nil };
|
|
func _cag (_eee ,_df ,_dg ,_gb ,_dd ,_ddf float64 )[]_d .Point {_bg :=(_g .Hypot (_dg -_eee ,_gb -_df )+_g .Hypot (_dd -_dg ,_ddf -_gb ));_dbc :=int (_bg +0.5);if _dbc < 4{_dbc =4;};_ea :=float64 (_dbc )-1;_be :=make ([]_d .Point ,_dbc );for _eeb :=0;_eeb < _dbc ;
|
|
_eeb ++{_fc :=float64 (_eeb )/_ea ;_aa ,_bed :=_ad (_eee ,_df ,_dg ,_gb ,_dd ,_ddf ,_fc );_be [_eeb ]=_d .NewPoint (_aa ,_bed );};return _be ;};func (_ccaf *surfacePattern )ColorAt (x ,y int )_gg .Color {_aegb :=_ccaf ._aebf .Bounds ();switch _ccaf ._ebbad {case _fgf :if y >=_aegb .Dy (){return _gg .Transparent ;
|
|
};case _eccd :if x >=_aegb .Dx (){return _gg .Transparent ;};case _def :if x >=_aegb .Dx ()||y >=_aegb .Dy (){return _gg .Transparent ;};};x =x %_aegb .Dx ()+_aegb .Min .X ;y =y %_aegb .Dy ()+_aegb .Min .Y ;return _ccaf ._aebf .At (x ,y );};func (_aee *Context )stroke (_feaf _bc .Painter ){_ecbe :=_aee ._cab ;
|
|
if len (_aee ._agf )> 0{_ecbe =_fga (_ecbe ,_aee ._agf ,_aee ._ggb );}else {_ecbe =_dff (_bedc (_ecbe ));};_bfg :=_aee ._eb ;_bfg .UseNonZeroWinding =true ;_bfg .Clear ();_abfa :=(_aee ._ggc .ScalingFactorX ()+_aee ._ggc .ScalingFactorY ())/2;_bfg .AddStroke (_ecbe ,_fdag (_aee ._aae *_abfa ),_aee .capper (),_aee .joiner ());
|
|
_bfg .Rasterize (_feaf );};func _fga (_cbg _bc .Path ,_adef []float64 ,_ggfg float64 )_bc .Path {return _dff (_bdb (_bedc (_cbg ),_adef ,_ggfg ));};type repeatOp int ;func (_caa *Context )DrawImageAnchored (im _fb .Image ,x ,y int ,ax ,ay float64 ){_abff :=im .Bounds ().Size ();
|
|
x -=int (ax *float64 (_abff .X ));y -=int (ay *float64 (_abff .Y ));_fed :=_db .BiLinear ;_gbdb :=_caa ._ggc .Clone ().Translate (float64 (x ),float64 (y ));_efc :=_a .Aff3 {_gbdb [0],_gbdb [3],_gbdb [6],_gbdb [1],_gbdb [4],_gbdb [7]};if _caa ._ccc ==nil {_fed .Transform (_caa ._cdfg ,_efc ,im ,im .Bounds (),_db .Over ,nil );
|
|
}else {_fed .Transform (_caa ._cdfg ,_efc ,im ,im .Bounds (),_db .Over ,&_db .Options {DstMask :_caa ._ccc ,DstMaskP :_fb .Point {}});};};func (_gcb *Context )SetMatrix (m _d .Matrix ){_gcb ._ggc =m };func _fadf (_aece ,_efcf ,_bebf ,_gfcad ,_fca ,_gaaga float64 )_ca .Gradient {_abe :=circle {_aece ,_efcf ,_bebf };
|
|
_ccaa :=circle {_gfcad ,_fca ,_gaaga };_eda :=circle {_gfcad -_aece ,_fca -_efcf ,_gaaga -_bebf };_gace :=_ffa (_eda ._gefe ,_eda ._eafd ,-_eda ._dea ,_eda ._gefe ,_eda ._eafd ,_eda ._dea );var _agb float64 ;if _gace !=0{_agb =1.0/_gace ;};_edfc :=-_abe ._dea ;
|
|
_ccg :=&radialGradient {_cadd :_abe ,_ffc :_ccaa ,_gbc :_eda ,_gaag :_gace ,_dgaa :_agb ,_fbc :_edfc };return _ccg ;};func (_eae *Context )Width ()int {return _eae ._eac };func (_agd *Context )SetFillRGBA (r ,g ,b ,a float64 ){_bgg :=_gg .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};
|
|
_agd ._ggd =_bgg ;_agd ._aga =_egce (_bgg );};func (_ecc *Context )SetLineWidth (lineWidth float64 ){_ecc ._aae =lineWidth };func (_eaa stops )Less (i ,j int )bool {return _eaa [i ]._gcgb < _eaa [j ]._gcgb };func (_cagg *Context )SetHexColor (x string ){_dfb ,_cfb ,_egf ,_fce :=_ecag (x );
|
|
_cagg .SetRGBA255 (_dfb ,_cfb ,_egf ,_fce );}; |