mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-20 22:49:02 +00:00
ssd1306: add DrawBitmap() function to complete Displayer interface
Signed-off-by: deadprogram <ron@hybridgroup.com>
This commit is contained in:
+23
-2
@@ -11,6 +11,12 @@ import (
|
|||||||
|
|
||||||
"tinygo.org/x/drivers"
|
"tinygo.org/x/drivers"
|
||||||
"tinygo.org/x/drivers/internal/legacy"
|
"tinygo.org/x/drivers/internal/legacy"
|
||||||
|
"tinygo.org/x/drivers/pixel"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
errBufferSize = errors.New("invalid size buffer")
|
||||||
|
errOutOfRange = errors.New("out of screen range")
|
||||||
)
|
)
|
||||||
|
|
||||||
type ResetValue [2]byte
|
type ResetValue [2]byte
|
||||||
@@ -245,8 +251,7 @@ func (d *Device) GetPixel(x int16, y int16) bool {
|
|||||||
// SetBuffer changes the whole buffer at once
|
// SetBuffer changes the whole buffer at once
|
||||||
func (d *Device) SetBuffer(buffer []byte) error {
|
func (d *Device) SetBuffer(buffer []byte) error {
|
||||||
if int16(len(buffer)) != d.bufferSize {
|
if int16(len(buffer)) != d.bufferSize {
|
||||||
//return ErrBuffer
|
return errBufferSize
|
||||||
return errors.New("wrong size buffer")
|
|
||||||
}
|
}
|
||||||
for i := int16(0); i < d.bufferSize; i++ {
|
for i := int16(0); i < d.bufferSize; i++ {
|
||||||
d.buffer[i] = buffer[i]
|
d.buffer[i] = buffer[i]
|
||||||
@@ -338,3 +343,19 @@ func (b *SPIBus) tx(data []byte, isCommand bool) error {
|
|||||||
func (d *Device) Size() (w, h int16) {
|
func (d *Device) Size() (w, h int16) {
|
||||||
return d.width, d.height
|
return d.width, d.height
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DrawBitmap copies the bitmap to the screen at the given coordinates.
|
||||||
|
func (d *Device) DrawBitmap(x, y int16, bitmap pixel.Image[pixel.Monochrome]) error {
|
||||||
|
width, height := bitmap.Size()
|
||||||
|
if x < 0 || x+int16(width) > d.width || y < 0 || y+int16(height) > d.height {
|
||||||
|
return errOutOfRange
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < width; i++ {
|
||||||
|
for j := 0; j < height; j++ {
|
||||||
|
d.SetPixel(x+int16(i), y+int16(j), bitmap.Get(i, j).RGBA())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user