summaryrefslogtreecommitdiff
path: root/libraries/daguerre/include/daguerre.hpp
diff options
context:
space:
mode:
authorBenji Dial <benji@benjidial.net>2024-07-27 16:57:39 -0400
committerBenji Dial <benji@benjidial.net>2024-07-27 16:57:39 -0400
commitfbfc078e9f44c1c1e95c9c484f1d5650bcf631b7 (patch)
treecab539c8cbbac81d895b6f8be695f3f53bf8f4d5 /libraries/daguerre/include/daguerre.hpp
parent9af5588c30c4126a2800aae1afcb0de2c373dc6c (diff)
downloadhilbert-os-fbfc078e9f44c1c1e95c9c484f1d5650bcf631b7.tar.gz
lots and lots of userspace stuff
Diffstat (limited to 'libraries/daguerre/include/daguerre.hpp')
-rw-r--r--libraries/daguerre/include/daguerre.hpp209
1 files changed, 0 insertions, 209 deletions
diff --git a/libraries/daguerre/include/daguerre.hpp b/libraries/daguerre/include/daguerre.hpp
deleted file mode 100644
index 9468826..0000000
--- a/libraries/daguerre/include/daguerre.hpp
+++ /dev/null
@@ -1,209 +0,0 @@
-#pragma once
-
-#include <algorithm>
-#include <stdint.h>
-#include <cstring>
-#include <cstdio>
-
-namespace daguerre {
-
- typedef uint32_t hilbert_color;
-
- struct rgb24 {
- uint8_t r;
- uint8_t g;
- uint8_t b;
- };
-
- template <class color_t>
- static inline void default_overlay(color_t &dest, const color_t &src) {
- dest = src;
- }
-
- static inline void default_overlay(hilbert_color &dest, const rgb24 &src) {
- dest = __euler_encode_color(src.r, src.g, src.b);
- }
-
- static inline void default_overlay(rgb24 &dest, const bool &src) {
- dest.r = src ? 255 : 0;
- dest.g = src ? 255 : 0;
- dest.b = src ? 255 : 0;
- }
-
- template <class color_t>
- class image {
-
- public:
- bool delete_buffer_on_destruct;
- color_t *buffer;
- unsigned width;
- unsigned height;
- unsigned pitch;//in sizeof(color_t)
-
- image()
- : delete_buffer_on_destruct(false), buffer(0), width(0), height(0),
- pitch(0) {}
-
- image(unsigned width, unsigned height)
- : delete_buffer_on_destruct(true), buffer(new color_t[width * height]),
- width(width), height(height), pitch(width) {}
-
- image(
- color_t *buffer, unsigned width, unsigned height, unsigned pitch,
- bool delete_buffer_on_destruct)
- : delete_buffer_on_destruct(delete_buffer_on_destruct), buffer(buffer),
- width(width), height(height), pitch(pitch) {}
-
- ~image() {
- if (delete_buffer_on_destruct && buffer)
- delete[] buffer;
- }
-
- template <class other_color_t,
- void overlay(color_t &, const other_color_t &) = default_overlay>
- image(const image<other_color_t> &other)
- : delete_buffer_on_destruct(true),
- buffer(new color_t[other.width * other.height]), width(other.width),
- height(other.height), pitch(other.width) {
- overlay_from<other_color_t, overlay>(other, 0, 0, 0, 0, width, height);
- }
-
- image(image<color_t> &&other)
- : delete_buffer_on_destruct(other.delete_buffer_on_destruct),
- buffer(other.buffer), width(other.width), height(other.height),
- pitch(other.pitch) {
- other.buffer = 0;
- }
-
- template <class other_color_t,
- void overlay(color_t &, const other_color_t &) = default_overlay>
- image<color_t> &operator =(const image<other_color_t> &other) {
- if (delete_buffer_on_destruct && buffer)
- delete[] buffer;
- delete_buffer_on_destruct = true;
- width = other.width;
- height = other.height;
- pitch = width;
- buffer = new color_t[width * height];
- overlay_from<other_color_t, overlay>(other, 0, 0, 0, 0, width, height);
- return *this;
- }
-
- image<color_t> &operator =(image<color_t> &&other) {
- if (delete_buffer_on_destruct && buffer)
- delete[] buffer;
- delete_buffer_on_destruct = other.delete_buffer_on_destruct;
- buffer = other.buffer;
- width = other.width;
- height = other.height;
- pitch = other.pitch;
- other.buffer = 0;
- return *this;
- }
-
- color_t get(unsigned x, unsigned y) const {
- return buffer[y * pitch + x];
- }
-
- void set(unsigned x, unsigned y, const color_t &c) {
- buffer[y * pitch + x] = c;
- }
-
- void copy_from(
- const image<color_t> &other, unsigned to_x, unsigned to_y,
- unsigned from_x, unsigned from_y, unsigned width, unsigned height) {
-
- color_t *to_start = buffer + pitch * to_y + to_x;
- const color_t *from_start = other.buffer + other.pitch * from_y + from_x;
-
- for (unsigned y = 0; y < height; ++y)
- std::memcpy(
- to_start + pitch * y, from_start + other.pitch * y,
- width * sizeof(color_t));
-
- }
-
- template <class other_color_t,
- void overlay(color_t &, const other_color_t &) = default_overlay>
- void overlay_from(
- const image<other_color_t> &other, unsigned to_x, unsigned to_y,
- unsigned from_x, unsigned from_y, unsigned width, unsigned height) {
-
- color_t *to_start = buffer + pitch * to_y + to_x;
- const other_color_t *from_start =
- other.buffer + other.pitch * from_y + from_x;
-
- for (unsigned y = 0; y < height; ++y)
- for (unsigned x = 0; x < width; ++x)
- overlay(to_start[pitch * y + x], from_start[other.pitch * y + x]);
-
- }
-
- };
-
- template <class color_t>
- void swap(image<color_t> &a, image<color_t> &b) {
- std::swap(a.delete_buffer_on_destruct, b.delete_buffer_on_destruct);
- std::swap(a.buffer, b.buffer);
- std::swap(a.width, b.width);
- std::swap(a.height, b.height);
- std::swap(a.pitch, b.pitch);
- }
-
- image<hilbert_color> get_hilbert_framebuffer();
-
- bool try_load_ppm(std::FILE *input, image<rgb24> &into);
-
- static inline bool try_load_ppm(const char *path, image<rgb24> &into) {
- std::FILE *f = std::fopen(path, "r");
- if (!f)
- return false;
- bool success = try_load_ppm(f, into);
- std::fclose(f);
- return success;
- }
-
- //TODO: unicode
- template <class color_t>
- class fixed_bitmap_font {
-
- public:
- unsigned width;
- unsigned height;
- image<color_t> glyphs[128];
-
- template <class target_color_t,
- void overlay(target_color_t &dest, const color_t &src) = default_overlay>
- void overlay_text(
- image<target_color_t> &target, unsigned x,
- unsigned y, const char *text) const {
-
- while (1) {
- uint8_t ch = (uint8_t)*text;
- if (ch == 0)
- return;
- if (ch < 128) {
- target.template overlay_from<color_t, overlay>(
- glyphs[ch], x, y, 0, 0, width, height);
- x += width;
- }
- ++text;
- }
-
- }
-
- };
-
- bool try_load_psf(std::FILE *input, fixed_bitmap_font<bool> &into);
-
- static inline bool try_load_psf(
- const char *path, fixed_bitmap_font<bool> &into) {
- std::FILE *f = std::fopen(path, "r");
- if (!f)
- return false;
- bool success = try_load_psf(f, into);
- std::fclose(f);
- return success;
- }
-
-}