summaryrefslogtreecommitdiff
path: root/libraries
diff options
context:
space:
mode:
authorBenji Dial <benji@benjidial.net>2024-07-29 11:27:22 -0400
committerBenji Dial <benji@benjidial.net>2024-07-29 11:27:22 -0400
commitbe691582ee12613278af24cb5a824eeb357f6324 (patch)
tree5982ca3aad5257f515c93f62735ff3d630aa3ab3 /libraries
parent3636fd21e079c47bd8d62e773e178f68fe9c2052 (diff)
downloadhilbert-os-be691582ee12613278af24cb5a824eeb357f6324.tar.gz
some work on compositor
Diffstat (limited to 'libraries')
-rw-r--r--libraries/daguerre/include/daguerre/impl/fixed-font.hpp4
-rw-r--r--libraries/daguerre/include/daguerre/impl/image.hpp2
-rw-r--r--libraries/goldman/include/goldman/protocol.hpp85
3 files changed, 88 insertions, 3 deletions
diff --git a/libraries/daguerre/include/daguerre/impl/fixed-font.hpp b/libraries/daguerre/include/daguerre/impl/fixed-font.hpp
index dbff798..1a5f3d8 100644
--- a/libraries/daguerre/include/daguerre/impl/fixed-font.hpp
+++ b/libraries/daguerre/include/daguerre/impl/fixed-font.hpp
@@ -20,7 +20,7 @@ namespace daguerre {
template <class color_t>
fixed_font<color_t>::fixed_font(fixed_font<color_t> &&other)
: glyph_width(other.glyph_width), glyph_height(other.glyph_height) {
- for (int i = 0; 0 < 128; ++i)
+ for (int i = 0; i < 128; ++i)
glyphs[i] = std::move(other.glyphs[i]);
other.glyph_width = 0;
other.glyph_height = 0;
@@ -31,7 +31,7 @@ namespace daguerre {
fixed_font<color_t> &&other) {
glyph_width = other.glyph_width;
glyph_height = other.glyph_height;
- for (int i = 0; 0 < 128; ++i)
+ for (int i = 0; i < 128; ++i)
glyphs[i] = std::move(other.glyphs[i]);
other.glyph_width = 0;
other.glyph_height = 0;
diff --git a/libraries/daguerre/include/daguerre/impl/image.hpp b/libraries/daguerre/include/daguerre/impl/image.hpp
index 1264879..9160951 100644
--- a/libraries/daguerre/include/daguerre/impl/image.hpp
+++ b/libraries/daguerre/include/daguerre/impl/image.hpp
@@ -185,7 +185,7 @@ namespace daguerre {
const param_t &param, const image<other_color_t> &other, int to_x,
int to_y, param_converter_t<color_t, other_color_t, param_t> *conversion) {
convert_from(
- param, other, to_x, to_y, 0, 0, other.width, other.y, conversion);
+ param, other, to_x, to_y, 0, 0, other.width, other.height, conversion);
}
template <class color_t>
diff --git a/libraries/goldman/include/goldman/protocol.hpp b/libraries/goldman/include/goldman/protocol.hpp
new file mode 100644
index 0000000..b7f4d51
--- /dev/null
+++ b/libraries/goldman/include/goldman/protocol.hpp
@@ -0,0 +1,85 @@
+#pragma once
+
+#include <euler/syscall.hpp>
+#include <memory>
+
+//TODO: handle stream errors, make thread safe
+
+namespace goldman::protocol {
+
+ typedef euler::syscall::encoded_color color;
+ typedef uint16_t window;
+
+ static inline void send_open_window(
+ euler::syscall::stream_handle socket, uint32_t width, uint32_t height) {
+
+ struct [[gnu::packed]] {
+ uint8_t type;
+ uint32_t width;
+ uint32_t height;
+ } packet {
+ .type = 0x00,
+ .width = width,
+ .height = height
+ };
+
+ euler::syscall::write_to_stream(socket, sizeof(packet), &packet);
+
+ }
+
+ void send_update_window_region(
+ euler::syscall::stream_handle socket, window the_window,
+ uint32_t start_x, uint32_t start_y, uint32_t width,
+ uint32_t height, const color *the_data, size_t data_pitch) {
+
+ struct [[gnu::packed]] {
+ uint8_t type;
+ window the_window;
+ uint32_t start_x;
+ uint32_t start_y;
+ uint32_t width;
+ uint32_t height;
+ } packet_head {
+ .type = 0x01,
+ .the_window = the_window,
+ .start_x = start_x,
+ .start_y = start_y,
+ .width = width,
+ .height = height
+ };
+
+ euler::syscall::write_to_stream(socket, sizeof(packet_head), &packet_head);
+ for (uint32_t y = 0; y < height; ++y)
+ euler::syscall::write_to_stream(
+ socket, width * sizeof(color), the_data + data_pitch * y);
+
+ }
+
+ void send_close_window(
+ euler::syscall::stream_handle socket, window the_window) {
+
+ struct [[gnu::packed]] {
+ uint8_t type;
+ window the_window;
+ } packet {
+ .type = 0x02,
+ .the_window = the_window
+ };
+
+ euler::syscall::write_to_stream(socket, sizeof(packet), &packet);
+
+ }
+
+ enum class response_id : uint8_t {
+ window_opened
+ };
+
+ window get_window_opened_body(euler::syscall::stream_handle socket) {
+
+ window w;
+ euler::syscall::read_from_stream(socket, sizeof(w), &w);
+ return w;
+
+ }
+
+}