mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-02 22:17:06 +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 (_cag "errors";_d "fmt";_fe "github.com/golang/freetype/raster";_b "github.com/unidoc/unipdf/v3/common";_ab "github.com/unidoc/unipdf/v3/internal/transform";_da "github.com/unidoc/unipdf/v3/render/internal/context";_bc "golang.org/x/image/draw";_e "golang.org/x/image/font";_g "golang.org/x/image/math/f64";_cdc "golang.org/x/image/math/fixed";_ca "image";_f "image/color";_de "image/draw";_cd "math";_cb "sort";_a "strings";);func (_gge *Context )TextState ()*_da .TextState {return _gge ._daf };func (_edc *Context )capper ()_fe .Capper {switch _edc ._efb {case _da .LineCapButt :return _fe .ButtCapper ;case _da .LineCapRound :return _fe .RoundCapper ;case _da .LineCapSquare :return _fe .SquareCapper ;};return nil ;};func (_bfbf *Context )MeasureString (s string )(_cddf ,_gad float64 ){_fbf :=&_e .Drawer {Face :_bfbf ._daf .Tf .Face };_gaf :=_fbf .MeasureString (s );return float64 (_gaf >>6),_bfbf ._daf .Tf .Size ;};func (_af *Context )SetLineWidth (lineWidth float64 ){_af ._fag =lineWidth };func (_gcgg *Context )SetMatrix (m _ab .Matrix ){_gcgg ._dde =m };func _dac (_fd ,_bb ,_eg ,_ae ,_cf ,_dbc ,_acc ,_baf float64 )[]_ab .Point {_fda :=(_cd .Hypot (_eg -_fd ,_ae -_bb )+_cd .Hypot (_cf -_eg ,_dbc -_ae )+_cd .Hypot (_acc -_cf ,_baf -_dbc ));_cbf :=int (_fda +0.5);if _cbf < 4{_cbf =4;};_gg :=float64 (_cbf )-1;_cbg :=make ([]_ab .Point ,_cbf );for _gag :=0;_gag < _cbf ;_gag ++{_cagg :=float64 (_gag )/_gg ;_bdf ,_cgg :=_bcg (_fd ,_bb ,_eg ,_ae ,_cf ,_dbc ,_acc ,_baf ,_cagg );_cbg [_gag ]=_ab .NewPoint (_bdf ,_cgg );};return _cbg ;};func (_bgfg *radialGradient )AddColorStop (offset float64 ,color _f .Color ){_bgfg ._baeg =append (_bgfg ._baeg ,stop {_fdc :offset ,_edde :color });_cb .Sort (_bgfg ._baeg );};func _bcg (_dd ,_ga ,_cde ,_cgd ,_gf ,_ecd ,_aba ,_fge ,_gd float64 )(_db ,_ea float64 ){_ba :=1-_gd ;_dae :=_ba *_ba *_ba ;_fab :=3*_ba *_ba *_gd ;_bg :=3*_ba *_gd *_gd ;_ddd :=_gd *_gd *_gd ;_db =_dae *_dd +_fab *_cde +_bg *_gf +_ddd *_aba ;_ea =_dae *_ga +_fab *_cgd +_bg *_ecd +_ddd *_fge ;return ;};func (_ecb *Context )SetLineJoin (lineJoin _da .LineJoin ){_ecb ._cgdb =lineJoin };func _abec (_degd ,_eeea uint32 ,_fgd float64 )uint8 {return uint8 (int32 (float64 (_degd )*(1.0-_fgd )+float64 (_eeea )*_fgd )>>8);};func (_cgf *Context )NewSubPath (){if _cgf ._adb {_cgf ._dfg .Add1 (_fcbe (_cgf ._cfa ));};_cgf ._adb =false ;};var (_dda =_bega (_f .White );_edd =_bega (_f .Black ););func (_fgc *Context )Height ()int {return _fgc ._ddb };func (_cbac *surfacePattern )ColorAt (x ,y int )_f .Color {_aagc :=_cbac ._ece .Bounds ();switch _cbac ._bcda {case _ddde :if y >=_aagc .Dy (){return _f .Transparent ;};case _gfe :if x >=_aagc .Dx (){return _f .Transparent ;};case _bcd :if x >=_aagc .Dx ()||y >=_aagc .Dy (){return _f .Transparent ;};};x =x %_aagc .Dx ()+_aagc .Min .X ;y =y %_aagc .Dy ()+_aagc .Min .Y ;return _cbac ._ece .At (x ,y );};func NewContextForImage (im _ca .Image )*Context {return NewContextForRGBA (_dcag (im ))};func _fef (_fffe [][]_ab .Point )_fe .Path {var _adag _fe .Path ;for _ ,_dca :=range _fffe {var _afdd _cdc .Point26_6 ;for _gbe ,_agae :=range _dca {_gaac :=_fcbe (_agae );if _gbe ==0{_adag .Start (_gaac );}else {_cgc :=_gaac .X -_afdd .X ;_aaa :=_gaac .Y -_afdd .Y ;if _cgc < 0{_cgc =-_cgc ;};if _aaa < 0{_aaa =-_aaa ;};if _cgc +_aaa > 8{_adag .Add1 (_gaac );};};_afdd =_gaac ;};};return _adag ;};type stops []stop ;func (_gbbd *Context )Scale (x ,y float64 ){_gbbd ._dde =_gbbd ._dde .Scale (x ,y )};func _accd (_bdc float64 )_cdc .Int26_6 {return _cdc .Int26_6 (_bdc *64)};func NewContext (width ,height int )*Context {return NewContextForRGBA (_ca .NewRGBA (_ca .Rect (0,0,width ,height )));};func _gdd (_dbfc ,_gcc ,_aged ,_edfd ,_ageda ,_caag float64 )_da .Gradient {_ggdgg :=circle {_dbfc ,_gcc ,_aged };_ffg :=circle {_edfd ,_ageda ,_caag };_dafb :=circle {_edfd -_dbfc ,_ageda -_gcc ,_caag -_aged };_eee :=_bcf (_dafb ._eagf ,_dafb ._adg ,-_dafb ._bfe ,_dafb ._eagf ,_dafb ._adg ,_dafb ._bfe );var _fffc float64 ;if _eee !=0{_fffc =1.0/_eee ;};_egcf :=-_ggdgg ._bfe ;_agea :=&radialGradient {_fgg :_ggdgg ,_aeba :_ffg ,_feaf :_dafb ,_def :_eee ,_bgd :_fffc ,_ecgg :_egcf };return _agea ;};type surfacePattern struct{_ece _ca .Image ;_bcda repeatOp ;};func _ecda (_babb _fe .Path ,_ega []float64 ,_aabd float64 )_fe .Path {return _fef (_adbb (_ebg (_babb ),_ega ,_aabd ));};func (_bafb *Context )InvertMask (){if _bafb ._fga ==nil {_bafb ._fga =_ca .NewAlpha (_bafb ._cdd .Bounds ());}else {for _ecbf ,_gee :=range _bafb ._fga .Pix {_bafb ._fga .Pix [_ecbf ]=255-_gee ;};};};func (_dbeg stops )Swap (i ,j int ){_dbeg [i ],_dbeg [j ]=_dbeg [j ],_dbeg [i ]};type radialGradient struct{_fgg ,_aeba ,_feaf circle ;_def ,_bgd float64 ;_ecgg float64 ;_baeg stops ;};func (_gagf *Context )ResetClip (){_gagf ._fga =nil };func (_efe *Context )LineWidth ()float64 {return _efe ._fag };type Context struct{_dee int ;_ddb int ;_age *_fe .Rasterizer ;_cdd *_ca .RGBA ;_fga *_ca .Alpha ;_bca _f .Color ;_daeb _da .Pattern ;_dc _da .Pattern ;_gfg _fe .Path ;_dfg _fe .Path ;_cfa _ab .Point ;_fbe _ab .Point ;_adb bool ;_edb []float64 ;_dbd float64 ;_fag float64 ;_efb _da .LineCap ;_cgdb _da .LineJoin ;_fgaf _da .FillRule ;_dde _ab .Matrix ;_daf *_da .TextState ;_dfc []*Context ;};func (_faga *Context )AsMask ()*_ca .Alpha {_dade :=_ca .NewAlpha (_faga ._cdd .Bounds ());_bc .Draw (_dade ,_faga ._cdd .Bounds (),_faga ._cdd ,_ca .Point {},_bc .Src );return _dade ;};func (_ffe *Context )DrawEllipse (x ,y ,rx ,ry float64 ){_ffe .NewSubPath ();_ffe .DrawEllipticalArc (x ,y ,rx ,ry ,0,2*_cd .Pi );_ffe .ClosePath ();};func _bagc (_bga *_ca .RGBA ,_bec *_ca .Alpha ,_gacg _da .Pattern )*patternPainter {return &patternPainter {_bga ,_bec ,_gacg };};func (_bag *Context )ScaleAbout (sx ,sy ,x ,y float64 ){_bag .Translate (x ,y );_bag .Scale (sx ,sy );_bag .Translate (-x ,-y );};func _eggb (_cdfag _cdc .Int26_6 )float64 {const _begb ,_fdggd =6,1<<6-1;if _cdfag >=0{return float64 (_cdfag >>_begb )+float64 (_cdfag &_fdggd )/64;};_cdfag =-_cdfag ;if _cdfag >=0{return -(float64 (_cdfag >>_begb )+float64 (_cdfag &_fdggd )/64);};return 0;};func (_bf *Context )SetRGB (r ,g ,b float64 ){_bf .SetRGBA (r ,g ,b ,1)};func (_cab *Context )SetDash (dashes ...float64 ){_cab ._edb =dashes };func (_gffa *Context )Matrix ()_ab .Matrix {return _gffa ._dde };func (_aeb *Context )stroke (_baca _fe .Painter ){_adc :=_aeb ._gfg ;if len (_aeb ._edb )> 0{_adc =_ecda (_adc ,_aeb ._edb ,_aeb ._dbd );}else {_adc =_fef (_ebg (_adc ));};_ecg :=_aeb ._age ;_ecg .UseNonZeroWinding =true ;_ecg .Clear ();_ecg .AddStroke (_adc ,_accd (_aeb ._fag ),_aeb .capper (),_aeb .joiner ());_ecg .Rasterize (_baca );};func (_ggfc *Context )DrawImage (im _ca .Image ,x ,y int ){_ggfc .DrawImageAnchored (im ,x ,y ,0,0)};func (_dagc *patternPainter )Paint (ss []_fe .Span ,done bool ){_aeg :=_dagc ._fcfdc .Bounds ();for _ ,_ddge :=range ss {if _ddge .Y < _aeg .Min .Y {continue ;};if _ddge .Y >=_aeg .Max .Y {return ;};if _ddge .X0 < _aeg .Min .X {_ddge .X0 =_aeg .Min .X ;};if _ddge .X1 > _aeg .Max .X {_ddge .X1 =_aeg .Max .X ;};if _ddge .X0 >=_ddge .X1 {continue ;};const _egf =1<<16-1;_effe :=_ddge .Y -_dagc ._fcfdc .Rect .Min .Y ;_ddbb :=_ddge .X0 -_dagc ._fcfdc .Rect .Min .X ;_fgce :=(_ddge .Y -_dagc ._fcfdc .Rect .Min .Y )*_dagc ._fcfdc .Stride +(_ddge .X0 -_dagc ._fcfdc .Rect .Min .X )*4;_abcg :=_fgce +(_ddge .X1 -_ddge .X0 )*4;for _fdgg ,_dbg :=_fgce ,_ddbb ;_fdgg < _abcg ;_fdgg ,_dbg =_fdgg +4,_dbg +1{_dba :=_ddge .Alpha ;if _dagc ._cgfb !=nil {_dba =_dba *uint32 (_dagc ._cgfb .AlphaAt (_dbg ,_effe ).A )/255;if _dba ==0{continue ;};};_edg :=_dagc ._cae .ColorAt (_dbg ,_effe );_gefd ,_cbed ,_baed ,_dfed :=_edg .RGBA ();_abaf :=uint32 (_dagc ._fcfdc .Pix [_fdgg +0]);_aecd :=uint32 (_dagc ._fcfdc .Pix [_fdgg +1]);_cddfg :=uint32 (_dagc ._fcfdc .Pix [_fdgg +2]);_bgdf :=uint32 (_dagc ._fcfdc .Pix [_fdgg +3]);_dcef :=(_egf -(_dfed *_dba /_egf ))*0x101;_dagc ._fcfdc .Pix [_fdgg +0]=uint8 ((_abaf *_dcef +_gefd *_dba )/_egf >>8);_dagc ._fcfdc .Pix [_fdgg +1]=uint8 ((_aecd *_dcef +_cbed *_dba )/_egf >>8);_dagc ._fcfdc .Pix [_fdgg +2]=uint8 ((_cddfg *_dcef +_baed *_dba )/_egf >>8);_dagc ._fcfdc .Pix [_fdgg +3]=uint8 ((_bgdf *_dcef +_dfed *_dba )/_egf >>8);};};};type solidPattern struct{_bfab _f .Color };func _fcbe (_edbc _ab .Point )_cdc .Point26_6 {return _cdc .Point26_6 {X :_accd (_edbc .X ),Y :_accd (_edbc .Y )};};type patternPainter struct{_fcfdc *_ca .RGBA ;_cgfb *_ca .Alpha ;_cae _da .Pattern ;};const (_ebd repeatOp =iota ;_ddde ;_gfe ;_bcd ;);type linearGradient struct{_aada ,_dfe ,_ddgg ,_fcb float64 ;_fgb stops ;};func _bbgd (_affd _ca .Image ,_affg repeatOp )_da .Pattern {return &surfacePattern {_ece :_affd ,_bcda :_affg };};func (_dbe *Context )Width ()int {return _dbe ._dee };func (_faee *Context )Rotate (angle float64 ){_faee ._dde =_faee ._dde .Rotate (angle )};func _ebg (_cgbgf _fe .Path )[][]_ab .Point {var _egg [][]_ab .Point ;var _ggg []_ab .Point ;var _dccf ,_dbdea float64 ;for _ddga :=0;_ddga < len (_cgbgf );{switch _cgbgf [_ddga ]{case 0:if len (_ggg )> 0{_egg =append (_egg ,_ggg );_ggg =nil ;};_cegg :=_eggb (_cgbgf [_ddga +1]);_cgbb :=_eggb (_cgbgf [_ddga +2]);_ggg =append (_ggg ,_ab .NewPoint (_cegg ,_cgbb ));_dccf ,_dbdea =_cegg ,_cgbb ;_ddga +=4;case 1:_bbcg :=_eggb (_cgbgf [_ddga +1]);_cda :=_eggb (_cgbgf [_ddga +2]);_ggg =append (_ggg ,_ab .NewPoint (_bbcg ,_cda ));_dccf ,_dbdea =_bbcg ,_cda ;_ddga +=4;case 2:_baea :=_eggb (_cgbgf [_ddga +1]);_eff :=_eggb (_cgbgf [_ddga +2]);_cggf :=_eggb (_cgbgf [_ddga +3]);_eecb :=_eggb (_cgbgf [_ddga +4]);_ebb :=_cdcc (_dccf ,_dbdea ,_baea ,_eff ,_cggf ,_eecb );_ggg =append (_ggg ,_ebb ...);_dccf ,_dbdea =_cggf ,_eecb ;_ddga +=6;case 3:_gfgc :=_eggb (_cgbgf [_ddga +1]);_cdfdb :=_eggb (_cgbgf [_ddga +2]);_gecc :=_eggb (_cgbgf [_ddga +3]);_eaf :=_eggb (_cgbgf [_ddga +4]);_aea :=_eggb (_cgbgf [_ddga +5]);_gfc :=_eggb (_cgbgf [_ddga +6]);_fcd :=_dac (_dccf ,_dbdea ,_gfgc ,_cdfdb ,_gecc ,_eaf ,_aea ,_gfc );_ggg =append (_ggg ,_fcd ...);_dccf ,_dbdea =_aea ,_gfc ;_ddga +=8;default:_b .Log .Debug ("\u0057\u0041\u0052\u004e: \u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0070\u0061\u0074\u0068\u003a\u0020%\u0076",_cgbgf );return _egg ;};};if len (_ggg )> 0{_egg =append (_egg ,_ggg );};return _egg ;};func (_ceb *Context )DrawPoint (x ,y ,r float64 ){_ceb .Push ();_caf ,_ddg :=_ceb .Transform (x ,y );_ceb .Identity ();_ceb .DrawCircle (_caf ,_ddg ,r );_ceb .Pop ();};func (_dcd *Context )SetStrokeStyle (pattern _da .Pattern ){_dcd ._dc =pattern };func (_agg *Context )StrokePreserve (){var _bbe _fe .Painter ;if _agg ._fga ==nil {if _beb ,_dbcc :=_agg ._dc .(*solidPattern );_dbcc {_eea :=_fe .NewRGBAPainter (_agg ._cdd );_eea .SetColor (_beb ._bfab );_bbe =_eea ;};};if _bbe ==nil {_bbe =_bagc (_agg ._cdd ,_agg ._fga ,_agg ._dc );};_agg .stroke (_bbe );};func (_aga *Context )SetRGB255 (r ,g ,b int ){_aga .SetRGBA255 (r ,g ,b ,255)};func (_cgb *Context )DrawArc (x ,y ,r ,angle1 ,angle2 float64 ){_cgb .DrawEllipticalArc (x ,y ,r ,r ,angle1 ,angle2 );};func _gfcf (_fbcb string )(_dbfd ,_cef ,_degc ,_gca int ){_fbcb =_a .TrimPrefix (_fbcb ,"\u0023");_gca =255;if len (_fbcb )==3{_bgab :="\u00251\u0078\u0025\u0031\u0078\u0025\u0031x";_d .Sscanf (_fbcb ,_bgab ,&_dbfd ,&_cef ,&_degc );_dbfd |=_dbfd <<4;_cef |=_cef <<4;_degc |=_degc <<4;};if len (_fbcb )==6{_cbd :="\u0025\u0030\u0032x\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_d .Sscanf (_fbcb ,_cbd ,&_dbfd ,&_cef ,&_degc );};if len (_fbcb )==8{_gggb :="\u0025\u00302\u0078\u0025\u00302\u0078\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_d .Sscanf (_fbcb ,_gggb ,&_dbfd ,&_cef ,&_degc ,&_gca );};return ;};func (_aag *Context )Clear (){_ecf :=_ca .NewUniform (_aag ._bca );_bc .Draw (_aag ._cdd ,_aag ._cdd .Bounds (),_ecf ,_ca .Point {},_bc .Src );};func (_abeb *Context )Image ()_ca .Image {return _abeb ._cdd };func (_gb *Context )SetColor (c _f .Color ){_gb .setFillAndStrokeColor (c )};func (_bge *Context )ClosePath (){if _bge ._adb {_fdd :=_fcbe (_bge ._cfa );_bge ._gfg .Add1 (_fdd );_bge ._dfg .Add1 (_fdd );_bge ._fbe =_bge ._cfa ;};};func NewContextForRGBA (im *_ca .RGBA )*Context {_abc :=im .Bounds ().Size ().X ;_ada :=im .Bounds ().Size ().Y ;return &Context {_dee :_abc ,_ddb :_ada ,_age :_fe .NewRasterizer (_abc ,_ada ),_cdd :im ,_bca :_f .Transparent ,_daeb :_dda ,_dc :_edd ,_fag :1,_fgaf :_da .FillRuleWinding ,_dde :_ab .IdentityMatrix (),_daf :_da .NewTextState ()};};func (_bbg *Context )QuadraticTo (x1 ,y1 ,x2 ,y2 float64 ){if !_bbg ._adb {_bbg .MoveTo (x1 ,y1 );};x1 ,y1 =_bbg .Transform (x1 ,y1 );x2 ,y2 =_bbg .Transform (x2 ,y2 );_aab :=_ab .NewPoint (x1 ,y1 );_caa :=_ab .NewPoint (x2 ,y2 );_bbc :=_fcbe (_aab );_gfa :=_fcbe (_caa );_bbg ._gfg .Add2 (_bbc ,_gfa );_bbg ._dfg .Add2 (_bbc ,_gfa );_bbg ._fbe =_caa ;};func (_cfd *Context )Pop (){_ccac :=*_cfd ;_abcb :=_cfd ._dfc ;_ecc :=_abcb [len (_abcb )-1];*_cfd =*_ecc ;_cfd ._gfg =_ccac ._gfg ;_cfd ._dfg =_ccac ._dfg ;_cfd ._cfa =_ccac ._cfa ;_cfd ._fbe =_ccac ._fbe ;_cfd ._adb =_ccac ._adb ;_cfd ._daf =_ccac ._daf ;};func (_fee *Context )Fill (){_fee .FillPreserve ();_fee .ClearPath ()};func _dcag (_cgdbg _ca .Image )*_ca .RGBA {_eed :=_cgdbg .Bounds ();_abb :=_ca .NewRGBA (_eed );_de .Draw (_abb ,_eed ,_cgdbg ,_eed .Min ,_de .Src );return _abb ;};func (_bgf *Context )SetFillStyle (pattern _da .Pattern ){if _efc ,_cbgg :=pattern .(*solidPattern );_cbgg {_bgf ._bca =_efc ._bfab ;};_bgf ._daeb =pattern ;};type stop struct{_fdc float64 ;_edde _f .Color ;};func (_gfdd *Context )CubicTo (x1 ,y1 ,x2 ,y2 ,x3 ,y3 float64 ){if !_gfdd ._adb {_gfdd .MoveTo (x1 ,y1 );};_dga ,_bfd :=_gfdd ._fbe .X ,_gfdd ._fbe .Y ;x1 ,y1 =_gfdd .Transform (x1 ,y1 );x2 ,y2 =_gfdd .Transform (x2 ,y2 );x3 ,y3 =_gfdd .Transform (x3 ,y3 );_cce :=_dac (_dga ,_bfd ,x1 ,y1 ,x2 ,y2 ,x3 ,y3 );_cac :=_fcbe (_gfdd ._fbe );for _ ,_ede :=range _cce [1:]{_gbg :=_fcbe (_ede );if _gbg ==_cac {continue ;};_cac =_gbg ;_gfdd ._gfg .Add1 (_gbg );_gfdd ._dfg .Add1 (_gbg );_gfdd ._fbe =_ede ;};};func (_ced *Context )drawString (_fgea *_ca .RGBA ,_fgeb string ,_aad ,_gef float64 ){_bef :=&_e .Drawer {Dst :_fgea ,Src :_ca .NewUniform (_ced ._bca ),Face :_ced ._daf .Tf .Face ,Dot :_fcbe (_ab .NewPoint (_aad ,_gef ))};_abee :=rune (-1);for _ ,_afa :=range _fgeb {if _abee >=0{_bef .Dot .X +=_bef .Face .Kern (_abee ,_afa );};_eaa ,_cdfd ,_aggd ,_dfgd ,_ecff :=_bef .Face .Glyph (_bef .Dot ,_afa );if !_ecff {continue ;};_gfgd :=_eaa .Sub (_eaa .Min );_agad :=_bc .BiLinear ;_aff :=_ced ._dde .Clone ().Translate (float64 (_eaa .Min .X ),float64 (_eaa .Min .Y ));_aecf :=_g .Aff3 {_aff [0],_aff [3],_aff [6],_aff [1],_aff [4],_aff [7]};_agad .Transform (_bef .Dst ,_aecf ,_bef .Src ,_gfgd ,_bc .Over ,&_bc .Options {SrcMask :_cdfd ,SrcMaskP :_aggd });_bef .Dot .X +=_dfgd ;_abee =_afa ;};};func (_aae *Context )Shear (x ,y float64 ){_aae ._dde .Shear (x ,y )};func (_cgdbc *Context )ClearPath (){_cgdbc ._gfg .Clear ();_cgdbc ._dfg .Clear ();_cgdbc ._adb =false };func (_dbde *Context )joiner ()_fe .Joiner {switch _dbde ._cgdb {case _da .LineJoinBevel :return _fe .BevelJoiner ;case _da .LineJoinRound :return _fe .RoundJoiner ;};return nil ;};func _abfa (_gac ,_geca ,_gebd ,_deg float64 )_da .Gradient {_dbfb :=&linearGradient {_aada :_gac ,_dfe :_geca ,_ddgg :_gebd ,_fcb :_deg };return _dbfb ;};func (_eddb *radialGradient )ColorAt (x ,y int )_f .Color {if len (_eddb ._baeg )==0{return _f .Transparent ;};_dfa ,_dbcd :=float64 (x )+0.5-_eddb ._fgg ._eagf ,float64 (y )+0.5-_eddb ._fgg ._adg ;_ege :=_bcf (_dfa ,_dbcd ,_eddb ._fgg ._bfe ,_eddb ._feaf ._eagf ,_eddb ._feaf ._adg ,_eddb ._feaf ._bfe );_egb :=_bcf (_dfa ,_dbcd ,-_eddb ._fgg ._bfe ,_dfa ,_dbcd ,_eddb ._fgg ._bfe );if _eddb ._def ==0{if _ege ==0{return _f .Transparent ;};_cdfa :=0.5*_egb /_ege ;if _cdfa *_eddb ._feaf ._bfe >=_eddb ._ecgg {return _egba (_cdfa ,_eddb ._baeg );};return _f .Transparent ;};_aca :=_bcf (_ege ,_eddb ._def ,0,_ege ,-_egb ,0);if _aca >=0{_aed :=_cd .Sqrt (_aca );_acf :=(_ege +_aed )*_eddb ._bgd ;_eaaa :=(_ege -_aed )*_eddb ._bgd ;if _acf *_eddb ._feaf ._bfe >=_eddb ._ecgg {return _egba (_acf ,_eddb ._baeg );}else if _eaaa *_eddb ._feaf ._bfe >=_eddb ._ecgg {return _egba (_eaaa ,_eddb ._baeg );};};return _f .Transparent ;};func _cdec (_cgeea float64 )float64 {return _cgeea *_cd .Pi /180};func (_dcc *Context )DrawLine (x1 ,y1 ,x2 ,y2 float64 ){_dcc .MoveTo (x1 ,y1 );_dcc .LineTo (x2 ,y2 )};func (_gbdb *Context )DrawRoundedRectangle (x ,y ,w ,h ,r float64 ){_dge ,_edcc ,_cga ,_efcc :=x ,x +r ,x +w -r ,x +w ;_agf ,_fcf ,_eca ,_ccbf :=y ,y +r ,y +h -r ,y +h ;_gbdb .NewSubPath ();_gbdb .MoveTo (_edcc ,_agf );_gbdb .LineTo (_cga ,_agf );_gbdb .DrawArc (_cga ,_fcf ,r ,_cdec (270),_cdec (360));_gbdb .LineTo (_efcc ,_eca );_gbdb .DrawArc (_cga ,_eca ,r ,_cdec (0),_cdec (90));_gbdb .LineTo (_edcc ,_ccbf );_gbdb .DrawArc (_edcc ,_eca ,r ,_cdec (90),_cdec (180));_gbdb .LineTo (_dge ,_fcf );_gbdb .DrawArc (_edcc ,_fcf ,r ,_cdec (180),_cdec (270));_gbdb .ClosePath ();};func _fa (_ce ,_dg ,_fg ,_bd ,_ad ,_ge ,_ag float64 )(_geb ,_ff float64 ){_ec :=1-_ag ;_be :=_ec *_ec ;_fec :=2*_ec *_ag ;_ee :=_ag *_ag ;_geb =_be *_ce +_fec *_fg +_ee *_ad ;_ff =_be *_dg +_fec *_bd +_ee *_ge ;return ;};func (_gafg *linearGradient )AddColorStop (offset float64 ,color _f .Color ){_gafg ._fgb =append (_gafg ._fgb ,stop {_fdc :offset ,_edde :color });_cb .Sort (_gafg ._fgb );};func (_egd *Context )Push (){_bad :=*_egd ;_egd ._dfc =append (_egd ._dfc ,&_bad )};func (_edf *Context )DrawImageAnchored (im _ca .Image ,x ,y int ,ax ,ay float64 ){_bdb :=im .Bounds ().Size ();x -=int (ax *float64 (_bdb .X ));y -=int (ay *float64 (_bdb .Y ));_egc :=_bc .BiLinear ;_daba :=_edf ._dde .Clone ().Translate (float64 (x ),float64 (y ));_cgbg :=_g .Aff3 {_daba [0],_daba [3],_daba [6],_daba [1],_daba [4],_daba [7]};if _edf ._fga ==nil {_egc .Transform (_edf ._cdd ,_cgbg ,im ,im .Bounds (),_bc .Over ,nil );}else {_egc .Transform (_edf ._cdd ,_cgbg ,im ,im .Bounds (),_bc .Over ,&_bc .Options {DstMask :_edf ._fga ,DstMaskP :_ca .Point {}});};};func (_egea *solidPattern )ColorAt (x ,y int )_f .Color {return _egea ._bfab };func (_efgd *Context )ShearAbout (sx ,sy ,x ,y float64 ){_efgd .Translate (x ,y );_efgd .Shear (sx ,sy );_efgd .Translate (-x ,-y );};func (_afc *Context )SetRGBA255 (r ,g ,b ,a int ){_afc ._bca =_f .NRGBA {uint8 (r ),uint8 (g ),uint8 (b ),uint8 (a )};_afc .setFillAndStrokeColor (_afc ._bca );};func _bcf (_cbgd ,_dcgd ,_bagd ,_ecaf ,_bace ,_ffd float64 )float64 {return _cbgd *_ecaf +_dcgd *_bace +_bagd *_ffd ;};func (_aece *Context )MoveTo (x ,y float64 ){if _aece ._adb {_aece ._dfg .Add1 (_fcbe (_aece ._cfa ));};x ,y =_aece .Transform (x ,y );_gff :=_ab .NewPoint (x ,y );_bdg :=_fcbe (_gff );_aece ._gfg .Start (_bdg );_aece ._dfg .Start (_bdg );_aece ._cfa =_gff ;_aece ._fbe =_gff ;_aece ._adb =true ;};func (_fae *Context )setFillAndStrokeColor (_bdfa _f .Color ){_fae ._bca =_bdfa ;_fae ._daeb =_bega (_bdfa );_fae ._dc =_bega (_bdfa );};func (_feea *Context )RotateAbout (angle ,x ,y float64 ){_feea .Translate (x ,y );_feea .Rotate (angle );_feea .Translate (-x ,-y );};func (_gab *Context )Translate (x ,y float64 ){_gab ._dde =_gab ._dde .Translate (x ,y )};func _adbb (_gce [][]_ab .Point ,_fcbf []float64 ,_gbge float64 )[][]_ab .Point {var _ecge [][]_ab .Point ;if len (_fcbf )==0{return _gce ;};if len (_fcbf )==1{_fcbf =append (_fcbf ,_fcbf [0]);};for _ ,_fdg :=range _gce {if len (_fdg )< 2{continue ;};_cgbc :=_fdg [0];_bcge :=1;_cfad :=0;_dfgb :=0.0;if _gbge !=0{var _ffa float64 ;for _ ,_ebbe :=range _fcbf {_ffa +=_ebbe ;};_gbge =_cd .Mod (_gbge ,_ffa );if _gbge < 0{_gbge +=_ffa ;};for _dacg ,_agb :=range _fcbf {_gbge -=_agb ;if _gbge < 0{_cfad =_dacg ;_dfgb =_agb +_gbge ;break ;};};};var _adf []_ab .Point ;_adf =append (_adf ,_cgbc );for _bcge < len (_fdg ){_gace :=_fcbf [_cfad ];_fdcd :=_fdg [_bcge ];_fgcc :=_cgbc .Distance (_fdcd );_cgaa :=_gace -_dfgb ;if _fgcc > _cgaa {_efcg :=_cgaa /_fgcc ;_gddc :=_cgbc .Interpolate (_fdcd ,_efcg );_adf =append (_adf ,_gddc );if _cfad %2==0&&len (_adf )> 1{_ecge =append (_ecge ,_adf );};_adf =nil ;_adf =append (_adf ,_gddc );_dfgb =0;_cgbc =_gddc ;_cfad =(_cfad +1)%len (_fcbf );}else {_adf =append (_adf ,_fdcd );_cgbc =_fdcd ;_dfgb +=_fgcc ;_bcge ++;};};if _cfad %2==0&&len (_adf )> 1{_ecge =append (_ecge ,_adf );};};return _ecge ;};func (_fde *Context )SetLineCap (lineCap _da .LineCap ){_fde ._efb =lineCap };func (_afd *Context )SetMask (mask *_ca .Alpha )error {if mask .Bounds ().Size ()!=_afd ._cdd .Bounds ().Size (){return _cag .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");};_afd ._fga =mask ;return nil ;};func (_dgg *Context )DrawCircle (x ,y ,r float64 ){_dgg .NewSubPath ();_dgg .DrawEllipticalArc (x ,y ,r ,r ,0,2*_cd .Pi );_dgg .ClosePath ();};func (_gcg *Context )DrawStringAnchored (s string ,x ,y ,ax ,ay float64 ){_ecag ,_gcgb :=_gcg .MeasureString (s );x -=ax *_ecag ;y +=ay *_gcgb ;if _gcg ._fga ==nil {_gcg .drawString (_gcg ._cdd ,s ,x ,y );}else {_ggdg :=_ca .NewRGBA (_ca .Rect (0,0,_gcg ._dee ,_gcg ._ddb ));_gcg .drawString (_ggdg ,s ,x ,y );_bc .DrawMask (_gcg ._cdd ,_gcg ._cdd .Bounds (),_ggdg ,_ca .Point {},_gcg ._fga ,_ca .Point {},_bc .Over );};};func _cdcc (_abe ,_ed ,_cc ,_df ,_gc ,_fb float64 )[]_ab .Point {_ac :=(_cd .Hypot (_cc -_abe ,_df -_ed )+_cd .Hypot (_gc -_cc ,_fb -_df ));_cg :=int (_ac +0.5);if _cg < 4{_cg =4;};_aa :=float64 (_cg )-1;_faf :=make ([]_ab .Point ,_cg );for _ceg :=0;_ceg < _cg ;_ceg ++{_ef :=float64 (_ceg )/_aa ;_cdcd ,_eef :=_fa (_abe ,_ed ,_cc ,_df ,_gc ,_fb ,_ef );_faf [_ceg ]=_ab .NewPoint (_cdcd ,_eef );};return _faf ;};type repeatOp int ;func (_cegf *Context )Transform (x ,y float64 )(_gfde ,_agc float64 ){return _cegf ._dde .Transform (x ,y );};func (_gfd *Context )SetStrokeRGBA (r ,g ,b ,a float64 ){_dbfg :=_f .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_gfd ._dc =_bega (_dbfg );};func (_agd *Context )FillPreserve (){var _cba _fe .Painter ;if _agd ._fga ==nil {if _cgdg ,_cge :=_agd ._daeb .(*solidPattern );_cge {_cgee :=_fe .NewRGBAPainter (_agd ._cdd );_cgee .SetColor (_cgdg ._bfab );_cba =_cgee ;};};if _cba ==nil {_cba =_bagc (_agd ._cdd ,_agd ._fga ,_agd ._daeb );};_agd .fill (_cba );};func (_eda *Context )SetRGBA (r ,g ,b ,a float64 ){_eda ._bca =_f .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_eda .setFillAndStrokeColor (_eda ._bca );};func (_cbb *Context )Stroke (){_cbb .StrokePreserve ();_cbb .ClearPath ()};func _egba (_dbb float64 ,_cfb stops )_f .Color {if _dbb <=0.0||len (_cfb )==1{return _cfb [0]._edde ;};_fbc :=_cfb [len (_cfb )-1];if _dbb >=_fbc ._fdc {return _fbc ._edde ;};for _aade ,_bba :=range _cfb [1:]{if _dbb < _bba ._fdc {_dbb =(_dbb -_cfb [_aade ]._fdc )/(_bba ._fdc -_cfb [_aade ]._fdc );return _abea (_cfb [_aade ]._edde ,_bba ._edde ,_dbb );};};return _fbc ._edde ;};func (_gaa *Context )DrawEllipticalArc (x ,y ,rx ,ry ,angle1 ,angle2 float64 ){const _dab =16;for _ecdd :=0;_ecdd < _dab ;_ecdd ++{_bfa :=float64 (_ecdd +0)/_dab ;_dgd :=float64 (_ecdd +1)/_dab ;_fgafa :=angle1 +(angle2 -angle1 )*_bfa ;_cdf :=angle1 +(angle2 -angle1 )*_dgd ;_baaf :=x +rx *_cd .Cos (_fgafa );_gda :=y +ry *_cd .Sin (_fgafa );_cca :=x +rx *_cd .Cos ((_fgafa +_cdf )/2);_gbb :=y +ry *_cd .Sin ((_fgafa +_cdf )/2);_gbdd :=x +rx *_cd .Cos (_cdf );_eb :=y +ry *_cd .Sin (_cdf );_gdf :=2*_cca -_baaf /2-_gbdd /2;_ggf :=2*_gbb -_gda /2-_eb /2;if _ecdd ==0{if _gaa ._adb {_gaa .LineTo (_baaf ,_gda );}else {_gaa .MoveTo (_baaf ,_gda );};};_gaa .QuadraticTo (_gdf ,_ggf ,_gbdd ,_eb );};};func _abea (_bde ,_edae _f .Color ,_geaf float64 )_f .Color {_dce ,_dfb ,_bgc ,_egda :=_bde .RGBA ();_bgcg ,_bafd ,_afdc ,_edfg :=_edae .RGBA ();return _f .RGBA {_abec (_dce ,_bgcg ,_geaf ),_abec (_dfb ,_bafd ,_geaf ),_abec (_bgc ,_afdc ,_geaf ),_abec (_egda ,_edfg ,_geaf )};};func (_bae *Context )LineTo (x ,y float64 ){if !_bae ._adb {_bae .MoveTo (x ,y );}else {x ,y =_bae .Transform (x ,y );_ggb :=_ab .NewPoint (x ,y );_dcb :=_fcbe (_ggb );_bae ._gfg .Add1 (_dcb );_bae ._dfg .Add1 (_dcb );_bae ._fbe =_ggb ;};};func (_gbd *Context )fill (_baa _fe .Painter ){_ddda :=_gbd ._dfg ;if _gbd ._adb {_ddda =make (_fe .Path ,len (_gbd ._dfg ));copy (_ddda ,_gbd ._dfg );_ddda .Add1 (_fcbe (_gbd ._cfa ));};_eec :=_gbd ._age ;_eec .UseNonZeroWinding =_gbd ._fgaf ==_da .FillRuleWinding ;_eec .Clear ();_eec .AddPath (_ddda );_eec .Rasterize (_baa );};func (_geed *Context )drawRegularPolygon (_bfb int ,_dag ,_ecaa ,_afe ,_ggd float64 ){_efg :=2*_cd .Pi /float64 (_bfb );_ggd -=_cd .Pi /2;if _bfb %2==0{_ggd +=_efg /2;};_geed .NewSubPath ();for _fff :=0;_fff < _bfb ;_fff ++{_cacf :=_ggd +_efg *float64 (_fff );_geed .LineTo (_dag +_afe *_cd .Cos (_cacf ),_ecaa +_afe *_cd .Sin (_cacf ));};_geed .ClosePath ();};func (_cdeg stops )Less (i ,j int )bool {return _cdeg [i ]._fdc < _cdeg [j ]._fdc };func (_gea *linearGradient )ColorAt (x ,y int )_f .Color {if len (_gea ._fgb )==0{return _f .Transparent ;};_eag ,_cbe :=float64 (x ),float64 (y );_gec ,_fcfd ,_cdce ,_eba :=_gea ._aada ,_gea ._dfe ,_gea ._ddgg ,_gea ._fcb ;_add ,_bbeb :=_cdce -_gec ,_eba -_fcfd ;if _bbeb ==0&&_add !=0{return _egba ((_eag -_gec )/_add ,_gea ._fgb );};if _add ==0&&_bbeb !=0{return _egba ((_cbe -_fcfd )/_bbeb ,_gea ._fgb );};_bdfb :=_add *(_eag -_gec )+_bbeb *(_cbe -_fcfd );if _bdfb < 0{return _gea ._fgb [0]._edde ;};_dgb :=_cd .Hypot (_add ,_bbeb );_fbfe :=((_eag -_gec )*-_bbeb +(_cbe -_fcfd )*_add )/(_dgb *_dgb );_bbec ,_ffb :=_gec +_fbfe *-_bbeb ,_fcfd +_fbfe *_add ;_bbfd :=_cd .Hypot (_eag -_bbec ,_cbe -_ffb )/_dgb ;return _egba (_bbfd ,_gea ._fgb );};func (_dbf *Context )SetFillRule (fillRule _da .FillRule ){_dbf ._fgaf =fillRule };func (_bab *Context )SetPixel (x ,y int ){_bab ._cdd .Set (x ,y ,_bab ._bca )};func (_dadf *Context )Identity (){_dadf ._dde =_ab .IdentityMatrix ()};func (_eae *Context )ClipPreserve (){_cbgc :=_ca .NewAlpha (_ca .Rect (0,0,_eae ._dee ,_eae ._ddb ));_dad :=_fe .NewAlphaOverPainter (_cbgc );_eae .fill (_dad );if _eae ._fga ==nil {_eae ._fga =_cbgc ;}else {_dcg :=_ca .NewAlpha (_ca .Rect (0,0,_eae ._dee ,_eae ._ddb ));_bc .DrawMask (_dcg ,_dcg .Bounds (),_cbgc ,_ca .Point {},_eae ._fga ,_ca .Point {},_bc .Over );_eae ._fga =_dcg ;};};func (_bac *Context )SetFillRGBA (r ,g ,b ,a float64 ){_abf :=_f .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_bac ._bca =_abf ;_bac ._daeb =_bega (_abf );};func (_dddf *Context )DrawString (s string ,x ,y float64 ){_dddf .DrawStringAnchored (s ,x ,y ,0,0)};func (_fea *Context )Clip (){_fea .ClipPreserve ();_fea .ClearPath ()};func (_ddc stops )Len ()int {return len (_ddc )};func (_bgg *Context )SetHexColor (x string ){_bbf ,_dcf ,_fc ,_aec :=_gfcf (x );_bgg .SetRGBA255 (_bbf ,_dcf ,_fc ,_aec );};type circle struct{_eagf ,_adg ,_bfe float64 };func (_beg *Context )SetDashOffset (offset float64 ){_beg ._dbd =offset };func _bega (_cgec _f .Color )_da .Pattern {return &solidPattern {_bfab :_cgec }};func (_ddbc *Context )DrawRectangle (x ,y ,w ,h float64 ){_ddbc .NewSubPath ();_ddbc .MoveTo (x ,y );_ddbc .LineTo (x +w ,y );_ddbc .LineTo (x +w ,y +h );_ddbc .LineTo (x ,y +h );_ddbc .ClosePath ();}; |