diff options
author | Benji Dial <benji6283@gmail.com> | 2021-03-08 14:46:19 -0500 |
---|---|---|
committer | Benji Dial <benji6283@gmail.com> | 2021-03-08 14:46:19 -0500 |
commit | 8221fd5451f094defa9866f98026b74a969f7693 (patch) | |
tree | 9f0e9595fd15bdecbe667f823deded7428547b44 /src/user/include | |
parent | 1a5ece4f52ef17c7c868e95eb26e98137d5cab6f (diff) | |
download | portland-os-8221fd5451f094defa9866f98026b74a969f7693.tar.gz |
resizable widgets, default widget implementation for some functions, reimplementing meminfo in raleigh
Diffstat (limited to 'src/user/include')
-rw-r--r-- | src/user/include/cxx/raleigh/w/button.h | 4 | ||||
-rw-r--r-- | src/user/include/cxx/raleigh/w/label.h | 12 | ||||
-rw-r--r-- | src/user/include/cxx/raleigh/w/padding.h | 4 | ||||
-rw-r--r-- | src/user/include/cxx/raleigh/w/vbox.h | 4 | ||||
-rw-r--r-- | src/user/include/cxx/raleigh/widget.h | 28 | ||||
-rw-r--r-- | src/user/include/cxx/raleigh/window.h | 6 | ||||
-rw-r--r-- | src/user/include/cxx/structs/duple.h | 13 | ||||
-rw-r--r-- | src/user/include/knob/key.h | 3 |
8 files changed, 48 insertions, 26 deletions
diff --git a/src/user/include/cxx/raleigh/w/button.h b/src/user/include/cxx/raleigh/w/button.h index 03e17ab..71ccae2 100644 --- a/src/user/include/cxx/raleigh/w/button.h +++ b/src/user/include/cxx/raleigh/w/button.h @@ -12,10 +12,8 @@ namespace raleigh { void notify_window_change() override; void paint(_pixel_t *pixbuf, uint32_t pitch) override; void handle_click(coord window_coords, enum mouse_packet::mouse_button click_type, bool up) override; + void notify_child_size_change(widget &child, coord old_size) override; void notify_has_opaque_parent(widget *parent) override; - void handle_key(struct key_packet kp) override; - void on_focus() override; - void on_unfocus() override; private: widget &inner; void (*on_click)(button &); diff --git a/src/user/include/cxx/raleigh/w/label.h b/src/user/include/cxx/raleigh/w/label.h index 4b1dae2..a78ce46 100644 --- a/src/user/include/cxx/raleigh/w/label.h +++ b/src/user/include/cxx/raleigh/w/label.h @@ -7,19 +7,17 @@ namespace raleigh { class label : public widget { public: - //this pointer is used directly, and the contents of the string should not be changed afterward + //value's data is copied label(const char *value, const char *font="fixed-10", bool bg_transparent=true, _pixel_t fg=RGB(00, 00, 00), _pixel_t bg=RGB(bf, bf, bf)); - void notify_window_change() override; + void change_value(const char *new_value); + void paint(_pixel_t *pixbuf, uint32_t pitch) override; - void handle_click(coord window_coords, enum mouse_packet::mouse_button click_type, bool up) override; void notify_has_opaque_parent(widget *parent) override; - void handle_key(struct key_packet kp) override; - void on_focus() override; - void on_unfocus() override; private: - const char *const value; + char *value; + uint32_t v_size; const struct font_info *const fi; bool bg_transparent; const _pixel_t fg; diff --git a/src/user/include/cxx/raleigh/w/padding.h b/src/user/include/cxx/raleigh/w/padding.h index 792e204..1bdb9ee 100644 --- a/src/user/include/cxx/raleigh/w/padding.h +++ b/src/user/include/cxx/raleigh/w/padding.h @@ -12,9 +12,7 @@ namespace raleigh { void paint(_pixel_t *pixbuf, uint32_t pitch) override; void handle_click(coord window_coords, enum mouse_packet::mouse_button click_type, bool up) override; void notify_has_opaque_parent(widget *parent) override; - void handle_key(struct key_packet kp) override; - void on_focus() override; - void on_unfocus() override; + void notify_child_size_change(widget &child, coord old_size) override; private: widget &inner; uint32_t pad_by; diff --git a/src/user/include/cxx/raleigh/w/vbox.h b/src/user/include/cxx/raleigh/w/vbox.h index 02bffd3..f715f95 100644 --- a/src/user/include/cxx/raleigh/w/vbox.h +++ b/src/user/include/cxx/raleigh/w/vbox.h @@ -14,9 +14,7 @@ namespace raleigh { void paint(_pixel_t *pixbuf, uint32_t pitch) override; void handle_click(coord window_coords, enum mouse_packet::mouse_button click_type, bool up) override; void notify_has_opaque_parent(widget *parent) override; - void handle_key(struct key_packet kp) override; - void on_focus() override; - void on_unfocus() override; + void notify_child_size_change(widget &from, coord old_size) override; private: dllist<widget &> widgets; }; diff --git a/src/user/include/cxx/raleigh/widget.h b/src/user/include/cxx/raleigh/widget.h index 54b9287..1b2cf6f 100644 --- a/src/user/include/cxx/raleigh/widget.h +++ b/src/user/include/cxx/raleigh/widget.h @@ -12,12 +12,15 @@ namespace raleigh { namespace raleigh { class widget { public: - coord size; - - //set by window class (or parent widget) + //these three are set by window class (or parent widget) + widget *parent;//set to zero when root widget window *w; coord window_offset; + //derived classes should not set this outside of the initializer + //instead, they should call widget::set_size(coord) + coord size; + //fewest steps up that a widget can be redrawn without needing its parents //if a widget is opaque, it will set this to a pointer to itself, and then call // notify_has_opaque_parent on any children, passing itself as an argument. @@ -25,14 +28,21 @@ namespace raleigh { // and then call notify_has_opaque_parent on any children (with the opaque parent). widget *closest_opaque; - //called by window class (or parent widget) - virtual void notify_window_change() = 0; + //these are called by window class (or parent widgets) + virtual void notify_window_change(); virtual void paint(_pixel_t *pixbuf, uint32_t pitch) = 0; - virtual void handle_click(coord window_coords, enum mouse_packet::mouse_button click_type, bool up) = 0; + virtual void handle_click(coord window_coords, enum mouse_packet::mouse_button click_type, bool up); virtual void notify_has_opaque_parent(widget *parent) = 0; - virtual void handle_key(struct key_packet kp) = 0; - virtual void on_focus() = 0; - virtual void on_unfocus() = 0; + virtual void handle_key(struct key_packet kp); + virtual void on_focus(); + virtual void on_unfocus(); + //this next one is not to be called by child widgets + //they should call window::notify_widget_size_change(widget &), which will call this if necessary + virtual void notify_child_size_change(widget &child, coord old_size); + + protected: + widget(); + void set_size(coord to); }; } diff --git a/src/user/include/cxx/raleigh/window.h b/src/user/include/cxx/raleigh/window.h index 21ae511..0dd9341 100644 --- a/src/user/include/cxx/raleigh/window.h +++ b/src/user/include/cxx/raleigh/window.h @@ -7,6 +7,8 @@ namespace raleigh { #include <raleigh/runtime.h> #include <raleigh/widget.h> +#include <structs/dllist.h> +#include <structs/duple.h> #include <pland/syscall.h> #include <raleigh/util.h> @@ -16,7 +18,10 @@ namespace raleigh { public: //pass on_close to specify a close handler. if on_close returns false, the window will not be closed. window(widget &root, _pixel_t bg_color=RGB(bf, bf, bf), bool (*on_close)(window &)=0); + void add_keybind(struct key_packet kp, void (*handler)(window &)); + void notify_needs_paint(widget &from); + void notify_widget_size_change(widget &from, coord old_size); enum try_actions_return_t {NONE, GOOD, DELETE}; try_actions_return_t try_actions(); void show(); @@ -31,6 +36,7 @@ namespace raleigh { bool needs_repaint; void paint_full(); bool (*on_close)(window &); + dllist<duple<struct key_packet, void (*)(window &)>> keybinds; }; } diff --git a/src/user/include/cxx/structs/duple.h b/src/user/include/cxx/structs/duple.h new file mode 100644 index 0000000..874e4f6 --- /dev/null +++ b/src/user/include/cxx/structs/duple.h @@ -0,0 +1,13 @@ +#ifndef STRUCTS_DUPLE_H +#define STRUCTS_DUPLE_H + +template<class at, class bt> +class duple { +public: + duple(at a, bt b) + : a(a), b(b) {} + at a; + bt b; +}; + +#endif
\ No newline at end of file diff --git a/src/user/include/knob/key.h b/src/user/include/knob/key.h index d532afd..3597e2a 100644 --- a/src/user/include/knob/key.h +++ b/src/user/include/knob/key.h @@ -7,7 +7,8 @@ extern "C" { #include <keypack.h> -char key_to_char(struct key_packet kp) __attribute__ ((pure)); +char key_to_char(struct key_packet kp) __attribute__ ((const)); +bool match_side_agnostic(struct key_packet a, struct key_packet b) __attribute__ ((const)); #ifdef __cplusplus } |