ELEC2645 (2018/19) / Mbed 2 deprecated el17ajf

Dependencies:   mbed

Fork of el17ajf by Angus Findlay

Graphics/Graphics.cpp

Committer:
el17ajf
Date:
2019-03-18
Revision:
13:59e17cab320a
Parent:
12:beb0d7632531
Child:
14:53d2167d7c9a

File content as of revision 13:59e17cab320a:

#include "Graphics.h"

const int Graphics::SCREEN_HEIGHT = 84;
const int Graphics::SCREEN_WIDTH = 48;
const int Graphics::BLOCK_SIZE = 4;
const int Graphics::BORDER_SIZE = 2;

N5110 * Graphics::lcd;

void Graphics::init() {
    lcd = new N5110(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
    lcd->init();
    lcd->setContrast(0.5);
    lcd->setBrightness(0);
}

void Graphics::deinit() {
    delete lcd;
}

void Graphics::clear() {
    lcd->clear();
}

void Graphics::render() {
    lcd->refresh();
}

void Graphics::drawPoint(int x, int y) {
    lcd->setPixel(x, y, true);
}

void Graphics::drawLine(int x1, int y1, int x2, int y2) {
    lcd->drawLine(x1, y1, x2, y2, 1);
}

void Graphics::drawDottedLine(int x1, int y1, int x2, int y2) {
    lcd->drawLine(
        y1,
        x1,
        y2,
        x2,
        2 // dotted
    );
}

void Graphics::drawBox(int x1, int y1, int x2, int y2) {
    Graphics::drawLine(x1, y1, x2, y1);
    Graphics::drawLine(x2, y1, x2, y2);
    Graphics::drawLine(x2, y2, x1, y2);
    Graphics::drawLine(x1, y2, x1, y1);
}

void Graphics::drawBlock(int grid_x, int grid_y) {
    // screen coords
    int x = gridYToScreenX(grid_y);
    int y = gridXToScreenY(grid_x);
    Graphics::drawBox(x, y, x + 3, y - 3);
    Graphics::drawPoint(x + 2, y - 2); 
}

void Graphics::drawBorder() {
    Graphics::drawDottedLine(0, 0, 0, SCREEN_HEIGHT - 1);
    Graphics::drawDottedLine(1, 1, 1, SCREEN_HEIGHT - 2);
    
    Graphics::drawDottedLine(0, SCREEN_HEIGHT - 1, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1);
    Graphics::drawDottedLine(1, SCREEN_HEIGHT - 2, SCREEN_WIDTH - 2, SCREEN_HEIGHT - 2);
    
    Graphics::drawDottedLine(SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, SCREEN_WIDTH - 1, 0);
    Graphics::drawDottedLine(SCREEN_WIDTH - 2, SCREEN_HEIGHT - 2, SCREEN_WIDTH - 2, 1);
}

int Graphics::gridYToScreenX(int grid_y) {
    return grid_y * BLOCK_SIZE + BORDER_SIZE;
}

int Graphics::gridXToScreenY(int grid_x) {
    return SCREEN_WIDTH - (grid_x * BLOCK_SIZE) - BORDER_SIZE;
}