(dpi int)
| 41 | } |
| 42 | |
| 43 | func (wgeb *widgetGraphicsEffectBase) bitmapForDPI(dpi int) (*Bitmap, error) { |
| 44 | if wgeb.dpi2Bitmap == nil { |
| 45 | wgeb.dpi2Bitmap = make(map[int]*Bitmap) |
| 46 | } else if bitmap, ok := wgeb.dpi2Bitmap[dpi]; ok { |
| 47 | return bitmap, nil |
| 48 | } |
| 49 | |
| 50 | var disposables Disposables |
| 51 | defer disposables.Treat() |
| 52 | |
| 53 | bitmap, err := NewBitmapWithTransparentPixelsForDPI(SizeFrom96DPI(Size{12, 12}, dpi), dpi) |
| 54 | if err != nil { |
| 55 | return nil, err |
| 56 | } |
| 57 | disposables.Add(bitmap) |
| 58 | |
| 59 | canvas, err := NewCanvasFromImage(bitmap) |
| 60 | if err != nil { |
| 61 | return nil, err |
| 62 | } |
| 63 | defer canvas.Dispose() |
| 64 | |
| 65 | for i := 1; i <= 5; i++ { |
| 66 | size := SizeFrom96DPI(Size{i*2 + 2, i*2 + 2}, dpi) |
| 67 | |
| 68 | bmp, err := NewBitmapWithTransparentPixelsForDPI(size, dpi) |
| 69 | if err != nil { |
| 70 | return nil, err |
| 71 | } |
| 72 | defer bmp.Dispose() |
| 73 | |
| 74 | bmpCanvas, err := NewCanvasFromImage(bmp) |
| 75 | if err != nil { |
| 76 | return nil, err |
| 77 | } |
| 78 | defer bmpCanvas.Dispose() |
| 79 | |
| 80 | color := RGB( |
| 81 | byte(math.Min(1.0, float64(wgeb.color.R())/255.0-0.1+0.1*float64(i))*255.0), |
| 82 | byte(math.Min(1.0, float64(wgeb.color.G())/255.0-0.1+0.1*float64(i))*255.0), |
| 83 | byte(math.Min(1.0, float64(wgeb.color.B())/255.0-0.1+0.1*float64(i))*255.0), |
| 84 | ) |
| 85 | |
| 86 | brush, err := NewSolidColorBrush(color) |
| 87 | if err != nil { |
| 88 | return nil, err |
| 89 | } |
| 90 | defer brush.Dispose() |
| 91 | |
| 92 | ellipseSize := SizeFrom96DPI(Size{i * 2, i * 2}, dpi) |
| 93 | if err := bmpCanvas.FillRoundedRectanglePixels(brush, Rectangle{0, 0, size.Width, size.Height}, ellipseSize); err != nil { |
| 94 | return nil, err |
| 95 | } |
| 96 | |
| 97 | bmpCanvas.Dispose() |
| 98 | |
| 99 | opacity := byte(borderGlowAlpha[i-1] * 255.0) |
| 100 |
no test coverage detected