2021-02-11 10:35:13 +00:00
|
|
|
package imagerender ;import (_dd "errors";_d "fmt";_gb "github.com/golang/freetype/raster";_cb "github.com/unidoc/unipdf/v3/common";_cc "github.com/unidoc/unipdf/v3/internal/transform";_gc "github.com/unidoc/unipdf/v3/render/internal/context";_fa "golang.org/x/image/draw";_gd "golang.org/x/image/font";_ff "golang.org/x/image/math/f64";_ba "golang.org/x/image/math/fixed";_f "image";_cd "image/color";_a "image/draw";_ca "math";_g "sort";_b "strings";);func (_afaf *Context )DrawLine (x1 ,y1 ,x2 ,y2 float64 ){_afaf .MoveTo (x1 ,y1 );_afaf .LineTo (x2 ,y2 )};var (_eb =_fae (_cd .White );_dgd =_fae (_cd .Black ););func (_aaa *Context )DrawRectangle (x ,y ,w ,h float64 ){_aaa .NewSubPath ();_aaa .MoveTo (x ,y );_aaa .LineTo (x +w ,y );_aaa .LineTo (x +w ,y +h );_aaa .LineTo (x ,y +h );_aaa .ClosePath ();};func (_bbc *Context )SetStrokeStyle (pattern _gc .Pattern ){_bbc ._dda =pattern };func (_ada *Context )MeasureString (s string ,face _gd .Face )(_aed ,_bfff float64 ){_fgd :=&_gd .Drawer {Face :face };_ffg :=_fgd .MeasureString (s );return float64 (_ffg >>6),_ada ._aa .Tf .Size ;};type solidPattern struct{_feb _cd .Color };func (_dff *Context )drawString (_gdd string ,_bfd _gd .Face ,_gfa ,_fgc float64 ){_ebfd :=&_gd .Drawer {Src :_f .NewUniform (_dff ._gbd ),Face :_bfd ,Dot :_bac (_cc .NewPoint (_gfa ,_fgc ))};_gab :=rune (-1);for _ ,_bbgg :=range _gdd {if _gab >=0{_ebfd .Dot .X +=_ebfd .Face .Kern (_gab ,_bbgg );};_adg ,_aca ,_egg ,_bddc ,_bge :=_ebfd .Face .Glyph (_ebfd .Dot ,_bbgg );if !_bge {continue ;};_gcec :=_adg .Sub (_adg .Min );_deb :=_f .NewRGBA (_gcec );_fa .DrawMask (_deb ,_gcec ,_ebfd .Src ,_f .Point {},_aca ,_egg ,_fa .Over );var _cef *_fa .Options ;if _dff ._gag !=nil {_cef =&_fa .Options {DstMask :_dff ._gag ,DstMaskP :_f .Point {}};};_dfae :=_dff ._ccg .Clone ().Translate (float64 (_adg .Min .X ),float64 (_adg .Min .Y ));_fdg :=_ff .Aff3 {_dfae [0],_dfae [3],_dfae [6],_dfae [1],_dfae [4],_dfae [7]};_fa .BiLinear .Transform (_dff ._dfa ,_fdg ,_deb ,_gcec ,_fa .Over ,_cef );_ebfd .Dot .X +=_bddc ;_gab =_bbgg ;};};func (_fdfb *Context )ShearAbout (sx ,sy ,x ,y float64 ){_fdfb .Translate (x ,y );_fdfb .Shear (sx ,sy );_fdfb .Translate (-x ,-y );};func (_caed *Context )SetMatrix (m _cc .Matrix ){_caed ._ccg =m };func (_gbgb *Context )MoveTo (x ,y float64 ){if _gbgb ._bd {_gbgb ._de .Add1 (_bac (_gbgb ._gbde ));};x ,y =_gbgb .Transform (x ,y );_bafc :=_cc .NewPoint (x ,y );_bca :=_bac (_bafc );_gbgb ._fcd .Start (_bca );_gbgb ._de .Start (_bca );_gbgb ._gbde =_bafc ;_gbgb ._gbbf =_bafc ;_gbgb ._bd =true ;};func (_acdb *Context )DrawEllipse (x ,y ,rx ,ry float64 ){_acdb .NewSubPath ();_acdb .DrawEllipticalArc (x ,y ,rx ,ry ,0,2*_ca .Pi );_acdb .ClosePath ();};func (_ffb *radialGradient )ColorAt (x ,y int )_cd .Color {if len (_ffb ._gbbb )==0{return _cd .Transparent ;};_gbf ,_fedd :=float64 (x )+0.5-_ffb ._ffd ._aaae ,float64 (y )+0.5-_ffb ._ffd ._dde ;_gcde :=_cbf (_gbf ,_fedd ,_ffb ._ffd ._eda ,_ffb ._bfca ._aaae ,_ffb ._bfca ._dde ,_ffb ._bfca ._eda );_agec :=_cbf (_gbf ,_fedd ,-_ffb ._ffd ._eda ,_gbf ,_fedd ,_ffb ._ffd ._eda );if _ffb ._gae ==0{if _gcde ==0{return _cd .Transparent ;};_beee :=0.5*_agec /_gcde ;if _beee *_ffb ._bfca ._eda >=_ffb ._gded {return _dba (_beee ,_ffb ._gbbb );};return _cd .Transparent ;};_ceg :=_cbf (_gcde ,_ffb ._gae ,0,_gcde ,-_agec ,0);if _ceg >=0{_gfaa :=_ca .Sqrt (_ceg );_gcg :=(_gcde +_gfaa )*_ffb ._cgcf ;_daff :=(_gcde -_gfaa )*_ffb ._cgcf ;if _gcg *_ffb ._bfca ._eda >=_ffb ._gded {return _dba (_gcg ,_ffb ._gbbb );}else if _daff *_ffb ._bfca ._eda >=_ffb ._gded {return _dba (_daff ,_ffb ._gbbb );};};return _cd .Transparent ;};func (_ddd *Context )DrawRoundedRectangle (x ,y ,w ,h ,r float64 ){_eba ,_bcag ,_dfba ,_dbe :=x ,x +r ,x +w -r ,x +w ;_bbeb ,_cdf ,_efg ,_eea :=y ,y +r ,y +h -r ,y +h ;_ddd .NewSubPath ();_ddd .MoveTo (_bcag ,_bbeb );_ddd .LineTo (_dfba ,_bbeb );_ddd .DrawArc (_dfba ,_cdf ,r ,_cebe (270),_cebe (360));_ddd .LineTo (_dbe ,_efg );_ddd .DrawArc (_dfba ,_efg ,r ,_cebe (0),_cebe (90));_ddd .LineTo (_bcag ,_eea );_ddd .DrawArc (_bcag ,_efg ,r ,_cebe (90),_cebe (18
|