refactor naming
This commit is contained in:
parent
e0181cc3e8
commit
24d6e756ee
30 changed files with 569 additions and 534 deletions
54
inc/gfx/Buffer.h
Normal file
54
inc/gfx/Buffer.h
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
//
|
||||
// Created by jedi on 11/2/18.
|
||||
//
|
||||
|
||||
|
||||
#include <cstdlib>
|
||||
#include <cstdint>
|
||||
|
||||
namespace micromenu {
|
||||
|
||||
enum bufferBlocks {
|
||||
_1bit = 1, _2bit = 2, _4bit = 4, _8bit = 8, _16bit = 16, _24bit = 24, _32bit = 32
|
||||
};
|
||||
|
||||
template<bufferBlocks N>
|
||||
class Buffer {
|
||||
private:
|
||||
int *ptr_;
|
||||
int size_;
|
||||
constexpr static const int block_ = 8 * sizeof(int);
|
||||
public:
|
||||
Buffer(int size) : size_(size) {
|
||||
ptr_ = (int *) malloc(size * N / 8);
|
||||
}
|
||||
|
||||
int get(int i) {
|
||||
if(i >= size_) return 0;
|
||||
return ptr_[i * N / block_] & ((1 << N) - 1) << (i * N % block_);
|
||||
}
|
||||
|
||||
int getBlock(int i) {
|
||||
if(i >= size_) return 0;
|
||||
return ptr_[i * N / block_];
|
||||
}
|
||||
|
||||
void set(int i, int v) {
|
||||
if(i < size_) {
|
||||
ptr_[i * N / block_] &= ~(((1 << N) - 1) << (i * N % block_));
|
||||
ptr_[i * N / block_] |= (((1 << N) - 1) & v) << (i * N % block_);
|
||||
}
|
||||
}
|
||||
|
||||
~Buffer() {
|
||||
free(ptr_);
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
int Buffer<_32bit>::get(int i);
|
||||
|
||||
template<>
|
||||
void Buffer<_32bit>::set(int i, int v);
|
||||
|
||||
}
|
||||
42
inc/gfx/Canvas.h
Normal file
42
inc/gfx/Canvas.h
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
//
|
||||
// Created by jedi on 11/1/18.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "hal/hal.h"
|
||||
#include "gfx/Font.h"
|
||||
#include "fonts/basic_5x4.h"
|
||||
#include "gfx/Buffer.h"
|
||||
|
||||
namespace micromenu {
|
||||
|
||||
class Screen;
|
||||
|
||||
class Canvas {
|
||||
private:
|
||||
const int width_;
|
||||
const int height_;
|
||||
Buffer<_1bit> buffer_;
|
||||
|
||||
void draw_onto_(Screen &);
|
||||
|
||||
public:
|
||||
Canvas(int w, int h);
|
||||
|
||||
void clear();
|
||||
|
||||
void draw(int x, int y, bool inv = false);
|
||||
|
||||
void print(int x, int y, const char *str, bool inv = false, Font & = basic_5x4);
|
||||
|
||||
void print(int x, int y, char *str, bool inv = false, Font & = basic_5x4);
|
||||
|
||||
int getWidth();
|
||||
|
||||
int getHeight();
|
||||
|
||||
friend Screen;
|
||||
};
|
||||
|
||||
}
|
||||
27
inc/gfx/Font.h
Normal file
27
inc/gfx/Font.h
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
//
|
||||
// Created by jedi on 11/1/18.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace micromenu {
|
||||
|
||||
class Canvas;
|
||||
|
||||
class Font {
|
||||
public:
|
||||
typedef const bool raw_font[32][20];
|
||||
private:
|
||||
raw_font &raw_data_;
|
||||
public:
|
||||
explicit Font(raw_font &) noexcept;
|
||||
|
||||
void print(int x, int y, char c, Canvas &, bool inv = false);
|
||||
|
||||
void print(int x, int y, char *str, Canvas &, bool inv = false);
|
||||
|
||||
void print(int x, int y, const char *str, Canvas &, bool inv = false);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
49
inc/gfx/Layout.h
Normal file
49
inc/gfx/Layout.h
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
//
|
||||
// Created by jedi on 11/5/18.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "gfx/Canvas.h"
|
||||
#include "gfx/Screen.h"
|
||||
|
||||
namespace micromenu {
|
||||
|
||||
class Layout {
|
||||
class Slot {
|
||||
private:
|
||||
int pos_ = 0;
|
||||
int size_ = 0;
|
||||
Canvas *canvas_ = nullptr;
|
||||
public:
|
||||
node *content = nullptr;
|
||||
friend Layout;
|
||||
};
|
||||
|
||||
private:
|
||||
const int maxwidth_;
|
||||
const int maxheight_;
|
||||
int allocated_ = 0;
|
||||
Screen &screen_;
|
||||
|
||||
int allocate_(node *, int);
|
||||
|
||||
int expand_(int);
|
||||
|
||||
int pack_(int);
|
||||
|
||||
public:
|
||||
static const int maxslots = 10;
|
||||
Slot slots[maxslots];
|
||||
node *cursor = nullptr;
|
||||
|
||||
explicit Layout(Screen &s) noexcept: maxwidth_(s.getWidth()), maxheight_(s.getHeight()), screen_(s) {
|
||||
|
||||
}
|
||||
|
||||
int apply(node *);
|
||||
|
||||
void render();
|
||||
};
|
||||
|
||||
}
|
||||
38
inc/gfx/Screen.h
Normal file
38
inc/gfx/Screen.h
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
//
|
||||
// Created by jedi on 11/1/18.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "hal/hal.h"
|
||||
#include "gfx/Canvas.h"
|
||||
|
||||
namespace micromenu {
|
||||
|
||||
class Screen {
|
||||
private:
|
||||
const int width_;
|
||||
const int height_;
|
||||
|
||||
public:
|
||||
explicit Screen(int w, int h) noexcept;
|
||||
|
||||
void draw(int x, int y);
|
||||
|
||||
void draw(int x, int y, Canvas &c);
|
||||
|
||||
void print(int x, int y, const char *str, Font & = basic_5x4);
|
||||
|
||||
void print(int x, int y, char *str, Font & = basic_5x4);
|
||||
|
||||
[[nodiscard]] int getWidth() const{
|
||||
return width_;
|
||||
}
|
||||
|
||||
[[nodiscard]] int getHeight() const{
|
||||
return height_;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
//
|
||||
// Created by jedi on 11/2/18.
|
||||
//
|
||||
|
||||
#ifndef MGL_DMXMENU_BUFFER_1_H
|
||||
#define MGL_DMXMENU_BUFFER_1_H
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
enum bufferBlocks{
|
||||
_1bit = 1, _2bit = 2, _4bit = 4, _8bit = 8, _16bit = 16, _24bit = 24, _32bit = 32
|
||||
};
|
||||
|
||||
template <bufferBlocks N>
|
||||
class buffer {
|
||||
private:
|
||||
int *ptr_;
|
||||
int size_;
|
||||
constexpr static const int block_ = 8 * sizeof(int);
|
||||
public:
|
||||
buffer(int size) : size_(size) {
|
||||
ptr_ = (int *) malloc(size * N / 8);
|
||||
}
|
||||
|
||||
int get(int i) {
|
||||
if (i >= size_) return 0;
|
||||
return ptr_[i*N/block_] & ((1<<N)-1) << (i*N%block_);
|
||||
}
|
||||
|
||||
int getBlock(int i) {
|
||||
if (i >= size_) return 0;
|
||||
return ptr_[i*N/block_];
|
||||
}
|
||||
|
||||
void set(int i, int v) {
|
||||
if (i < size_) {
|
||||
ptr_[i*N/block_] &= ~(((1<<N)-1) << (i*N%block_));
|
||||
ptr_[i*N/block_] |= (((1<<N)-1)&v) << (i*N%block_);
|
||||
}
|
||||
}
|
||||
|
||||
~buffer() {
|
||||
free(ptr_);
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
int buffer<_32bit>::get(int i);
|
||||
|
||||
template <>
|
||||
void buffer<_32bit>::set(int i, int v);
|
||||
|
||||
#endif //MGL_DMXMENU_BUFFER_1_H
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
//
|
||||
// Created by jedi on 11/1/18.
|
||||
//
|
||||
|
||||
#ifndef MGL_DMXMENU_CANVAS_H
|
||||
#define MGL_DMXMENU_CANVAS_H
|
||||
|
||||
#include "hal/hal.h"
|
||||
#include "gfx/font.h"
|
||||
#include "fonts/basic_5x4.h"
|
||||
#include "gfx/buffer.h"
|
||||
|
||||
class screen;
|
||||
|
||||
class canvas {
|
||||
private:
|
||||
const int width_;
|
||||
const int height_;
|
||||
buffer<_1bit> buffer_;
|
||||
|
||||
void draw_onto_(screen &);
|
||||
|
||||
public:
|
||||
canvas(int w, int h);
|
||||
|
||||
void clear();
|
||||
|
||||
void draw(int x, int y, bool inv = false);
|
||||
|
||||
void print(int x, int y, const char *str, bool inv = 0, font & = basic_5x4);
|
||||
|
||||
void print(int x, int y, char *str, bool inv = 0, font & = basic_5x4);
|
||||
|
||||
int getWidth();
|
||||
|
||||
int getHeight();
|
||||
|
||||
friend screen;
|
||||
};
|
||||
|
||||
|
||||
#endif //MGL_DMXMENU_CANVAS_H
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
//
|
||||
// Created by jedi on 11/1/18.
|
||||
//
|
||||
|
||||
#ifndef MGL_DMXMENU_FONT_H
|
||||
#define MGL_DMXMENU_FONT_H
|
||||
|
||||
class canvas;
|
||||
|
||||
class font {
|
||||
public:
|
||||
typedef const bool raw_font[32][20];
|
||||
private:
|
||||
raw_font& raw_data_;
|
||||
public:
|
||||
font(raw_font&);
|
||||
void print(int x, int y, char c, canvas&, bool inv = 0);
|
||||
void print(int x, int y, char* str, canvas&, bool inv = 0);
|
||||
void print(int x, int y, const char* str, canvas&, bool inv = 0);
|
||||
};
|
||||
|
||||
#endif //MGL_DMXMENU_FONT_H
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
//
|
||||
// Created by jedi on 11/5/18.
|
||||
//
|
||||
|
||||
#ifndef MGL_DMXMENU_LAYOUT_H
|
||||
#define MGL_DMXMENU_LAYOUT_H
|
||||
|
||||
#include "gfx/canvas.h"
|
||||
#include "gfx/screen.h"
|
||||
|
||||
class layout {
|
||||
class Slot {
|
||||
private:
|
||||
int pos_ = 0;
|
||||
int size_ = 0;
|
||||
canvas *canvas_ = nullptr;
|
||||
public:
|
||||
node *content = nullptr;
|
||||
friend layout;
|
||||
};
|
||||
|
||||
private:
|
||||
const int maxwidth_;
|
||||
const int maxheight_;
|
||||
int allocated_;
|
||||
screen& screen_;
|
||||
|
||||
int allocate_(node *, int);
|
||||
|
||||
int expand_(int);
|
||||
|
||||
int pack_(int);
|
||||
|
||||
|
||||
public:
|
||||
static const int maxslots = 10;
|
||||
Slot slots[maxslots];
|
||||
node *cursor;
|
||||
|
||||
layout(screen& s) : maxwidth_(s.getWidth()), maxheight_(s.getHeight()), screen_(s) {
|
||||
|
||||
}
|
||||
|
||||
int apply(node *);
|
||||
|
||||
void render();
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif //MGL_DMXMENU_LAYOUT_H
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
//
|
||||
// Created by jedi on 11/1/18.
|
||||
//
|
||||
|
||||
#ifndef MGL_DMXMENU_SCREEN_H
|
||||
#define MGL_DMXMENU_SCREEN_H
|
||||
|
||||
#include "hal/hal.h"
|
||||
#include "gfx/canvas.h"
|
||||
|
||||
class screen {
|
||||
private:
|
||||
const int width_;
|
||||
const int height_;
|
||||
|
||||
public:
|
||||
screen(int w, int h);
|
||||
|
||||
void draw(int x, int y);
|
||||
|
||||
void draw(int x, int y, canvas &c);
|
||||
|
||||
void print(int x, int y, const char *str, font & = basic_5x4);
|
||||
|
||||
void print(int x, int y, char *str, font & = basic_5x4);
|
||||
|
||||
int getWidth();
|
||||
|
||||
int getHeight();
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif //MGL_DMXMENU_SCREEN_H
|
||||
Loading…
Add table
Add a link
Reference in a new issue