mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-01 22:17:29 +08:00
107 lines
27 KiB
Go
107 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 (_fg "errors";_g "fmt";_gc "github.com/golang/freetype/raster";_a "github.com/unidoc/unipdf/v3/common";_b "github.com/unidoc/unipdf/v3/internal/transform";_dd "github.com/unidoc/unipdf/v3/render/internal/context";_ceg "golang.org/x/image/draw";
|
|
_ccg "golang.org/x/image/font";_bb "golang.org/x/image/math/f64";_af "golang.org/x/image/math/fixed";_cc "image";_da "image/color";_ce "image/draw";_ca "math";_d "sort";_f "strings";);func (_bdd *Context )ClosePath (){if _bdd ._efgf {_caff :=_ebg (_bdd ._dcc );
|
|
_bdd ._ecc .Add1 (_caff );_bdd ._dfg .Add1 (_caff );_bdd ._gfe =_bdd ._dcc ;};};type linearGradient struct{_cgc ,_edce ,_ccbf ,_dfd float64 ;_gegb stops ;};func (_edc *Context )SetLineJoin (lineJoin _dd .LineJoin ){_edc ._fcc =lineJoin };func (_bgd *Context )DrawStringAnchored (s string ,face _ccg .Face ,x ,y ,ax ,ay float64 ){_aef ,_cceb :=_bgd .MeasureString (s ,face );
|
|
_bgd .drawString (s ,face ,x -ax *_aef ,y +ay *_cceb );};func (_eeb *Context )ClipPreserve (){_cgfc :=_cc .NewAlpha (_cc .Rect (0,0,_eeb ._bead ,_eeb ._dag ));_ega :=_gc .NewAlphaOverPainter (_cgfc );_eeb .fill (_ega );if _eeb ._adf ==nil {_eeb ._adf =_cgfc ;
|
|
}else {_afcf :=_cc .NewAlpha (_cc .Rect (0,0,_eeb ._bead ,_eeb ._dag ));_ceg .DrawMask (_afcf ,_afcf .Bounds (),_cgfc ,_cc .Point {},_eeb ._adf ,_cc .Point {},_ceg .Over );_eeb ._adf =_afcf ;};};func (_ggd *Context )SetDash (dashes ...float64 ){_ggd ._fgde =dashes };
|
|
func (_fbe *Context )Fill (){_fbe .FillPreserve ();_fbe .ClearPath ()};func (_gbc *Context )MoveTo (x ,y float64 ){if _gbc ._efgf {_gbc ._dfg .Add1 (_ebg (_gbc ._dcc ));};x ,y =_gbc .Transform (x ,y );_ded :=_b .NewPoint (x ,y );_dga :=_ebg (_ded );_gbc ._ecc .Start (_dga );
|
|
_gbc ._dfg .Start (_dga );_gbc ._dcc =_ded ;_gbc ._gfe =_ded ;_gbc ._efgf =true ;};func (_acc *linearGradient )AddColorStop (offset float64 ,color _da .Color ){_acc ._gegb =append (_acc ._gegb ,stop {_dcf :offset ,_efcf :color });_d .Sort (_acc ._gegb );
|
|
};func (_fbac *Context )ShearAbout (sx ,sy ,x ,y float64 ){_fbac .Translate (x ,y );_fbac .Shear (sx ,sy );_fbac .Translate (-x ,-y );};func (_fbb *Context )InvertMask (){if _fbb ._adf ==nil {_fbb ._adf =_cc .NewAlpha (_fbb ._dc .Bounds ());}else {for _eef ,_gae :=range _fbb ._adf .Pix {_fbb ._adf .Pix [_eef ]=255-_gae ;
|
|
};};};func _edfe (_gfbd ,_fcef ,_babd ,_befa ,_efgeb ,_dgac float64 )_dd .Gradient {_eda :=circle {_gfbd ,_fcef ,_babd };_bdcc :=circle {_befa ,_efgeb ,_dgac };_dgbd :=circle {_befa -_gfbd ,_efgeb -_fcef ,_dgac -_babd };_eccgb :=_bfe (_dgbd ._egg ,_dgbd ._cba ,-_dgbd ._acgb ,_dgbd ._egg ,_dgbd ._cba ,_dgbd ._acgb );
|
|
var _dfgg float64 ;if _eccgb !=0{_dfgg =1.0/_eccgb ;};_effae :=-_eda ._acgb ;_addf :=&radialGradient {_gcdc :_eda ,_gcf :_bdcc ,_eegg :_dgbd ,_ecf :_eccgb ,_feag :_dfgg ,_fab :_effae };return _addf ;};func (_efe *Context )NewSubPath (){if _efe ._efgf {_efe ._dfg .Add1 (_ebg (_efe ._dcc ));
|
|
};_efe ._efgf =false ;};func (_fa *Context )SetLineCap (lineCap _dd .LineCap ){_fa ._ffb =lineCap };func (_edf *Context )StrokePattern ()_dd .Pattern {return _edf ._ffd };func (_adc *Context )Width ()int {return _adc ._bead };type patternPainter struct{_gccd *_cc .RGBA ;
|
|
_ccbg *_cc .Alpha ;_gfab _dd .Pattern ;};func (_fff *Context )SetStrokeStyle (pattern _dd .Pattern ){_fff ._ffd =pattern };func (_de *Context )SetColor (c _da .Color ){_de .setFillAndStrokeColor (c )};func _ebae (_ebff ,_bbba uint32 ,_dagf float64 )uint8 {return uint8 (int32 (float64 (_ebff )*(1.0-_dagf )+float64 (_bbba )*_dagf )>>8);
|
|
};func _fbd (_cbd float64 ,_eegd stops )_da .Color {if _cbd <=0.0||len (_eegd )==1{return _eegd [0]._efcf ;};_ggdd :=_eegd [len (_eegd )-1];if _cbd >=_ggdd ._dcf {return _ggdd ._efcf ;};for _gbg ,_cca :=range _eegd [1:]{if _cbd < _cca ._dcf {_cbd =(_cbd -_eegd [_gbg ]._dcf )/(_cca ._dcf -_eegd [_gbg ]._dcf );
|
|
return _ead (_eegd [_gbg ]._efcf ,_cca ._efcf ,_cbd );};};return _ggdd ._efcf ;};func (_gfg *Context )SetFillRGBA (r ,g ,b ,a float64 ){_gb :=_da .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};_gfg ._eagb =_gb ;_gfg ._acd =_bgfe (_gb );
|
|
};func (_cee *Context )ResetClip (){_cee ._adf =nil };type Context struct{_bead int ;_dag int ;_acg *_gc .Rasterizer ;_dc *_cc .RGBA ;_adf *_cc .Alpha ;_eagb _da .Color ;_acd _dd .Pattern ;_ffd _dd .Pattern ;_ecc _gc .Path ;_dfg _gc .Path ;_dcc _b .Point ;
|
|
_gfe _b .Point ;_efgf bool ;_fgde []float64 ;_bfa float64 ;_cea float64 ;_ffb _dd .LineCap ;_fcc _dd .LineJoin ;_cbe _dd .FillRule ;_dg _b .Matrix ;_bca _dd .TextState ;_afc []*Context ;};const (_bfeb repeatOp =iota ;_acce ;_fef ;_eded ;);func (_dcg *Context )stroke (_cda _gc .Painter ){_fba :=_dcg ._ecc ;
|
|
if len (_dcg ._fgde )> 0{_fba =_afb (_fba ,_dcg ._fgde ,_dcg ._bfa );}else {_fba =_cffa (_ecd (_fba ));};_fge :=_dcg ._acg ;_fge .UseNonZeroWinding =true ;_fge .Clear ();_ecb :=(_dcg ._dg .ScalingFactorX ()+_dcg ._dg .ScalingFactorY ())/2;_fge .AddStroke (_fba ,_dgdd (_dcg ._cea *_ecb ),_dcg .capper (),_dcg .joiner ());
|
|
_fge .Rasterize (_cda );};func (_gddf *radialGradient )AddColorStop (offset float64 ,color _da .Color ){_gddf ._gca =append (_gddf ._gca ,stop {_dcf :offset ,_efcf :color });_d .Sort (_gddf ._gca );};func (_eaeg *Context )FillPreserve (){var _dae _gc .Painter ;
|
|
if _eaeg ._adf ==nil {if _ged ,_geg :=_eaeg ._acd .(*solidPattern );_geg {_gdd :=_gc .NewRGBAPainter (_eaeg ._dc );_gdd .SetColor (_ged ._ddg );_dae =_gdd ;};};if _dae ==nil {_dae =_cfdf (_eaeg ._dc ,_eaeg ._adf ,_eaeg ._acd );};_eaeg .fill (_dae );};func _gbff (_efgc ,_cgeg ,_ffa ,_bfb float64 )_dd .Gradient {_dgf :=&linearGradient {_cgc :_efgc ,_edce :_cgeg ,_ccbf :_ffa ,_dfd :_bfb };
|
|
return _dgf ;};func (_afg *Context )CubicTo (x1 ,y1 ,x2 ,y2 ,x3 ,y3 float64 ){if !_afg ._efgf {_afg .MoveTo (x1 ,y1 );};_gge ,_fffg :=_afg ._gfe .X ,_afg ._gfe .Y ;x1 ,y1 =_afg .Transform (x1 ,y1 );x2 ,y2 =_afg .Transform (x2 ,y2 );x3 ,y3 =_afg .Transform (x3 ,y3 );
|
|
_feb :=_cfg (_gge ,_fffg ,x1 ,y1 ,x2 ,y2 ,x3 ,y3 );_ccgd :=_ebg (_afg ._gfe );for _ ,_fde :=range _feb [1:]{_fgf :=_ebg (_fde );if _fgf ==_ccgd {continue ;};_ccgd =_fgf ;_afg ._ecc .Add1 (_fgf );_afg ._dfg .Add1 (_fgf );_afg ._gfe =_fde ;};};type radialGradient struct{_gcdc ,_gcf ,_eegg circle ;
|
|
_ecf ,_feag float64 ;_fab float64 ;_gca stops ;};func _bgfe (_acdc _da .Color )_dd .Pattern {return &solidPattern {_ddg :_acdc }};func (_dcaf *linearGradient )ColorAt (x ,y int )_da .Color {if len (_dcaf ._gegb )==0{return _da .Transparent ;};_dfcb ,_fad :=float64 (x ),float64 (y );
|
|
_cffb ,_afcb ,_gfd ,_ebe :=_dcaf ._cgc ,_dcaf ._edce ,_dcaf ._ccbf ,_dcaf ._dfd ;_ceba ,_ggf :=_gfd -_cffb ,_ebe -_afcb ;if _ggf ==0&&_ceba !=0{return _fbd ((_dfcb -_cffb )/_ceba ,_dcaf ._gegb );};if _ceba ==0&&_ggf !=0{return _fbd ((_fad -_afcb )/_ggf ,_dcaf ._gegb );
|
|
};_ccfe :=_ceba *(_dfcb -_cffb )+_ggf *(_fad -_afcb );if _ccfe < 0{return _dcaf ._gegb [0]._efcf ;};_efge :=_ca .Hypot (_ceba ,_ggf );_aged :=((_dfcb -_cffb )*-_ggf +(_fad -_afcb )*_ceba )/(_efge *_efge );_cccc ,_ggfd :=_cffb +_aged *-_ggf ,_afcb +_aged *_ceba ;
|
|
_cag :=_ca .Hypot (_dfcb -_cccc ,_fad -_ggfd )/_efge ;return _fbd (_cag ,_dcaf ._gegb );};func (_fea stops )Swap (i ,j int ){_fea [i ],_fea [j ]=_fea [j ],_fea [i ]};func (_cgf *Context )ClearPath (){_cgf ._ecc .Clear ();_cgf ._dfg .Clear ();_cgf ._efgf =false };
|
|
func (_agg *Context )SetPixel (x ,y int ){_agg ._dc .Set (x ,y ,_agg ._eagb )};func _ebg (_gada _b .Point )_af .Point26_6 {return _af .Point26_6 {X :_dgdd (_gada .X ),Y :_dgdd (_gada .Y )}};func (_eb *Context )FillPattern ()_dd .Pattern {return _eb ._acd };
|
|
func (_ae *Context )StrokePreserve (){var _gffg _gc .Painter ;if _ae ._adf ==nil {if _ede ,_gbcg :=_ae ._ffd .(*solidPattern );_gbcg {_dbga :=_gc .NewRGBAPainter (_ae ._dc );_dbga .SetColor (_ede ._ddg );_gffg =_dbga ;};};if _gffg ==nil {_gffg =_cfdf (_ae ._dc ,_ae ._adf ,_ae ._ffd );
|
|
};_ae .stroke (_gffg );};func NewContext (width ,height int )*Context {return NewContextForRGBA (_cc .NewRGBA (_cc .Rect (0,0,width ,height )));};func (_gffb *Context )TextState ()*_dd .TextState {return &_gffb ._bca };func (_egc *Context )Rotate (angle float64 ){_egc ._dg =_egc ._dg .Rotate (angle )};
|
|
func _dgdd (_ffde float64 )_af .Int26_6 {return _af .Int26_6 (_ffde *64)};func (_ddee *Context )DrawEllipse (x ,y ,rx ,ry float64 ){_ddee .NewSubPath ();_ddee .DrawEllipticalArc (x ,y ,rx ,ry ,0,2*_ca .Pi );_ddee .ClosePath ();};func (_eba *Context )DrawCircle (x ,y ,r float64 ){_eba .NewSubPath ();
|
|
_eba .DrawEllipticalArc (x ,y ,r ,r ,0,2*_ca .Pi );_eba .ClosePath ();};func _bfe (_ggfb ,_fgcg ,_adca ,_eaeb ,_agda ,_ebd float64 )float64 {return _ggfb *_eaeb +_fgcg *_agda +_adca *_ebd ;};func NewContextForImage (im _cc .Image )*Context {return NewContextForRGBA (_abfd (im ))};
|
|
func _aacb (_afad _cc .Image ,_dbe repeatOp )_dd .Pattern {return &surfacePattern {_eegb :_afad ,_dcce :_dbe };};func _df (_gce ,_fgc ,_bbe ,_db ,_ad ,_gf ,_fgb float64 )(_bbf ,_ba float64 ){_e :=1-_fgb ;_cf :=_e *_e ;_gfb :=2*_e *_fgb ;_bbg :=_fgb *_fgb ;
|
|
_bbf =_cf *_gce +_gfb *_bbe +_bbg *_ad ;_ba =_cf *_fgc +_gfb *_db +_bbg *_gf ;return ;};type solidPattern struct{_ddg _da .Color };func (_aag stops )Len ()int {return len (_aag )};var (_bdc =_bgfe (_da .White );_cdg =_bgfe (_da .Black ););func (_agf *Context )DrawPoint (x ,y ,r float64 ){_agf .Push ();
|
|
_gac ,_cdba :=_agf .Transform (x ,y );_agf .Identity ();_agf .DrawCircle (_gac ,_cdba ,r );_agf .Pop ();};func (_abf *Context )Clear (){_aac :=_cc .NewUniform (_abf ._eagb );_ceg .Draw (_abf ._dc ,_abf ._dc .Bounds (),_aac ,_cc .Point {},_ceg .Src );};
|
|
func (_gbea *Context )DrawImage (im _cc .Image ,x ,y int ){_gbea .DrawImageAnchored (im ,x ,y ,0,0)};func (_edd *Context )DrawRectangle (x ,y ,w ,h float64 ){_edd .NewSubPath ();_edd .MoveTo (x ,y );_edd .LineTo (x +w ,y );_edd .LineTo (x +w ,y +h );_edd .LineTo (x ,y +h );
|
|
_edd .ClosePath ();};func _bege (_edb float64 )float64 {return _edb *_ca .Pi /180};func (_gee *Context )DrawImageAnchored (im _cc .Image ,x ,y int ,ax ,ay float64 ){_gbfa :=im .Bounds ().Size ();x -=int (ax *float64 (_gbfa .X ));y -=int (ay *float64 (_gbfa .Y ));
|
|
_gdb :=_ceg .BiLinear ;_ffgg :=_gee ._dg .Clone ().Translate (float64 (x ),float64 (y ));_ccf :=_bb .Aff3 {_ffgg [0],_ffgg [3],_ffgg [6],_ffgg [1],_ffgg [4],_ffgg [7]};if _gee ._adf ==nil {_gdb .Transform (_gee ._dc ,_ccf ,im ,im .Bounds (),_ceg .Over ,nil );
|
|
}else {_gdb .Transform (_gee ._dc ,_ccf ,im ,im .Bounds (),_ceg .Over ,&_ceg .Options {DstMask :_gee ._adf ,DstMaskP :_cc .Point {}});};};type repeatOp int ;func _cffa (_befb [][]_b .Point )_gc .Path {var _dabc _gc .Path ;for _ ,_agef :=range _befb {var _aaa _af .Point26_6 ;
|
|
for _fafa ,_fda :=range _agef {_fbg :=_ebg (_fda );if _fafa ==0{_dabc .Start (_fbg );}else {_fdf :=_fbg .X -_aaa .X ;_deag :=_fbg .Y -_aaa .Y ;if _fdf < 0{_fdf =-_fdf ;};if _deag < 0{_deag =-_deag ;};if _fdf +_deag > 8{_dabc .Add1 (_fbg );};};_aaa =_fbg ;
|
|
};};return _dabc ;};func _bgf (_dcbe [][]_b .Point ,_gccb []float64 ,_gcb float64 )[][]_b .Point {var _fcg [][]_b .Point ;if len (_gccb )==0{return _dcbe ;};if len (_gccb )==1{_gccb =append (_gccb ,_gccb [0]);};for _ ,_gba :=range _dcbe {if len (_gba )< 2{continue ;
|
|
};_fag :=_gba [0];_ffff :=1;_gace :=0;_adcg :=0.0;if _gcb !=0{var _bed float64 ;for _ ,_ffgda :=range _gccb {_bed +=_ffgda ;};_gcb =_ca .Mod (_gcb ,_bed );if _gcb < 0{_gcb +=_bed ;};for _acdb ,_gbd :=range _gccb {_gcb -=_gbd ;if _gcb < 0{_gace =_acdb ;
|
|
_adcg =_gbd +_gcb ;break ;};};};var _cace []_b .Point ;_cace =append (_cace ,_fag );for _ffff < len (_gba ){_fcge :=_gccb [_gace ];_gfaf :=_gba [_ffff ];_cbgg :=_fag .Distance (_gfaf );_bgad :=_fcge -_adcg ;if _cbgg > _bgad {_gcff :=_bgad /_cbgg ;_aggg :=_fag .Interpolate (_gfaf ,_gcff );
|
|
_cace =append (_cace ,_aggg );if _gace %2==0&&len (_cace )> 1{_fcg =append (_fcg ,_cace );};_cace =nil ;_cace =append (_cace ,_aggg );_adcg =0;_fag =_aggg ;_gace =(_gace +1)%len (_gccb );}else {_cace =append (_cace ,_gfaf );_fag =_gfaf ;_adcg +=_cbgg ;
|
|
_ffff ++;};};if _gace %2==0&&len (_cace )> 1{_fcg =append (_fcg ,_cace );};};return _fcg ;};func (_fgbb *Context )SetRGB (r ,g ,b float64 ){_fgbb .SetRGBA (r ,g ,b ,1)};func _cfg (_daa ,_bfc ,_gg ,_bff ,_ege ,_gff ,_ee ,_cdb float64 )[]_b .Point {_bab :=(_ca .Hypot (_gg -_daa ,_bff -_bfc )+_ca .Hypot (_ege -_gg ,_gff -_bff )+_ca .Hypot (_ee -_ege ,_cdb -_gff ));
|
|
_bc :=int (_bab +0.5);if _bc < 4{_bc =4;};_gd :=float64 (_bc )-1;_cbc :=make ([]_b .Point ,_bc );for _ff :=0;_ff < _bc ;_ff ++{_fcd :=float64 (_ff )/_gd ;_ada ,_eae :=_fc (_daa ,_bfc ,_gg ,_bff ,_ege ,_gff ,_ee ,_cdb ,_fcd );_cbc [_ff ]=_b .NewPoint (_ada ,_eae );
|
|
};return _cbc ;};func _ead (_adcd ,_gcc _da .Color ,_egb float64 )_da .Color {_ggce ,_fbbg ,_dbcd ,_afcfe :=_adcd .RGBA ();_bdcca ,_cfd ,_agdd ,_baag :=_gcc .RGBA ();return _da .RGBA {_ebae (_ggce ,_bdcca ,_egb ),_ebae (_fbbg ,_cfd ,_egb ),_ebae (_dbcd ,_agdd ,_egb ),_ebae (_afcfe ,_baag ,_egb )};
|
|
};func (_gged *Context )DrawEllipticalArc (x ,y ,rx ,ry ,angle1 ,angle2 float64 ){const _bgg =16;for _dbgae :=0;_dbgae < _bgg ;_dbgae ++{_aadb :=float64 (_dbgae +0)/_bgg ;_agd :=float64 (_dbgae +1)/_bgg ;_dca :=angle1 +(angle2 -angle1 )*_aadb ;_gec :=angle1 +(angle2 -angle1 )*_agd ;
|
|
_dde :=x +rx *_ca .Cos (_dca );_bddf :=y +ry *_ca .Sin (_dca );_faf :=x +rx *_ca .Cos ((_dca +_gec )/2);_gad :=y +ry *_ca .Sin ((_dca +_gec )/2);_fce :=x +rx *_ca .Cos (_gec );_edde :=y +ry *_ca .Sin (_gec );_gea :=2*_faf -_dde /2-_fce /2;_dfed :=2*_gad -_bddf /2-_edde /2;
|
|
if _dbgae ==0{if _gged ._efgf {_gged .LineTo (_dde ,_bddf );}else {_gged .MoveTo (_dde ,_bddf );};};_gged .QuadraticTo (_gea ,_dfed ,_fce ,_edde );};};func (_gcdd *Context )SetMask (mask *_cc .Alpha )error {if mask .Bounds ().Size ()!=_gcdd ._dc .Bounds ().Size (){return _fg .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");
|
|
};_gcdd ._adf =mask ;return nil ;};func (_gfbf *Context )SetLineWidth (lineWidth float64 ){_gfbf ._cea =lineWidth };func (_efc *Context )AsMask ()*_cc .Alpha {_abb :=_cc .NewAlpha (_efc ._dc .Bounds ());_ceg .Draw (_abb ,_efc ._dc .Bounds (),_efc ._dc ,_cc .Point {},_ceg .Src );
|
|
return _abb ;};func _cfdf (_ffc *_cc .RGBA ,_bedc *_cc .Alpha ,_bee _dd .Pattern )*patternPainter {return &patternPainter {_ffc ,_bedc ,_bee };};func (_dbg *Context )SetRGBA (r ,g ,b ,a float64 ){_dbg ._eagb =_da .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};
|
|
_dbg .setFillAndStrokeColor (_dbg ._eagb );};func (_dagd *radialGradient )ColorAt (x ,y int )_da .Color {if len (_dagd ._gca )==0{return _da .Transparent ;};_cae ,_gffga :=float64 (x )+0.5-_dagd ._gcdc ._egg ,float64 (y )+0.5-_dagd ._gcdc ._cba ;_bbc :=_bfe (_cae ,_gffga ,_dagd ._gcdc ._acgb ,_dagd ._eegg ._egg ,_dagd ._eegg ._cba ,_dagd ._eegg ._acgb );
|
|
_fdgd :=_bfe (_cae ,_gffga ,-_dagd ._gcdc ._acgb ,_cae ,_gffga ,_dagd ._gcdc ._acgb );if _dagd ._ecf ==0{if _bbc ==0{return _da .Transparent ;};_dbb :=0.5*_fdgd /_bbc ;if _dbb *_dagd ._eegg ._acgb >=_dagd ._fab {return _fbd (_dbb ,_dagd ._gca );};return _da .Transparent ;
|
|
};_fdc :=_bfe (_bbc ,_dagd ._ecf ,0,_bbc ,-_fdgd ,0);if _fdc >=0{_effa :=_ca .Sqrt (_fdc );_edcf :=(_bbc +_effa )*_dagd ._feag ;_fgac :=(_bbc -_effa )*_dagd ._feag ;if _edcf *_dagd ._eegg ._acgb >=_dagd ._fab {return _fbd (_edcf ,_dagd ._gca );}else if _fgac *_dagd ._eegg ._acgb >=_dagd ._fab {return _fbd (_fgac ,_dagd ._gca );
|
|
};};return _da .Transparent ;};func (_eagg *Context )LineTo (x ,y float64 ){if !_eagg ._efgf {_eagg .MoveTo (x ,y );}else {x ,y =_eagg .Transform (x ,y );_cafd :=_b .NewPoint (x ,y );_ge :=_ebg (_cafd );_eagg ._ecc .Add1 (_ge );_eagg ._dfg .Add1 (_ge );
|
|
_eagg ._gfe =_cafd ;};};func (_dgg *patternPainter )Paint (ss []_gc .Span ,done bool ){_ggfc :=_dgg ._gccd .Bounds ();for _ ,_eegda :=range ss {if _eegda .Y < _ggfc .Min .Y {continue ;};if _eegda .Y >=_ggfc .Max .Y {return ;};if _eegda .X0 < _ggfc .Min .X {_eegda .X0 =_ggfc .Min .X ;
|
|
};if _eegda .X1 > _ggfc .Max .X {_eegda .X1 =_ggfc .Max .X ;};if _eegda .X0 >=_eegda .X1 {continue ;};const _ebea =1<<16-1;_egad :=_eegda .Y -_dgg ._gccd .Rect .Min .Y ;_dabcd :=_eegda .X0 -_dgg ._gccd .Rect .Min .X ;_cgfca :=(_eegda .Y -_dgg ._gccd .Rect .Min .Y )*_dgg ._gccd .Stride +(_eegda .X0 -_dgg ._gccd .Rect .Min .X )*4;
|
|
_cdbad :=_cgfca +(_eegda .X1 -_eegda .X0 )*4;for _egd ,_cgeb :=_cgfca ,_dabcd ;_egd < _cdbad ;_egd ,_cgeb =_egd +4,_cgeb +1{_abg :=_eegda .Alpha ;if _dgg ._ccbg !=nil {_abg =_abg *uint32 (_dgg ._ccbg .AlphaAt (_cgeb ,_egad ).A )/255;if _abg ==0{continue ;
|
|
};};_aeb :=_dgg ._gfab .ColorAt (_cgeb ,_egad );_agb ,_acag ,_ebdg ,_cebc :=_aeb .RGBA ();_eab :=uint32 (_dgg ._gccd .Pix [_egd +0]);_ecg :=uint32 (_dgg ._gccd .Pix [_egd +1]);_bfca :=uint32 (_dgg ._gccd .Pix [_egd +2]);_addd :=uint32 (_dgg ._gccd .Pix [_egd +3]);
|
|
_gccbf :=(_ebea -(_cebc *_abg /_ebea ))*0x101;_dgg ._gccd .Pix [_egd +0]=uint8 ((_eab *_gccbf +_agb *_abg )/_ebea >>8);_dgg ._gccd .Pix [_egd +1]=uint8 ((_ecg *_gccbf +_acag *_abg )/_ebea >>8);_dgg ._gccd .Pix [_egd +2]=uint8 ((_bfca *_gccbf +_ebdg *_abg )/_ebea >>8);
|
|
_dgg ._gccd .Pix [_egd +3]=uint8 ((_addd *_gccbf +_cebc *_abg )/_ebea >>8);};};};func (_gdf *Context )SetDashOffset (offset float64 ){_gdf ._bfa =offset };func (_deg *Context )SetMatrix (m _b .Matrix ){_deg ._dg =m };func (_ccb *Context )Scale (x ,y float64 ){_ccb ._dg =_ccb ._dg .Scale (x ,y )};
|
|
func (_cgd *Context )DrawArc (x ,y ,r ,angle1 ,angle2 float64 ){_cgd .DrawEllipticalArc (x ,y ,r ,r ,angle1 ,angle2 );};func (_ccge *Context )SetFillStyle (pattern _dd .Pattern ){if _ag ,_gfa :=pattern .(*solidPattern );_gfa {_ccge ._eagb =_ag ._ddg ;};
|
|
_ccge ._acd =pattern ;};func (_gbef *Context )QuadraticTo (x1 ,y1 ,x2 ,y2 float64 ){if !_gbef ._efgf {_gbef .MoveTo (x1 ,y1 );};x1 ,y1 =_gbef .Transform (x1 ,y1 );x2 ,y2 =_gbef .Transform (x2 ,y2 );_cacd :=_b .NewPoint (x1 ,y1 );_gab :=_b .NewPoint (x2 ,y2 );
|
|
_fga :=_ebg (_cacd );_gcd :=_ebg (_gab );_gbef ._ecc .Add2 (_fga ,_gcd );_gbef ._dfg .Add2 (_fga ,_gcd );_gbef ._gfe =_gab ;};func (_gaa *Context )Height ()int {return _gaa ._dag };func _abfd (_ace _cc .Image )*_cc .RGBA {_ccccb :=_ace .Bounds ();_abd :=_cc .NewRGBA (_ccccb );
|
|
_ce .Draw (_abd ,_ccccb ,_ace ,_ccccb .Min ,_ce .Src );return _abd ;};func (_dgc *Context )SetHexColor (x string ){_ceb ,_add ,_dbc ,_gbe :=_cbeeg (x );_dgc .SetRGBA255 (_ceb ,_add ,_dbc ,_gbe );};func (_dgaa *solidPattern )ColorAt (x ,y int )_da .Color {return _dgaa ._ddg };
|
|
func (_fdg *Context )Identity (){_fdg ._dg =_b .IdentityMatrix ()};func (_eff *Context )MeasureString (s string ,face _ccg .Face )(_dfa ,_beg float64 ){_dab :=&_ccg .Drawer {Face :face };_dgbc :=_dab .MeasureString (s );return float64 (_dgbc >>6),_eff ._bca .Tf .Size ;
|
|
};func (_ccc *Context )DrawRoundedRectangle (x ,y ,w ,h ,r float64 ){_cfe ,_bbd ,_baf ,_cff :=x ,x +r ,x +w -r ,x +w ;_abcc ,_fcdd ,_gcec ,_aca :=y ,y +r ,y +h -r ,y +h ;_ccc .NewSubPath ();_ccc .MoveTo (_bbd ,_abcc );_ccc .LineTo (_baf ,_abcc );_ccc .DrawArc (_baf ,_fcdd ,r ,_bege (270),_bege (360));
|
|
_ccc .LineTo (_cff ,_gcec );_ccc .DrawArc (_baf ,_gcec ,r ,_bege (0),_bege (90));_ccc .LineTo (_bbd ,_aca );_ccc .DrawArc (_bbd ,_gcec ,r ,_bege (90),_bege (180));_ccc .LineTo (_cfe ,_fcdd );_ccc .DrawArc (_bbd ,_fcdd ,r ,_bege (180),_bege (270));_ccc .ClosePath ();
|
|
};func (_dbf *Context )setFillAndStrokeColor (_bga _da .Color ){_dbf ._eagb =_bga ;_dbf ._acd =_bgfe (_bga );_dbf ._ffd =_bgfe (_bga );};func (_cg *Context )SetFillRule (fillRule _dd .FillRule ){_cg ._cbe =fillRule };type circle struct{_egg ,_cba ,_acgb float64 };
|
|
func (_dcad *surfacePattern )ColorAt (x ,y int )_da .Color {_ffga :=_dcad ._eegb .Bounds ();switch _dcad ._dcce {case _acce :if y >=_ffga .Dy (){return _da .Transparent ;};case _fef :if x >=_ffga .Dx (){return _da .Transparent ;};case _eded :if x >=_ffga .Dx ()||y >=_ffga .Dy (){return _da .Transparent ;
|
|
};};x =x %_ffga .Dx ()+_ffga .Min .X ;y =y %_ffga .Dy ()+_ffga .Min .Y ;return _dcad ._eegb .At (x ,y );};func _ecd (_eeggc _gc .Path )[][]_b .Point {var _fabf [][]_b .Point ;var _cbg []_b .Point ;var _cddd ,_afa float64 ;for _ggcd :=0;_ggcd < len (_eeggc );
|
|
{switch _eeggc [_ggcd ]{case 0:if len (_cbg )> 0{_fabf =append (_fabf ,_cbg );_cbg =nil ;};_dgd :=_dccf (_eeggc [_ggcd +1]);_acbe :=_dccf (_eeggc [_ggcd +2]);_cbg =append (_cbg ,_b .NewPoint (_dgd ,_acbe ));_cddd ,_afa =_dgd ,_acbe ;_ggcd +=4;case 1:_fadb :=_dccf (_eeggc [_ggcd +1]);
|
|
_aba :=_dccf (_eeggc [_ggcd +2]);_cbg =append (_cbg ,_b .NewPoint (_fadb ,_aba ));_cddd ,_afa =_fadb ,_aba ;_ggcd +=4;case 2:_cfdb :=_dccf (_eeggc [_ggcd +1]);_daae :=_dccf (_eeggc [_ggcd +2]);_dfaf :=_dccf (_eeggc [_ggcd +3]);_babda :=_dccf (_eeggc [_ggcd +4]);
|
|
_gfac :=_be (_cddd ,_afa ,_cfdb ,_daae ,_dfaf ,_babda );_cbg =append (_cbg ,_gfac ...);_cddd ,_afa =_dfaf ,_babda ;_ggcd +=6;case 3:_eagd :=_dccf (_eeggc [_ggcd +1]);_ebc :=_dccf (_eeggc [_ggcd +2]);_ddea :=_dccf (_eeggc [_ggcd +3]);_aaca :=_dccf (_eeggc [_ggcd +4]);
|
|
_fbda :=_dccf (_eeggc [_ggcd +5]);_def :=_dccf (_eeggc [_ggcd +6]);_ebfg :=_cfg (_cddd ,_afa ,_eagd ,_ebc ,_ddea ,_aaca ,_fbda ,_def );_cbg =append (_cbg ,_ebfg ...);_cddd ,_afa =_fbda ,_def ;_ggcd +=8;default:_a .Log .Debug ("\u0057\u0041\u0052\u004e: \u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0070\u0061\u0074\u0068\u003a\u0020%\u0076",_eeggc );
|
|
return _fabf ;};};if len (_cbg )> 0{_fabf =append (_fabf ,_cbg );};return _fabf ;};func _afb (_fbbd _gc .Path ,_cacee []float64 ,_beab float64 )_gc .Path {return _cffa (_bgf (_ecd (_fbbd ),_cacee ,_beab ));};type stops []stop ;func (_beac *Context )capper ()_gc .Capper {switch _beac ._ffb {case _dd .LineCapButt :return _gc .ButtCapper ;
|
|
case _dd .LineCapRound :return _gc .RoundCapper ;case _dd .LineCapSquare :return _gc .SquareCapper ;};return nil ;};func (_dgb *Context )DrawLine (x1 ,y1 ,x2 ,y2 float64 ){_dgb .MoveTo (x1 ,y1 );_dgb .LineTo (x2 ,y2 )};func (_gdff *Context )LineWidth ()float64 {return _gdff ._cea };
|
|
func (_fafb *Context )Pop (){_cgda :=*_fafb ;_ggc :=_fafb ._afc ;_gfba :=_ggc [len (_ggc )-1];*_fafb =*_gfba ;_fafb ._ecc =_cgda ._ecc ;_fafb ._dfg =_cgda ._dfg ;_fafb ._dcc =_cgda ._dcc ;_fafb ._gfe =_cgda ._gfe ;_fafb ._efgf =_cgda ._efgf ;};func (_fcca *Context )joiner ()_gc .Joiner {switch _fcca ._fcc {case _dd .LineJoinBevel :return _gc .BevelJoiner ;
|
|
case _dd .LineJoinRound :return _gc .RoundJoiner ;};return nil ;};func (_cge *Context )Push (){_cde :=*_cge ;_cge ._afc =append (_cge ._afc ,&_cde )};type surfacePattern struct{_eegb _cc .Image ;_dcce repeatOp ;};func (_cbb *Context )SetStrokeRGBA (r ,g ,b ,a float64 ){_ccd :=_da .NRGBA {uint8 (r *255),uint8 (g *255),uint8 (b *255),uint8 (a *255)};
|
|
_cbb ._ffd =_bgfe (_ccd );};func (_adb *Context )Translate (x ,y float64 ){_adb ._dg =_adb ._dg .Translate (x ,y )};func (_bda *Context )SetRGB255 (r ,g ,b int ){_bda .SetRGBA255 (r ,g ,b ,255)};func (_beb *Context )Matrix ()_b .Matrix {return _beb ._dg };
|
|
func (_afe *Context )Stroke (){_afe .StrokePreserve ();_afe .ClearPath ()};func (_ffg *Context )Image ()_cc .Image {return _ffg ._dc };func (_bde *Context )RotateAbout (angle ,x ,y float64 ){_bde .Translate (x ,y );_bde .Rotate (angle );_bde .Translate (-x ,-y );
|
|
};func (_bef *Context )Transform (x ,y float64 )(_bcb ,_baaa float64 ){return _bef ._dg .Transform (x ,y )};func (_age *Context )fill (_feg _gc .Painter ){_ebf :=_age ._dfg ;if _age ._efgf {_ebf =make (_gc .Path ,len (_age ._dfg ));copy (_ebf ,_age ._dfg );
|
|
_ebf .Add1 (_ebg (_age ._dcc ));};_fca :=_age ._acg ;_fca .UseNonZeroWinding =_age ._cbe ==_dd .FillRuleWinding ;_fca .Clear ();_fca .AddPath (_ebf );_fca .Rasterize (_feg );};func (_gcg *Context )ScaleAbout (sx ,sy ,x ,y float64 ){_gcg .Translate (x ,y );
|
|
_gcg .Scale (sx ,sy );_gcg .Translate (-x ,-y );};func _cbeeg (_gcaa string )(_cfa ,_fgfg ,_gdg ,_dage int ){_gcaa =_f .TrimPrefix (_gcaa ,"\u0023");_dage =255;if len (_gcaa )==3{_ddc :="\u00251\u0078\u0025\u0031\u0078\u0025\u0031x";_g .Sscanf (_gcaa ,_ddc ,&_cfa ,&_fgfg ,&_gdg );
|
|
_cfa |=_cfa <<4;_fgfg |=_fgfg <<4;_gdg |=_gdg <<4;};if len (_gcaa )==6{_ggcf :="\u0025\u0030\u0032x\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";_g .Sscanf (_gcaa ,_ggcf ,&_cfa ,&_fgfg ,&_gdg );};if len (_gcaa )==8{_gegg :="\u0025\u00302\u0078\u0025\u00302\u0078\u0025\u0030\u0032\u0078\u0025\u0030\u0032\u0078";
|
|
_g .Sscanf (_gcaa ,_gegg ,&_cfa ,&_fgfg ,&_gdg ,&_dage );};return ;};func _fc (_bd ,_bea ,_cd ,_eg ,_ed ,_ea ,_fgd ,_eag ,_efg float64 )(_abc ,_ec float64 ){_cdd :=1-_efg ;_acb :=_cdd *_cdd *_cdd ;_bg :=3*_cdd *_cdd *_efg ;_bf :=3*_cdd *_efg *_efg ;_fb :=_efg *_efg *_efg ;
|
|
_abc =_acb *_bd +_bg *_cd +_bf *_ed +_fb *_fgd ;_ec =_acb *_bea +_bg *_eg +_bf *_ea +_fb *_eag ;return ;};func (_dea *Context )Shear (x ,y float64 ){_dea ._dg .Shear (x ,y )};type stop struct{_dcf float64 ;_efcf _da .Color ;};func _dccf (_cbda _af .Int26_6 )float64 {const _ffaa ,_cdf =6,1<<6-1;
|
|
if _cbda >=0{return float64 (_cbda >>_ffaa )+float64 (_cbda &_cdf )/64;};_cbda =-_cbda ;if _cbda >=0{return -(float64 (_cbda >>_ffaa )+float64 (_cbda &_cdf )/64);};return 0;};func NewContextForRGBA (im *_cc .RGBA )*Context {_ga :=im .Bounds ().Size ().X ;
|
|
_ced :=im .Bounds ().Size ().Y ;return &Context {_bead :_ga ,_dag :_ced ,_acg :_gc .NewRasterizer (_ga ,_ced ),_dc :im ,_eagb :_da .Transparent ,_acd :_bdc ,_ffd :_cdg ,_cea :1,_cbe :_dd .FillRuleWinding ,_dg :_b .IdentityMatrix (),_bca :_dd .NewTextState ()};
|
|
};func (_eac *Context )DrawString (s string ,face _ccg .Face ,x ,y float64 ){_eac .DrawStringAnchored (s ,face ,x ,y ,0,0);};func (_cgea stops )Less (i ,j int )bool {return _cgea [i ]._dcf < _cgea [j ]._dcf };func (_eagga *Context )drawString (_fbc string ,_ccea _ccg .Face ,_ebfa ,_fcad float64 ){_eeg :=&_ccg .Drawer {Src :_cc .NewUniform (_eagga ._eagb ),Face :_ccea ,Dot :_ebg (_b .NewPoint (_ebfa ,_fcad ))};
|
|
_fbed :=rune (-1);for _ ,_dcb :=range _fbc {if _fbed >=0{_eeg .Dot .X +=_eeg .Face .Kern (_fbed ,_dcb );};_ddf ,_fegb ,_dcd ,_cbee ,_fgcf :=_eeg .Face .Glyph (_eeg .Dot ,_dcb );if !_fgcf {continue ;};_bfd :=_ddf .Sub (_ddf .Min );_cffg :=_cc .NewRGBA (_bfd );
|
|
_ceg .DrawMask (_cffg ,_bfd ,_eeg .Src ,_cc .Point {},_fegb ,_dcd ,_ceg .Over );var _gacf *_ceg .Options ;if _eagga ._adf !=nil {_gacf =&_ceg .Options {DstMask :_eagga ._adf ,DstMaskP :_cc .Point {}};};_cbcg :=_eagga ._dg .Clone ().Translate (float64 (_ddf .Min .X ),float64 (_ddf .Min .Y ));
|
|
_eccg :=_bb .Aff3 {_cbcg [0],_cbcg [3],_cbcg [6],_cbcg [1],_cbcg [4],_cbcg [7]};_ceg .BiLinear .Transform (_eagga ._dc ,_eccg ,_cffg ,_bfd ,_ceg .Over ,_gacf );_eeg .Dot .X +=_cbee ;_fbed =_dcb ;};};func (_eagc *Context )SetRGBA255 (r ,g ,b ,a int ){_eagc ._eagb =_da .NRGBA {uint8 (r ),uint8 (g ),uint8 (b ),uint8 (a )};
|
|
_eagc .setFillAndStrokeColor (_eagc ._eagb );};func (_aad *Context )Clip (){_aad .ClipPreserve ();_aad .ClearPath ()};func _be (_ef ,_ac ,_ab ,_dfe ,_efa ,_caf float64 )[]_b .Point {_cac :=(_ca .Hypot (_ab -_ef ,_dfe -_ac )+_ca .Hypot (_efa -_ab ,_caf -_dfe ));
|
|
_fe :=int (_cac +0.5);if _fe < 4{_fe =4;};_dfc :=float64 (_fe )-1;_aa :=make ([]_b .Point ,_fe );for _cce :=0;_cce < _fe ;_cce ++{_fd :=float64 (_cce )/_dfc ;_cb ,_bbb :=_df (_ef ,_ac ,_ab ,_dfe ,_efa ,_caf ,_fd );_aa [_cce ]=_b .NewPoint (_cb ,_bbb );
|
|
};return _aa ;};func (_baa *Context )drawRegularPolygon (_cbf int ,_egf ,_fgfd ,_baac ,_gbf float64 ){_fec :=2*_ca .Pi /float64 (_cbf );_gbf -=_ca .Pi /2;if _cbf %2==0{_gbf +=_fec /2;};_baa .NewSubPath ();for _egae :=0;_egae < _cbf ;_egae ++{_ffgd :=_gbf +_fec *float64 (_egae );
|
|
_baa .LineTo (_egf +_baac *_ca .Cos (_ffgd ),_fgfd +_baac *_ca .Sin (_ffgd ));};_baa .ClosePath ();}; |