Clone13

Dependents:   SignalProcessLab DigitalSignalAlgorithm_Lab DigitalSignal_Lab

Committer:
ngtkien
Date:
Wed Aug 28 17:02:28 2019 +0000
Revision:
1:fc2dc08db78b
Parent:
0:ef139e18ca64
add several command

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ngtkien 0:ef139e18ca64 1 //
ngtkien 0:ef139e18ca64 2 // Canvas.cpp - Simple canvas.
ngtkien 0:ef139e18ca64 3 //
ngtkien 0:ef139e18ca64 4
ngtkien 0:ef139e18ca64 5 #include "Canvas.h"
ngtkien 0:ef139e18ca64 6 #include "stdlib.h"
ngtkien 0:ef139e18ca64 7
ngtkien 0:ef139e18ca64 8 Canvas::Canvas(void)
ngtkien 0:ef139e18ca64 9 {
ngtkien 0:ef139e18ca64 10 Reset();
ngtkien 0:ef139e18ca64 11 }
ngtkien 0:ef139e18ca64 12
ngtkien 0:ef139e18ca64 13
ngtkien 0:ef139e18ca64 14 Canvas::Canvas(uint16_t width, uint16_t height)
ngtkien 0:ef139e18ca64 15 {
ngtkien 0:ef139e18ca64 16 SetSize(width, height);
ngtkien 0:ef139e18ca64 17 }
ngtkien 0:ef139e18ca64 18
ngtkien 0:ef139e18ca64 19
ngtkien 0:ef139e18ca64 20 Canvas::~Canvas()
ngtkien 0:ef139e18ca64 21 {
ngtkien 0:ef139e18ca64 22 free(_planeBitmap);
ngtkien 0:ef139e18ca64 23 }
ngtkien 0:ef139e18ca64 24
ngtkien 0:ef139e18ca64 25
ngtkien 0:ef139e18ca64 26 void Canvas::Reset()
ngtkien 0:ef139e18ca64 27 {
ngtkien 0:ef139e18ca64 28 _width = 0;
ngtkien 0:ef139e18ca64 29 _height = 0;
ngtkien 0:ef139e18ca64 30
ngtkien 0:ef139e18ca64 31 _planeBitmap = (uint8_t *)NULL;
ngtkien 0:ef139e18ca64 32 _planeBitmapSize = 0;
ngtkien 0:ef139e18ca64 33 }
ngtkien 0:ef139e18ca64 34
ngtkien 0:ef139e18ca64 35
ngtkien 0:ef139e18ca64 36 uint16_t Canvas::DisplayWidth()
ngtkien 0:ef139e18ca64 37 {
ngtkien 0:ef139e18ca64 38 return _width;
ngtkien 0:ef139e18ca64 39 }
ngtkien 0:ef139e18ca64 40
ngtkien 0:ef139e18ca64 41
ngtkien 0:ef139e18ca64 42 uint16_t Canvas::DisplayHeight()
ngtkien 0:ef139e18ca64 43 {
ngtkien 0:ef139e18ca64 44 return _height;
ngtkien 0:ef139e18ca64 45 }
ngtkien 0:ef139e18ca64 46
ngtkien 0:ef139e18ca64 47 void Canvas::DrawPoint(int posX, int posY, uint32_t colorMask)
ngtkien 0:ef139e18ca64 48 {
ngtkien 0:ef139e18ca64 49 if ((posX >= 0) && (posX < DisplayWidth()) && (posY >= 0) && (posY < DisplayHeight())) {
ngtkien 0:ef139e18ca64 50
ngtkien 0:ef139e18ca64 51 uint32_t shift = posX % PLANE_BITMAP_ELEMENT_BITS;
ngtkien 0:ef139e18ca64 52 uint32_t col = posX / PLANE_BITMAP_ELEMENT_BITS;
ngtkien 0:ef139e18ca64 53
ngtkien 0:ef139e18ca64 54 uint32_t colsNum = DisplayWidth() / PLANE_BITMAP_ELEMENT_BITS;
ngtkien 0:ef139e18ca64 55 if ((DisplayWidth() % PLANE_BITMAP_ELEMENT_BITS) > 0)
ngtkien 0:ef139e18ca64 56 {
ngtkien 0:ef139e18ca64 57 colsNum++;
ngtkien 0:ef139e18ca64 58 }
ngtkien 0:ef139e18ca64 59
ngtkien 0:ef139e18ca64 60 uint32_t position = posY * colsNum + col;
ngtkien 0:ef139e18ca64 61
ngtkien 0:ef139e18ca64 62 if (colorMask)
ngtkien 0:ef139e18ca64 63 _planeBitmap[position] |= 1 << shift;
ngtkien 0:ef139e18ca64 64 else
ngtkien 0:ef139e18ca64 65 _planeBitmap[position] &= ~(1 << shift);
ngtkien 0:ef139e18ca64 66 }
ngtkien 0:ef139e18ca64 67 }
ngtkien 0:ef139e18ca64 68
ngtkien 0:ef139e18ca64 69
ngtkien 0:ef139e18ca64 70 bool Canvas::SetSize(uint16_t width, uint16_t height)
ngtkien 0:ef139e18ca64 71 {
ngtkien 0:ef139e18ca64 72 _width = width;
ngtkien 0:ef139e18ca64 73 _height = height;
ngtkien 0:ef139e18ca64 74
ngtkien 0:ef139e18ca64 75 int cols = _width / PLANE_BITMAP_ELEMENT_BITS;
ngtkien 0:ef139e18ca64 76 if ((_width % PLANE_BITMAP_ELEMENT_BITS) != 0)
ngtkien 0:ef139e18ca64 77 {
ngtkien 0:ef139e18ca64 78 cols++;
ngtkien 0:ef139e18ca64 79 }
ngtkien 0:ef139e18ca64 80
ngtkien 0:ef139e18ca64 81 _planeBitmapSize = cols * _height;
ngtkien 0:ef139e18ca64 82
ngtkien 0:ef139e18ca64 83 if ((_planeBitmap = IsSet() ? (uint8_t *)realloc((void *)_planeBitmap, _planeBitmapSize) : (uint8_t *)malloc(_planeBitmapSize)) == NULL)
ngtkien 0:ef139e18ca64 84 {
ngtkien 0:ef139e18ca64 85 Reset();
ngtkien 0:ef139e18ca64 86 return false;
ngtkien 0:ef139e18ca64 87 }
ngtkien 0:ef139e18ca64 88
ngtkien 0:ef139e18ca64 89 Clear();
ngtkien 0:ef139e18ca64 90
ngtkien 0:ef139e18ca64 91 return true;
ngtkien 0:ef139e18ca64 92 }
ngtkien 0:ef139e18ca64 93
ngtkien 0:ef139e18ca64 94
ngtkien 0:ef139e18ca64 95 void Canvas::Clear(void)
ngtkien 0:ef139e18ca64 96 {
ngtkien 0:ef139e18ca64 97 memset(_planeBitmap, 0, _planeBitmapSize);
ngtkien 0:ef139e18ca64 98 }
ngtkien 0:ef139e18ca64 99
ngtkien 0:ef139e18ca64 100
ngtkien 0:ef139e18ca64 101 uint8_t* Canvas::GetBitmap(void)
ngtkien 0:ef139e18ca64 102 {
ngtkien 0:ef139e18ca64 103 return _planeBitmap;
ngtkien 0:ef139e18ca64 104 }
ngtkien 0:ef139e18ca64 105
ngtkien 0:ef139e18ca64 106
ngtkien 0:ef139e18ca64 107 bool Canvas::IsSet()
ngtkien 0:ef139e18ca64 108 {
ngtkien 0:ef139e18ca64 109 return _planeBitmapSize != NULL;
ngtkien 0:ef139e18ca64 110 }