mirror of
https://github.com/unidoc/unipdf.git
synced 2025-04-26 13:48:55 +08:00
12 lines
27 KiB
Go
12 lines
27 KiB
Go
//
|
|
// Copyright 2020 FoxyUtils ehf. All rights reserved.
|
|
//
|
|
// This is a commercial product and requires a license to operate.
|
|
// A trial license can be obtained at https://unidoc.io
|
|
//
|
|
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
|
|
//
|
|
// Use of this source code is governed by the UniDoc End User License Agreement
|
|
// terms that can be accessed at https://unidoc.io/eula/
|
|
|
|
package imagerender ;import (_cf "errors";_be "fmt";_ff "github.com/golang/freetype/raster";_ag "github.com/unidoc/unipdf/v3/common";_f "github.com/unidoc/unipdf/v3/internal/transform";_fg "github.com/unidoc/unipdf/v3/render/internal/context";_bg "golang.org/x/image/draw";_eb "golang.org/x/image/font";_af "golang.org/x/image/math/f64";_fb "golang.org/x/image/math/fixed";_gd "image";_g "image/color";_c "image/draw";_b "math";_d "sort";_a "strings";);func (_gfb *Context )SetDash (dashes ...float64 ){_gfb ._cgf =dashes };func (_edf *Context )DrawCircle (x ,y ,r float64 ){_edf .NewSubPath ();_edf .DrawEllipticalArc (x ,y ,r ,r ,0,2*_b .Pi );_edf .ClosePath ();};func (_ebgc *Context )SetRGB255 (r ,g ,b int ){_ebgc .SetRGBA255 (r ,g ,b ,255)};func _abc (_cfbdg _gd .Image ,_cfdb repeatOp )_fg .Pattern {return &surfacePattern {_cdgg :_cfbdg ,_fabf :_cfdb };};func _dfb (_dgba _gd .Image )*_gd .RGBA {_dgg :=_dgba .Bounds ();_bcf :=_gd .NewRGBA (_dgg );_c .Draw (_bcf ,_dgg ,_dgba ,_dgg .Min ,_c .Src );return _bcf ;};type patternPainter struct{_fada *_gd .RGBA ;_febb *_gd .Alpha ;_gada _fg .Pattern ;};func _bgag (_ddfa float64 )_fb .Int26_6 {return _fb .Int26_6 (_ddfa *64)};func (_egac *Context )SetHexColor (x string ){_ffc ,_bdg ,_abg ,_edb :=_ccff (x );_egac .SetRGBA255 (_ffc ,_bdg ,_abg ,_edb );};func (_adae stops )Swap (i ,j int ){_adae [i ],_adae [j ]=_adae [j ],_adae [i ]};func (_dddf *Context )capper ()_ff .Capper {switch _dddf ._gee {case _fg .LineCapButt :return _ff .ButtCapper ;case _fg .LineCapRound :return _ff .RoundCapper ;case _fg .LineCapSquare :return _ff .SquareCapper ;};return nil ;};func (_fdg *Context )SetColor (c _g .Color ){_fdg .setFillAndStrokeColor (c )};func (_bfb *Context )Clip (){_bfb .ClipPreserve ();_bfb .ClearPath ()};func (_bega *Context )DrawStringAnchored (s string ,x ,y ,ax ,ay float64 ){_ebed ,_bfgd :=_bega .MeasureString (s );x -=ax *_ebed ;y +=ay *_bfgd ;if _bega ._de ==nil {_bega .drawString (_bega ._ad ,s ,x ,y );}else {_cgbf :=_gd .NewRGBA (_gd .Rect (0,0,_bega ._dbf ,_bega ._cbg ));_bega .drawString (_cgbf ,s ,x ,y );_bg .DrawMask (_bega ._ad ,_bega ._ad .Bounds (),_cgbf ,_gd .ZP ,_bega ._de ,_gd .ZP ,_bg .Over );};};type Context struct{_dbf int ;_cbg int ;_ffe *_ff .Rasterizer ;_ad *_gd .RGBA ;_de *_gd .Alpha ;_gfe _g .Color ;_bd _fg .Pattern ;_da _fg .Pattern ;_cbd _ff .Path ;_ega _ff .Path ;_ef _f .Point ;_efc _f .Point ;_ecg bool ;_cgf []float64 ;_daa float64 ;_dfc float64 ;_gee _fg .LineCap ;_fga _fg .LineJoin ;_gdd _fg .FillRule ;_cac _f .Matrix ;_bbc *_fg .TextState ;_cdc []*Context ;};func (_aad *Context )SetLineJoin (lineJoin _fg .LineJoin ){_aad ._fga =lineJoin };func (_bgec *Context )setFillAndStrokeColor (_cca _g .Color ){_bgec ._gfe =_cca ;_bgec ._bd =_agf (_cca );_bgec ._da =_agf (_cca );};func (_bgff *Context )DrawEllipse (x ,y ,rx ,ry float64 ){_bgff .NewSubPath ();_bgff .DrawEllipticalArc (x ,y ,rx ,ry ,0,2*_b .Pi );_bgff .ClosePath ();};type stops []stop ;type circle struct{_efb ,_efbc ,_baed float64 };func (_afa *Context )LineWidth ()float64 {return _afa ._dfc };var (_ddc =_agf (_g .White );_ccf =_agf (_g .Black ););func (_edbd *Context )SetRGB (r ,g ,b float64 ){_edbd .SetRGBA (r ,g ,b ,1)};func (_dfe *Context )SetFillStyle (pattern _fg .Pattern ){if _daaa ,_bcg :=pattern .(*solidPattern );_bcg {_dfe ._gfe =_daaa ._ffeb ;};_dfe ._bd =pattern ;};func _cdgd (_edgc [][]_f .Point ,_bag []float64 ,_abgg float64 )[][]_f .Point {var _fgeeb [][]_f .Point ;if len (_bag )==0{return _edgc ;};if len (_bag )==1{_bag =append (_bag ,_bag [0]);};for _ ,_adea :=range _edgc {if len (_adea )< 2{continue ;};_bbbf :=_adea [0];_bcda :=1;_cefe :=0;_fcdce :=0.0;if _abgg !=0{var _geee float64 ;for _ ,_gfa :=range _bag {_geee +=_gfa ;};_abgg =_b .Mod (_abgg ,_geee );if _abgg < 0{_abgg +=_geee ;};for _edgd ,_aaffb :=range _bag {_abgg -=_aaffb ;if _abgg < 0{_cefe =_edgd ;_fcdce =_aaffb +_abgg ;break ;};};};var _eaf []_f .Point ;_eaf =append (_eaf ,_bbbf );for _bcda < len (_adea ){_efga :=_bag [_cefe ];_cda :=_adea [_bcda ];_efcg :=_bbbf .Distance (_cda );_agd :=_efga -_fcdce ;if _efcg > _agd {_agge :=_agd /_efcg ;_fafb :=_bbbf .Interpolate (_cda ,_agge );_eaf =append (_eaf ,_fafb );if _cefe %2==0&&len (_eaf )> 1{_fgeeb =append (_fgeeb ,_eaf );};_eaf =nil ;_eaf =append (_eaf ,_fafb );_fcdce =0;_bbbf =_fafb ;_cefe =(_cefe +1)%len (_bag );}else {_eaf =append (_eaf ,_cda );_bbbf =_cda ;_fcdce +=_efcg ;_bcda ++;};};if _cefe %2==0&&len (_eaf )> 1{_fgeeb =append (_fgeeb ,_eaf );};};return _fgeeb ;};func (_eeg *Context )DrawLine (x1 ,y1 ,x2 ,y2 float64 ){_eeg .MoveTo (x1 ,y1 );_eeg .LineTo (x2 ,y2 )};func (_gdba *Context )ScaleAbout (sx ,sy ,x ,y float64 ){_gdba .Translate (x ,y );_gdba .Scale (sx ,sy );_gdba .Translate (-x ,-y );};type radialGradient struct{_ecbg ,_ced ,_cfbd circle ;_efa ,_bcb float64 ;_adc float64 ;_dec stops ;};func (_gda *Context )DrawRoundedRectangle (x ,y ,w ,h ,r float64 ){_fcg ,_gddf ,_ecb ,_aea :=x ,x +r ,x +w -r ,x +w ;_ceg ,_daad ,_cfda ,_aaeg :=y ,y +r ,y +h -r ,y +h ;_gda .NewSubPath ();_gda .MoveTo (_gddf ,_ceg );_gda .LineTo (_ecb ,_ceg );_gda .DrawArc (_ecb ,_daad ,r ,_eab (270),_eab (360));_gda .LineTo (_aea ,_cfda );_gda .DrawArc (_ecb ,_cfda ,r ,_eab (0),_eab (90));_gda .LineTo (_gddf ,_aaeg );_gda .DrawArc (_gddf ,_cfda ,r ,_eab (90),_eab (180));_gda .LineTo (_fcg ,_daad );_gda .DrawArc (_gddf ,_daad ,r ,_eab (180),_eab (270));_gda .ClosePath ();};func _agf (_eaaa _g .Color )_fg .Pattern {return &solidPattern {_ffeb :_eaaa }};func (_egb *Context )SetFillRule (fillRule _fg .FillRule ){_egb ._gdd =fillRule };func (_edg *Context )Clear (){_dcb :=_gd .NewUniform (_edg ._gfe );_bg .Draw (_edg ._ad ,_edg ._ad .Bounds (),_dcb ,_gd .ZP ,_bg .Src );};func (_abe *Context )ClosePath (){if _abe ._ecg {_aff :=_dabb (_abe ._ef );_abe ._cbd .Add1 (_aff );_abe ._ega .Add1 (_aff );_abe ._efc =_abe ._ef ;};};func (_ecc *Context )Translate (x ,y float64 ){_ecc ._cac .Translate (x ,y )};func (_gcc *Context )Push (){_eca :=*_gcc ;_gcc ._cdc =append (_gcc ._cdc ,&_eca )};func (_eaga *radialGradient )AddColorStop (offset float64 ,color _g .Color ){_eaga ._dec =append (_eaga ._dec ,stop {_baa :offset ,_fbdf :color });_d .Sort (_eaga ._dec );};func (_eba *Context )Scale (x ,y float64 ){_eba ._cac .Scale (x ,y )};func (_eagg *Context )DrawImageAnchored (im _gd .Image ,x ,y int ,ax ,ay float64 ){_cfbbe :=im .Bounds ().Size ();x -=int (ax *float64 (_cfbbe .X ));y -=int (ay *float64 (_cfbbe .Y ));_cgfd :=_bg .BiLinear ;_bgc :=_eagg ._cac .Clone ();_bgc .Translate (float64 (x ),float64 (y ));_bbd :=_af .Aff3 {_bgc [0],_bgc [3],_bgc [6],_bgc [1],_bgc [4],_bgc [7]};if _eagg ._de ==nil {_cgfd .Transform (_eagg ._ad ,_bbd ,im ,im .Bounds (),_bg .Over ,nil );}else {_cgfd .Transform (_eagg ._ad ,_bbd ,im ,im .Bounds (),_bg .Over ,&_bg .Options {DstMask :_eagg ._de ,DstMaskP :_gd .ZP });};};type linearGradient struct{_cce ,_gbc ,_egcb ,_aged float64 ;_fad stops ;};func (_aaf *linearGradient )AddColorStop (offset float64 ,color _g .Color ){_aaf ._fad =append (_aaf ._fad ,stop {_baa :offset ,_fbdf :color });_d .Sort (_aaf ._fad );};func _bb (_gf ,_gg ,_bbe ,_fa ,_cg ,_cbf float64 )[]_f .Point {_eea :=(_b .Hypot (_bbe -_gf ,_fa -_gg )+_b .Hypot (_cg -_bbe ,_cbf -_fa ));_ea :=int (_eea +0.5);if _ea < 4{_ea =4;};_dg :=float64 (_ea )-1;_gdb :=make ([]_f .Point ,_ea );for _fe :=0;_fe < _ea ;_fe ++{_cbfb :=float64 (_fe )/_dg ;_fab ,_ce :=_gc (_gf ,_gg ,_bbe ,_fa ,_cg ,_cbf ,_cbfb );_gdb [_fe ]=_f .NewPoint (_fab ,_ce );};return _gdb ;};func (_eec *Context )drawRegularPolygon (_faf int ,_ggb ,_fgag ,_cfg ,_efd float64 ){_ddbe :=2*_b .Pi /float64 (_faf );_efd -=_b .Pi /2;if _faf %2==0{_efd +=_ddbe /2;};_eec .NewSubPath ();for _gaga :=0;_gaga < _faf ;_gaga ++{_fca :=_efd +_ddbe *float64 (_gaga );_eec .LineTo (_ggb +_cfg *_b .Cos (_fca ),_fgag +_cfg *_b .Sin (_fca ));};_eec .ClosePath ();};func (_eef *Context )MeasureString (s string )(_bgcb ,_gdaa float64 ){_bcec :=&_eb .Drawer {Face :_eef ._bbc .Tf .Face };_ccfa :=_bcec .MeasureString (s );return float64 (_ccfa >>6),_eef ._bbc .Tf .Size ;};func _cgeg (_dgfd _ff .Path ,_fbgf []float64 ,_cdgf float64 )_ff .Path {return _begd (_cdgd (_ffg (_dgfd ),_fbgf ,_cdgf ));};func (_cfbb *Context )MoveTo (x ,y float64 ){if _cfbb ._ecg {_cfbb ._ega .Add1 (_dabb (_cfbb ._ef ));};x ,y =_cfbb .Transform (x ,y );_ba :=_f .NewPoint (x ,y );_caa :=_dabb (_ba );_cfbb ._cbd .Start (_caa );_cfbb ._ega .Start (_caa );_cfbb ._ef =_ba ;_cfbb ._efc =_ba ;_cfbb ._ecg =true ;};func (_age *Context )SetLineWidth (lineWidth float64 ){_age ._dfc =lineWidth };func _edge (_aac ,_afbf _g .Color ,_efca float64 )_g .Color {_bbge ,_cae ,_bda ,_gafe :=_aac .RGBA ();_cbb ,_cadc ,_cgg ,_fead :=_afbf .RGBA ();return _g .RGBA {_abfa (_bbge ,_cbb ,_efca ),_abfa (_cae ,_cadc ,_efca ),_abfa (_bda ,_cgg ,_efca ),_abfa (_gafe ,_fead ,_efca )};};func (_dcbg *Context )DrawImage (im _gd .Image ,x ,y int ){_dcbg .DrawImageAnchored (im ,x ,y ,0,0)};func NewContext (width ,height int )*Context {return NewContextForRGBA (_gd .NewRGBA (_gd .Rect (0,0,width ,height )));};func (_fcc *Context )stroke (_acb _ff .Painter ){_cbe :=_fcc ._cbd ;if len (_fcc ._cgf )> 0{_cbe =_cgeg (_cbe ,_fcc ._cgf ,_fcc ._daa );}else {_cbe =_begd (_ffg (_cbe ));};_cfc :=_fcc ._ffe ;_cfc .UseNonZeroWinding =true ;_cfc .Clear ();_cfc .AddStroke (_cbe ,_bgag (_fcc ._dfc ),_fcc .capper (),_fcc .joiner ());_cfc .Rasterize (_acb );};func (_ggd *Context )Rotate (angle float64 ){_ggd ._cac .Rotate (angle )};func (_gce *Context )SetFillRGBA (r ,g ,b ,a float64 ){_abb :=_g .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_gce ._gfe =_abb ;_gce ._bd =_agf (_abb );};func (_fea *Context )DrawPoint (x ,y ,r float64 ){_fea .Push ();_eda ,_aae :=_fea .Transform (x ,y );_fea .Identity ();_fea .DrawCircle (_eda ,_aae ,r );_fea .Pop ();};func (_bcgf *Context )Pop (){_dbe :=*_bcgf ;_ecd :=_bcgf ._cdc ;_afff ,_ecd :=_ecd [len (_ecd )-1],_ecd [:len (_ecd )-1];*_bcgf =*_afff ;_bcgf ._cbd =_dbe ._cbd ;_bcgf ._ega =_dbe ._ega ;_bcgf ._ef =_dbe ._ef ;_bcgf ._efc =_dbe ._efc ;_bcgf ._ecg =_dbe ._ecg ;_bcgf ._bbc =_dbe ._bbc ;};func (_acf *Context )ResetClip (){_acf ._de =nil };func (_gaff stops )Len ()int {return len (_gaff )};type stop struct{_baa float64 ;_fbdf _g .Color ;};func _begd (_egaa [][]_f .Point )_ff .Path {var _aba _ff .Path ;for _ ,_aafa :=range _egaa {var _bac _fb .Point26_6 ;for _gge ,_abad :=range _aafa {_fefb :=_dabb (_abad );if _gge ==0{_aba .Start (_fefb );}else {_aaa :=_fefb .X -_bac .X ;_gfg :=_fefb .Y -_bac .Y ;if _aaa < 0{_aaa =-_aaa ;};if _gfg < 0{_gfg =-_gfg ;};if _aaa +_gfg > 8{_aba .Add1 (_fefb );};};_bac =_fefb ;};};return _aba ;};func _gaf (_ecf ,_df ,_gfc ,_bbg ,_cff ,_cbfbg ,_ca ,_bc float64 )[]_f .Point {_ge :=(_b .Hypot (_gfc -_ecf ,_bbg -_df )+_b .Hypot (_cff -_gfc ,_cbfbg -_bbg )+_b .Hypot (_ca -_cff ,_bc -_cbfbg ));_bfd :=int (_ge +0.5);if _bfd < 4{_bfd =4;};_cc :=float64 (_bfd )-1;_fd :=make ([]_f .Point ,_bfd );for _dgd :=0;_dgd < _bfd ;_dgd ++{_bgf :=float64 (_dgd )/_cc ;_cfd ,_ac :=_gb (_ecf ,_df ,_gfc ,_bbg ,_cff ,_cbfbg ,_ca ,_bc ,_bgf );_fd [_dgd ]=_f .NewPoint (_cfd ,_ac );};return _fd ;};func (_fba *Context )DrawArc (x ,y ,r ,angle1 ,angle2 float64 ){_fba .DrawEllipticalArc (x ,y ,r ,r ,angle1 ,angle2 );};type repeatOp int ;func (_fgae *Context )DrawString (s string ,x ,y float64 ){_fgae .DrawStringAnchored (s ,x ,y ,0,0)};func (_dce *Context )Stroke (){_dce .StrokePreserve ();_dce .ClearPath ()};func (_fbd *Context )ClearPath (){_fbd ._cbd .Clear ();_fbd ._ega .Clear ();_fbd ._ecg =false };func _dabb (_agaf _f .Point )_fb .Point26_6 {return _fb .Point26_6 {X :_bgag (_agaf .X ),Y :_bgag (_agaf .Y )}};func _ddab (_bgbe *_gd .RGBA ,_adegfa *_gd .Alpha ,_aggg _fg .Pattern )*patternPainter {return &patternPainter {_bgbe ,_adegfa ,_aggg };};const (_bed repeatOp =iota ;_ddbc ;_geeb ;_cdb ;);func (_bce *Context )SetStrokeStyle (pattern _fg .Pattern ){_bce ._da =pattern };func (_fcd *radialGradient )ColorAt (x ,y int )_g .Color {if len (_fcd ._dec )==0{return _g .Transparent ;};_fbb ,_aaff :=float64 (x )+0.5-_fcd ._ecbg ._efb ,float64 (y )+0.5-_fcd ._ecbg ._efbc ;_beca :=_bbb (_fbb ,_aaff ,_fcd ._ecbg ._baed ,_fcd ._cfbd ._efb ,_fcd ._cfbd ._efbc ,_fcd ._cfbd ._baed );_dgfe :=_bbb (_fbb ,_aaff ,-_fcd ._ecbg ._baed ,_fbb ,_aaff ,_fcd ._ecbg ._baed );if _fcd ._efa ==0{if _beca ==0{return _g .Transparent ;};_fgdd :=0.5*_dgfe /_beca ;if _fgdd *_fcd ._cfbd ._baed >=_fcd ._adc {return _fgee (_fgdd ,_fcd ._dec );};return _g .Transparent ;};_bbcc :=_bbb (_beca ,_fcd ._efa ,0,_beca ,-_dgfe ,0);if _bbcc >=0{_faff :=_b .Sqrt (_bbcc );_gdbb :=(_beca +_faff )*_fcd ._bcb ;_ffcc :=(_beca -_faff )*_fcd ._bcb ;if _gdbb *_fcd ._cfbd ._baed >=_fcd ._adc {return _fgee (_gdbb ,_fcd ._dec );}else if _ffcc *_fcd ._cfbd ._baed >=_fcd ._adc {return _fgee (_ffcc ,_fcd ._dec );};};return _g .Transparent ;};type solidPattern struct{_ffeb _g .Color };type surfacePattern struct{_cdgg _gd .Image ;_fabf repeatOp ;};func _bcef (_dab ,_dff ,_fdf ,_gbfb float64 )_fg .Gradient {_ggba :=&linearGradient {_cce :_dab ,_gbc :_dff ,_egcb :_fdf ,_aged :_gbfb };return _ggba ;};func _dgc (_gedb _fb .Int26_6 )float64 {const _fgeg ,_gdaf =6,1<<6-1;if _gedb >=0{return float64 (_gedb >>_fgeg )+float64 (_gedb &_gdaf )/64;};_gedb =-_gedb ;if _gedb >=0{return -(float64 (_gedb >>_fgeg )+float64 (_gedb &_gdaf )/64);};return 0;};func (_cfe *Context )Image ()_gd .Image {return _cfe ._ad };func (_egc *Context )SetPixel (x ,y int ){_egc ._ad .Set (x ,y ,_egc ._gfe )};func (_gbb *Context )StrokePreserve (){var _ffb _ff .Painter ;if _gbb ._de ==nil {if _dcdb ,_dgf :=_gbb ._da .(*solidPattern );_dgf {_dgff :=_ff .NewRGBAPainter (_gbb ._ad );_dgff .SetColor (_dcdb ._ffeb );_ffb =_dgff ;};};if _ffb ==nil {_ffb =_ddab (_gbb ._ad ,_gbb ._de ,_gbb ._da );};_gbb .stroke (_ffb );};func NewContextForRGBA (im *_gd .RGBA )*Context {_dgdb :=im .Bounds ().Size ().X ;_ed :=im .Bounds ().Size ().Y ;return &Context {_dbf :_dgdb ,_cbg :_ed ,_ffe :_ff .NewRasterizer (_dgdb ,_ed ),_ad :im ,_gfe :_g .Transparent ,_bd :_ddc ,_da :_ccf ,_dfc :1,_gdd :_fg .FillRuleWinding ,_cac :_f .IdentityMatrix (),_bbc :_fg .NewTextState ()};};func (_ade *Context )Width ()int {return _ade ._dbf };func (_fee *Context )SetMask (mask *_gd .Alpha )error {if mask .Bounds ().Size ()!=_fee ._ad .Bounds ().Size (){return _cf .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");};_fee ._de =mask ;return nil ;};func (_eed *Context )CubicTo (x1 ,y1 ,x2 ,y2 ,x3 ,y3 float64 ){if !_eed ._ecg {_eed .MoveTo (x1 ,y1 );};_ffcd ,_eff :=_eed ._efc .X ,_eed ._efc .Y ;x1 ,y1 =_eed .Transform (x1 ,y1 );x2 ,y2 =_eed .Transform (x2 ,y2 );x3 ,y3 =_eed .Transform (x3 ,y3 );_gdg :=_gaf (_ffcd ,_eff ,x1 ,y1 ,x2 ,y2 ,x3 ,y3 );_gffe :=_dabb (_eed ._efc );for _ ,_dgda :=range _gdg [1:]{_fda :=_dabb (_dgda );if _fda ==_gffe {continue ;};_gffe =_fda ;_eed ._cbd .Add1 (_fda );_eed ._ega .Add1 (_fda );_eed ._efc =_dgda ;};};func (_gff *Context )SetDashOffset (offset float64 ){_gff ._daa =offset };func (_ebd *Context )ShearAbout (sx ,sy ,x ,y float64 ){_ebd .Translate (x ,y );_ebd .Shear (sx ,sy );_ebd .Translate (-x ,-y );};func _fgee (_gga float64 ,_ffec stops )_g .Color {if _gga <=0.0||len (_ffec )==1{return _ffec [0]._fbdf ;};_fgde :=_ffec [len (_ffec )-1];if _gga >=_fgde ._baa {return _fgde ._fbdf ;};for _bef ,_ddag :=range _ffec [1:]{if _gga < _ddag ._baa {_gga =(_gga -_ffec [_bef ]._baa )/(_ddag ._baa -_ffec [_bef ]._baa );return _edge (_ffec [_bef ]._fbdf ,_ddag ._fbdf ,_gga );};};return _fgde ._fbdf ;};func (_gagb *Context )AsMask ()*_gd .Alpha {_bdf :=_gd .NewAlpha (_gagb ._ad .Bounds ());_bg .Draw (_bdf ,_gagb ._ad .Bounds (),_gagb ._ad ,_gd .ZP ,_bg .Src );return _bdf ;};func (_bae *Context )ClipPreserve (){_dcf :=_gd .NewAlpha (_gd .Rect (0,0,_bae ._dbf ,_bae ._cbg ));_ece :=_ff .NewAlphaOverPainter (_dcf );_bae .fill (_ece );if _bae ._de ==nil {_bae ._de =_dcf ;}else {_gdgg :=_gd .NewAlpha (_gd .Rect (0,0,_bae ._dbf ,_bae ._cbg ));_bg .DrawMask (_gdgg ,_gdgg .Bounds (),_dcf ,_gd .ZP ,_bae ._de ,_gd .ZP ,_bg .Over );_bae ._de =_gdgg ;};};func (_caaf *patternPainter )Paint (ss []_ff .Span ,done bool ){_gbfg :=_caaf ._fada .Bounds ();for _ ,_aeaf :=range ss {if _aeaf .Y < _gbfg .Min .Y {continue ;};if _aeaf .Y >=_gbfg .Max .Y {return ;};if _aeaf .X0 < _gbfg .Min .X {_aeaf .X0 =_gbfg .Min .X ;};if _aeaf .X1 > _gbfg .Max .X {_aeaf .X1 =_gbfg .Max .X ;};if _aeaf .X0 >=_aeaf .X1 {continue ;};const _fcab =1<<16-1;_ecce :=_aeaf .Y -_caaf ._fada .Rect .Min .Y ;_ggdg :=_aeaf .X0 -_caaf ._fada .Rect .Min .X ;_efce :=(_aeaf .Y -_caaf ._fada .Rect .Min .Y )*_caaf ._fada .Stride +(_aeaf .X0 -_caaf ._fada .Rect .Min .X )*4;_gfga :=_efce +(_aeaf .X1 -_aeaf .X0 )*4;for _adegf ,_eedd :=_efce ,_ggdg ;_adegf < _gfga ;_adegf ,_eedd =_adegf +4,_eedd +1{_cab :=_aeaf .Alpha ;if _caaf ._febb !=nil {_cab =_cab *uint32 (_caaf ._febb .AlphaAt (_eedd ,_ecce ).A )/255;if _cab ==0{continue ;};};_cbde :=_caaf ._gada .ColorAt (_eedd ,_ecce );_acc ,_gedc ,_gaef ,_fgb :=_cbde .RGBA ();_egacb :=uint32 (_caaf ._fada .Pix [_adegf +0]);_ggea :=uint32 (_caaf ._fada .Pix [_adegf +1]);_bgd :=uint32 (_caaf ._fada .Pix [_adegf +2]);_bdef :=uint32 (_caaf ._fada .Pix [_adegf +3]);_abfg :=(_fcab -(_fgb *_cab /_fcab ))*0x101;_caaf ._fada .Pix [_adegf +0]=uint8 ((_egacb *_abfg +_acc *_cab )/_fcab >>8);_caaf ._fada .Pix [_adegf +1]=uint8 ((_ggea *_abfg +_gedc *_cab )/_fcab >>8);_caaf ._fada .Pix [_adegf +2]=uint8 ((_bgd *_abfg +_gaef *_cab )/_fcab >>8);_caaf ._fada .Pix [_adegf +3]=uint8 ((_bdef *_abfg +_fgb *_cab )/_fcab >>8);};};};func (_bea *Context )QuadraticTo (x1 ,y1 ,x2 ,y2 float64 ){if !_bea ._ecg {_bea .MoveTo (x1 ,y1 );};x1 ,y1 =_bea .Transform (x1 ,y1 );x2 ,y2 =_bea .Transform (x2 ,y2 );_ebe :=_f .NewPoint (x1 ,y1 );_fcb :=_f .NewPoint (x2 ,y2 );_cec :=_dabb (_ebe );_gcaf :=_dabb (_fcb );_bea ._cbd .Add2 (_cec ,_gcaf );_bea ._ega .Add2 (_cec ,_gcaf );_bea ._efc =_fcb ;};func (_fge *Context )SetLineCap (lineCap _fg .LineCap ){_fge ._gee =lineCap };func (_cbc *surfacePattern )ColorAt (x ,y int )_g .Color {_abadg :=_cbc ._cdgg .Bounds ();switch _cbc ._fabf {case _ddbc :if y >=_abadg .Dy (){return _g .Transparent ;};case _geeb :if x >=_abadg .Dx (){return _g .Transparent ;};case _cdb :if x >=_abadg .Dx ()||y >=_abadg .Dy (){return _g .Transparent ;};};x =x %_abadg .Dx ()+_abadg .Min .X ;y =y %_abadg .Dy ()+_abadg .Min .Y ;return _cbc ._cdgg .At (x ,y );};func (_cad *Context )Shear (x ,y float64 ){_cad ._cac .Shear (x ,y )};func NewContextForImage (im _gd .Image )*Context {return NewContextForRGBA (_dfb (im ))};func (_bfg *Context )DrawEllipticalArc (x ,y ,rx ,ry ,angle1 ,angle2 float64 ){const _def =16;for _bgb :=0;_bgb < _def ;_bgb ++{_ddg :=float64 (_bgb +0)/_def ;_ada :=float64 (_bgb +1)/_def ;_cgdf :=angle1 +(angle2 -angle1 )*_ddg ;_ecef :=angle1 +(angle2 -angle1 )*_ada ;_gdda :=x +rx *_b .Cos (_cgdf );_abd :=y +ry *_b .Sin (_cgdf );_aaegc :=x +rx *_b .Cos ((_cgdf +_ecef )/2);_ddb :=y +ry *_b .Sin ((_cgdf +_ecef )/2);_eedf :=x +rx *_b .Cos (_ecef );_efgg :=y +ry *_b .Sin (_ecef );_dfef :=2*_aaegc -_gdda /2-_eedf /2;_cecf :=2*_ddb -_abd /2-_efgg /2;if _bgb ==0{if _bfg ._ecg {_bfg .LineTo (_gdda ,_abd );}else {_bfg .MoveTo (_gdda ,_abd );};};_bfg .QuadraticTo (_dfef ,_cecf ,_eedf ,_efgg );};};func _ccff (_accg string )(_aadd ,_gdfg ,_ebeb ,_fccg int ){_accg =_a .TrimPrefix (_accg ,"\u0023");_fccg =255;if len (_accg )==3{_bgdc :="\u00251\u0078\u0025\u0031\u0078\u0025\u0031x";_be .Sscanf (_accg ,_bgdc ,&_aadd ,&_gdfg ,&_ebeb );_aadd |=_aadd <<4;_gdfg |=_gdfg <<4;_ebeb |=_ebeb <<4;};if len (_accg )==6{_cga :="\u0025\u0030\u0032x\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_be .Sscanf (_accg ,_cga ,&_aadd ,&_gdfg ,&_ebeb );};if len (_accg )==8{_bceg :="\u0025\u00302\u0078\u0025\u00302\u0078\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_be .Sscanf (_accg ,_bceg ,&_aadd ,&_gdfg ,&_ebeb ,&_fccg );};return ;};func (_dge stops )Less (i ,j int )bool {return _dge [i ]._baa < _dge [j ]._baa };func _bbb (_cefa ,_ecbc ,_eefg ,_bfe ,_gdf ,_acd float64 )float64 {return _cefa *_bfe +_ecbc *_gdf +_eefg *_acd ;};func (_aga *Context )DrawRectangle (x ,y ,w ,h float64 ){_aga .NewSubPath ();_aga .MoveTo (x ,y );_aga .LineTo (x +w ,y );_aga .LineTo (x +w ,y +h );_aga .LineTo (x ,y +h );_aga .ClosePath ();};func (_afc *Context )SetStrokeRGBA (r ,g ,b ,a float64 ){_cfb :=_g .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_afc ._da =_agf (_cfb );};func (_cgb *Context )drawString (_geb *_gd .RGBA ,_dac string ,_cfgg ,_beg float64 ){_fgcf :=&_eb .Drawer {Dst :_geb ,Src :_gd .NewUniform (_cgb ._gfe ),Face :_cgb ._bbc .Tf .Face ,Dot :_dabb (_f .NewPoint (_cfgg ,_beg ))};_faa :=rune (-1);for _ ,_bdc :=range _dac {if _faa >=0{_fgcf .Dot .X +=_fgcf .Face .Kern (_faa ,_bdc );};_gfcf ,_bgg ,_dcc ,_gbg ,_cfgb :=_fgcf .Face .Glyph (_fgcf .Dot ,_bdc );if !_cfgb {continue ;};_agg :=_gfcf .Sub (_gfcf .Min );_bdcc :=_bg .BiLinear ;_edfd :=_cgb ._cac .Clone ();_edfd .Translate (float64 (_gfcf .Min .X ),float64 (_gfcf .Min .Y ));_egaf :=_af .Aff3 {_edfd [0],_edfd [3],_edfd [6],_edfd [1],_edfd [4],_edfd [7]};_bdcc .Transform (_fgcf .Dst ,_egaf ,_fgcf .Src ,_agg ,_bg .Over ,&_bg .Options {SrcMask :_bgg ,SrcMaskP :_dcc });_fgcf .Dot .X +=_gbg ;_faa =_bdc ;};};func (_cef *Context )Fill (){_cef .FillPreserve ();_cef .ClearPath ()};func (_dbd *Context )joiner ()_ff .Joiner {switch _dbd ._fga {case _fg .LineJoinBevel :return _ff .BevelJoiner ;case _fg .LineJoinRound :return _ff .RoundJoiner ;};return nil ;};func (_adeg *Context )NewSubPath (){if _adeg ._ecg {_adeg ._ega .Add1 (_dabb (_adeg ._ef ));};_adeg ._ecg =false ;};func _eab (_ccae float64 )float64 {return _ccae *_b .Pi /180};func _gacg (_gaab ,_gae ,_bdd ,_ffa ,_fbc ,_ged float64 )_fg .Gradient {_bcd :=circle {_gaab ,_gae ,_bdd };_cbfg :=circle {_ffa ,_fbc ,_ged };_aada :=circle {_ffa -_gaab ,_fbc -_gae ,_ged -_bdd };_dfd :=_bbb (_aada ._efb ,_aada ._efbc ,-_aada ._baed ,_aada ._efb ,_aada ._efbc ,_aada ._baed );var _cfcb float64 ;if _dfd !=0{_cfcb =1.0/_dfd ;};_dfg :=-_bcd ._baed ;_fgdg :=&radialGradient {_ecbg :_bcd ,_ced :_cbfg ,_cfbd :_aada ,_efa :_dfd ,_bcb :_cfcb ,_adc :_dfg };return _fgdg ;};func _gc (_fc ,_gca ,_cb ,_dd ,_cd ,_db ,_ga float64 )(_aa ,_gcad float64 ){_bf :=1-_ga ;_ec :=_bf *_bf ;_fbg :=2*_bf *_ga ;_ee :=_ga *_ga ;_aa =_ec *_fc +_fbg *_cb +_ee *_cd ;_gcad =_ec *_gca +_fbg *_dd +_ee *_db ;return ;};func (_afd *Context )SetRGBA255 (r ,g ,b ,a int ){_afd ._gfe =_g .NRGBA {uint8 (r ),uint8 (g ),uint8 (b ),uint8 (a )};_afd .setFillAndStrokeColor (_afd ._gfe );};func _abfa (_eecg ,_bga uint32 ,_fafe float64 )uint8 {return uint8 (int32 (float64 (_eecg )*(1.0-_fafe )+float64 (_bga )*_fafe )>>8);};func (_cba *linearGradient )ColorAt (x ,y int )_g .Color {if len (_cba ._fad )==0{return _g .Transparent ;};_dcfc ,_bcc :=float64 (x ),float64 (y );_ebea ,_fadf ,_ffea ,_adg :=_cba ._cce ,_cba ._gbc ,_cba ._egcb ,_cba ._aged ;_cfgf ,_cdf :=_ffea -_ebea ,_adg -_fadf ;if _cdf ==0&&_cfgf !=0{return _fgee ((_dcfc -_ebea )/_cfgf ,_cba ._fad );};if _cfgf ==0&&_cdf !=0{return _fgee ((_bcc -_fadf )/_cdf ,_cba ._fad );};_fgd :=_cfgf *(_dcfc -_ebea )+_cdf *(_bcc -_fadf );if _fgd < 0{return _cba ._fad [0]._fbdf ;};_fae :=_b .Hypot (_cfgf ,_cdf );_fef :=((_dcfc -_ebea )*-_cdf +(_bcc -_fadf )*_cfgf )/(_fae *_fae );_cdca ,_dgdbc :=_ebea +_fef *-_cdf ,_fadf +_fef *_cfgf ;_fag :=_b .Hypot (_dcfc -_cdca ,_bcc -_dgdbc )/_fae ;return _fgee (_fag ,_cba ._fad );};func (_abf *Context )fill (_cbdd _ff .Painter ){_dbbd :=_abf ._ega ;if _abf ._ecg {_dbbd =make (_ff .Path ,len (_abf ._ega ));copy (_dbbd ,_abf ._ega );_dbbd .Add1 (_dabb (_abf ._ef ));};_ddca :=_abf ._ffe ;_ddca .UseNonZeroWinding =_abf ._gdd ==_fg .FillRuleWinding ;_ddca .Clear ();_ddca .AddPath (_dbbd );_ddca .Rasterize (_cbdd );};func (_dbbdf *Context )InvertMask (){if _dbbdf ._de ==nil {_dbbdf ._de =_gd .NewAlpha (_dbbdf ._ad .Bounds ());}else {for _fce ,_caf :=range _dbbdf ._de .Pix {_dbbdf ._de .Pix [_fce ]=255-_caf ;};};};func (_dda *Context )FillPreserve (){var _gcb _ff .Painter ;if _dda ._de ==nil {if _eeb ,_fgc :=_dda ._bd .(*solidPattern );_fgc {_cfce :=_ff .NewRGBAPainter (_dda ._ad );_cfce .SetColor (_eeb ._ffeb );_gcb =_cfce ;};};if _gcb ==nil {_gcb =_ddab (_dda ._ad ,_dda ._de ,_dda ._bd );};_dda .fill (_gcb );};func (_dcd *Context )LineTo (x ,y float64 ){if !_dcd ._ecg {_dcd .MoveTo (x ,y );}else {x ,y =_dcd .Transform (x ,y );_afb :=_f .NewPoint (x ,y );_ddd :=_dabb (_afb );_dcd ._cbd .Add1 (_ddd );_dcd ._ega .Add1 (_ddd );_dcd ._efc =_afb ;};};func (_fgg *Context )SetRGBA (r ,g ,b ,a float64 ){_fgg ._gfe =_g .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_fgg .setFillAndStrokeColor (_fgg ._gfe );};func _gb (_gac ,_cgd ,_gaa ,_cge ,_bge ,_ddf ,_bee ,_dbb ,_eg float64 )(_ab ,_eee float64 ){_eag :=1-_eg ;_gbf :=_eag *_eag *_eag ;_dc :=3*_eag *_eag *_eg ;_ae :=3*_eag *_eg *_eg ;_ebg :=_eg *_eg *_eg ;_ab =_gbf *_gac +_dc *_gaa +_ae *_bge +_ebg *_bee ;_eee =_gbf *_cgd +_dc *_cge +_ae *_ddf +_ebg *_dbb ;return ;};func (_gag *Context )Height ()int {return _gag ._cbg };func (_dccd *Context )Transform (x ,y float64 )(_bfge ,_cdg float64 ){return _dccd ._cac .Transform (x ,y );};func (_eedg *Context )Identity (){_eedg ._cac =_f .IdentityMatrix ()};func (_ecgc *solidPattern )ColorAt (x ,y int )_g .Color {return _ecgc ._ffeb };func (_gad *Context )RotateAbout (angle ,x ,y float64 ){_gad .Translate (x ,y );_gad .Rotate (angle );_gad .Translate (-x ,-y );};func _ffg (_effc _ff .Path )[][]_f .Point {var _aeg [][]_f .Point ;var _ecaf []_f .Point ;var _deg ,_fcdc float64 ;for _bcbe :=0;_bcbe < len (_effc );{switch _effc [_bcbe ]{case 0:if len (_ecaf )> 0{_aeg =append (_aeg ,_ecaf );_ecaf =nil ;};_ead :=_dgc (_effc [_bcbe +1]);_cfge :=_dgc (_effc [_bcbe +2]);_ecaf =append (_ecaf ,_f .NewPoint (_ead ,_cfge ));_deg ,_fcdc =_ead ,_cfge ;_bcbe +=4;case 1:_ccb :=_dgc (_effc [_bcbe +1]);_dbc :=_dgc (_effc [_bcbe +2]);_ecaf =append (_ecaf ,_f .NewPoint (_ccb ,_dbc ));_deg ,_fcdc =_ccb ,_dbc ;_bcbe +=4;case 2:_eaa :=_dgc (_effc [_bcbe +1]);_dfeb :=_dgc (_effc [_bcbe +2]);_bdde :=_dgc (_effc [_bcbe +3]);_egag :=_dgc (_effc [_bcbe +4]);_gdac :=_bb (_deg ,_fcdc ,_eaa ,_dfeb ,_bdde ,_egag );_ecaf =append (_ecaf ,_gdac ...);_deg ,_fcdc =_bdde ,_egag ;_bcbe +=6;case 3:_daca :=_dgc (_effc [_bcbe +1]);_dgb :=_dgc (_effc [_bcbe +2]);_aca :=_dgc (_effc [_bcbe +3]);_ede :=_dgc (_effc [_bcbe +4]);_gaag :=_dgc (_effc [_bcbe +5]);_edff :=_dgc (_effc [_bcbe +6]);_efda :=_gaf (_deg ,_fcdc ,_daca ,_dgb ,_aca ,_ede ,_gaag ,_edff );_ecaf =append (_ecaf ,_efda ...);_deg ,_fcdc =_gaag ,_edff ;_bcbe +=8;default:_ag .Log .Debug ("\u0057\u0041\u0052\u004e: \u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0070\u0061\u0074\u0068\u003a\u0020%\u0076",_effc );return _aeg ;};};if len (_ecaf )> 0{_aeg =append (_aeg ,_ecaf );};return _aeg ;};func (_gbbd *Context )Matrix ()_f .Matrix {return _gbbd ._cac };func (_bec *Context )SetMatrix (m _f .Matrix ){_bec ._cac =m };func (_feb *Context )TextState ()*_fg .TextState {return _feb ._bbc }; |