Mandelbrot set viewer for the ARM Mbed platform

Dependencies:   mbed DmTftLibrary

Mbed Mandelbrot Viewer

Touch-based mandelbrot set viewer for the ARM Mbed platform. Designed with the NXP LPC1768 and the DisplayModule DM-TFT28-116. It should be easy to adapt for any DisplayModule product, especially if it has an I2C touch controller.

On screen options allow the user to switch between 256*(2^n) maxiters up to 4096, and three rendering kernels using floats, integers, and integers in ARMv7 ASM.

Committer:
ofrasier
Date:
Fri Dec 07 01:00:54 2018 +0000
Revision:
3:835c035b8b1c
Parent:
1:a1d80c69e1f0
Combined ADD-LSL

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ofrasier 0:5b56190e14e9 1 #ifndef UI_CPP
ofrasier 0:5b56190e14e9 2 #define UI_CPP
ofrasier 0:5b56190e14e9 3
ofrasier 0:5b56190e14e9 4 #include "ui.h"
ofrasier 0:5b56190e14e9 5
ofrasier 0:5b56190e14e9 6 void Button::draw(DmTftBase *screen)
ofrasier 0:5b56190e14e9 7 {
ofrasier 0:5b56190e14e9 8 screen->fillRectangle(x, y, x + width, y + height, BLACK);
ofrasier 0:5b56190e14e9 9 screen->drawRectangle(x, y, x + width, y + height, WHITE);
ofrasier 0:5b56190e14e9 10 screen->drawString(x + width/2 - 4*text.length(), y + height/2 - 8, text.c_str());
ofrasier 0:5b56190e14e9 11 }
ofrasier 0:5b56190e14e9 12
ofrasier 0:5b56190e14e9 13 void Button::onClick(DmTftBase *screen, uint16_t cursorX, uint16_t cursorY)
ofrasier 0:5b56190e14e9 14 {
ofrasier 0:5b56190e14e9 15 buttonHandler(this, screen);
ofrasier 0:5b56190e14e9 16 }
ofrasier 0:5b56190e14e9 17
ofrasier 0:5b56190e14e9 18 void Label::draw(DmTftBase *screen)
ofrasier 0:5b56190e14e9 19 {
ofrasier 0:5b56190e14e9 20 screen->drawString(x, y, text.c_str());
ofrasier 0:5b56190e14e9 21 }
ofrasier 0:5b56190e14e9 22
ofrasier 0:5b56190e14e9 23 void Label::onClick(DmTftBase *screen, uint16_t cursorX, uint16_t cursorY)
ofrasier 0:5b56190e14e9 24 {
ofrasier 0:5b56190e14e9 25 return;
ofrasier 0:5b56190e14e9 26 }
ofrasier 0:5b56190e14e9 27
ofrasier 0:5b56190e14e9 28 void Mandelbrot::draw(DmTftBase* screen)
ofrasier 0:5b56190e14e9 29 {
ofrasier 0:5b56190e14e9 30 if (zoom == 0) {
ofrasier 0:5b56190e14e9 31 printf("Error: Mandelbrot.zoom == 0\n\r");
ofrasier 0:5b56190e14e9 32 exit(0);
ofrasier 0:5b56190e14e9 33 }
ofrasier 0:5b56190e14e9 34 screen->drawString(x + width - 56, y + height - 16, "DRAWING");
ofrasier 0:5b56190e14e9 35 kernel(this, screen);
ofrasier 0:5b56190e14e9 36 }
ofrasier 0:5b56190e14e9 37
ofrasier 0:5b56190e14e9 38 void Mandelbrot::onClick(DmTftBase *screen, uint16_t cursorX, uint16_t cursorY)
ofrasier 0:5b56190e14e9 39 {
ofrasier 0:5b56190e14e9 40 // Origin centered on image, mathematical orientation
ofrasier 0:5b56190e14e9 41 float xPos = (cursorX - x - width/2) / (float)(width/4);
ofrasier 0:5b56190e14e9 42 float yPos = (cursorY - y - height/2) / (float)(width/4);
ofrasier 0:5b56190e14e9 43 centerX += xPos/zoom;
ofrasier 0:5b56190e14e9 44 centerY += yPos/zoom;
ofrasier 0:5b56190e14e9 45 zoom *= 2;
ofrasier 0:5b56190e14e9 46 draw(screen);
ofrasier 0:5b56190e14e9 47 }
ofrasier 0:5b56190e14e9 48
ofrasier 0:5b56190e14e9 49 #endif