From ad5cef35d4e7306560676ed5b182296daea71042 Mon Sep 17 00:00:00 2001 From: vhaudiquet Date: Tue, 12 Sep 2023 21:59:13 +0200 Subject: [PATCH] Added mouse panel, dummy device representation --- drivers/g-wolves/htx/htx_0.png | Bin 0 -> 34221 bytes src/device/device.c | 16 +++++++++++++ src/device/device.h | 9 +++++++ src/ui/panels/mouse-panel.c | 42 +++++++++++++++++++++++++++++++++ src/ui/panels/mouse-panel.h | 15 ++++++++++++ ui/ginput.cmb | 25 +++++++++++++++++--- ui/ginput.gresource.xml | 1 + 7 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 drivers/g-wolves/htx/htx_0.png create mode 100644 src/device/device.c create mode 100644 src/device/device.h create mode 100644 src/ui/panels/mouse-panel.c create mode 100644 src/ui/panels/mouse-panel.h diff --git a/drivers/g-wolves/htx/htx_0.png b/drivers/g-wolves/htx/htx_0.png new file mode 100644 index 0000000000000000000000000000000000000000..523ef8c4bcebf5ad2218ebad3b6ae5dcda872abb GIT binary patch literal 34221 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 B{6hc$ literal 0 HcmV?d00001 diff --git a/src/device/device.c b/src/device/device.c new file mode 100644 index 0000000..4b73647 --- /dev/null +++ b/src/device/device.c @@ -0,0 +1,16 @@ +#include "device.h" + +struct DEVICE +{ + +}; + +char* device_get_image(device_t* device) +{ + return "/home/valentin/Documents/prjs/ginput/drivers/g-wolves/htx/htx_0.png"; +} + +char* device_get_name(device_t* device) +{ + return "G-Wolves HTX 4K"; +} diff --git a/src/device/device.h b/src/device/device.h new file mode 100644 index 0000000..d1ab28c --- /dev/null +++ b/src/device/device.h @@ -0,0 +1,9 @@ +#ifndef DEVICE_H +#define DEVICE_H + +typedef struct DEVICE device_t; + +char* device_get_image(device_t* device); +char* device_get_name(device_t* device); + +#endif \ No newline at end of file diff --git a/src/ui/panels/mouse-panel.c b/src/ui/panels/mouse-panel.c new file mode 100644 index 0000000..e54e9f9 --- /dev/null +++ b/src/ui/panels/mouse-panel.c @@ -0,0 +1,42 @@ +#include "mouse-panel.h" + +struct _MousePanel +{ + Panel parent_instance; + + GtkImage* mouse_image; + GtkLabel* mouse_name; +}; + +G_DEFINE_TYPE (MousePanel, mouse_panel, panel_get_type()) + +static void +mouse_panel_class_init(MousePanelClass* klass) +{ + GObjectClass* object_class = G_OBJECT_CLASS(klass); + GtkWidgetClass* widget_class = GTK_WIDGET_CLASS(klass); + PanelClass* panel_class = GINPUT_PANEL_CLASS(klass); + + gtk_widget_class_set_template_from_resource(widget_class, "/v/ginput/panel-mouse.ui"); + + gtk_widget_class_bind_template_child(widget_class, MousePanel, mouse_image); + gtk_widget_class_bind_template_child(widget_class, MousePanel, mouse_name); +} + +static void +mouse_panel_init(MousePanel* self) +{ + gtk_widget_init_template(GTK_WIDGET(self)); +} + +Panel* +mouse_panel_new(void) +{ + return g_object_new(mouse_panel_get_type(), NULL); +} + +void mouse_panel_set_device(MousePanel* self, device_t* device) +{ + gtk_image_set_from_file(self->mouse_image, device_get_image(device)); + gtk_label_set_label(self->mouse_name, device_get_name(device)); +} diff --git a/src/ui/panels/mouse-panel.h b/src/ui/panels/mouse-panel.h new file mode 100644 index 0000000..8ab0ec1 --- /dev/null +++ b/src/ui/panels/mouse-panel.h @@ -0,0 +1,15 @@ +#pragma once + +#include "ui/panel.h" +#include "device/device.h" + +G_BEGIN_DECLS + +G_DECLARE_FINAL_TYPE(MousePanel, mouse_panel, GINPUT, MOUSE_PANEL, Panel) + +G_END_DECLS + +Panel* mouse_panel_new(void); + +void mouse_panel_set_device(MousePanel* self, device_t* device); + diff --git a/ui/ginput.cmb b/ui/ginput.cmb index 682a4cc..3219afa 100644 --- a/ui/ginput.cmb +++ b/ui/ginput.cmb @@ -28,7 +28,10 @@ (2,16,"AdwWindowTitle","title",15,None,None,None,None,None), (3,1,"Panel","EmptyPanel",None,None,None,None,None,"\n"), (3,2,"GtkLabel",None,1,None,None,None,None,None), - (4,1,"Panel","MousePanel",None,None,None,None,None,"") + (4,1,"Panel","MousePanel",None,None,None,None,None,""), + (4,5,"GtkBox",None,1,None,None,None,1,None), + (4,6,"GtkImage","mouse_image",5,None,None,None,None,None), + (4,7,"GtkLabel","mouse_name",5,None,None,None,1,None) (1,1,"GtkWindow","default-height","980",None,None,None,None,None,None,None,None,None), @@ -62,7 +65,17 @@ (2,15,"AdwHeaderBar","show-start-title-buttons","False",None,None,None,None,None,None,None,None,None), (2,15,"AdwHeaderBar","title-widget",None,None,None,None,None,16,None,None,None,None), (3,2,"GtkLabel","justify","center",None,None,None,None,None,None,None,None,None), - (3,2,"GtkLabel","label","There is nothing here...\nPerhaps you don't have the needed drivers installed and active ?",None,None,None,None,None,None,None,None,None) + (3,2,"GtkLabel","label","There is nothing here...\nPerhaps you don't have the needed drivers installed and active ?",None,None,None,None,None,None,None,None,None), + (4,5,"GtkBox","spacing","10",None,None,None,None,None,None,None,None,None), + (4,5,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), + (4,5,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None), + (4,6,"GtkWidget","halign","start",None,None,None,None,None,None,None,None,None), + (4,6,"GtkWidget","height-request","250",None,None,None,None,None,None,None,None,None), + (4,6,"GtkWidget","margin-top","30",None,None,None,None,None,None,None,None,None), + (4,6,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None), + (4,6,"GtkWidget","width-request","300",None,None,None,None,None,None,None,None,None), + (4,7,"GtkLabel","justify","center",None,None,None,None,None,None,None,None,None), + (4,7,"GtkWidget","halign","center",None,None,None,None,None,None,None,None,None) (1,6,"GtkWidget",1,1,None,None,None,None,None,None), @@ -70,7 +83,13 @@ (1,10,"GtkWidget",2,2,None,1,None,None,None,None), (1,8,"GtkWidget",1,1,None,None,None,None,None,None), (1,8,"GtkWidget",2,2,None,1,None,None,None,None), - (1,6,"GtkWidget",2,2,None,1,None,None,None,None) + (1,6,"GtkWidget",2,2,None,1,None,None,None,None), + (4,1,"GtkWidget",2,2,None,1,None,None,None,None), + (4,1,"GtkWidget",2,3,None,1,None,None,None,None), + (4,1,"GtkWidget",2,4,None,1,None,None,None,None), + (4,1,"GtkWidget",2,5,None,1,None,None,None,None), + (4,1,"GtkWidget",2,6,None,1,None,None,None,None), + (4,6,"GtkWidget",1,1,None,None,None,None,None,None) (1,10,"GtkWidget",2,2,"name","background"), diff --git a/ui/ginput.gresource.xml b/ui/ginput.gresource.xml index 0e487a6..78a4556 100644 --- a/ui/ginput.gresource.xml +++ b/ui/ginput.gresource.xml @@ -4,6 +4,7 @@ main-window.ui panel.ui panel-empty.ui + panel-mouse.ui style.css