feat: add stroke thickness
This commit is contained in:
@@ -5,43 +5,43 @@
|
||||
#include "gtk/gtkcssprovider.h"
|
||||
|
||||
void vektor_uictrl_init(GtkApplication *app, VektorWidgetState *stateOut) {
|
||||
GtkBuilder *builder = gtk_builder_new();
|
||||
GError *error = NULL;
|
||||
GtkBuilder *builder = gtk_builder_new();
|
||||
GError *error = NULL;
|
||||
|
||||
// TODO: .ui files as resources instead of sketchy relative paths
|
||||
if (!gtk_builder_add_from_file(builder, "./ui/main.ui", &error)) {
|
||||
g_error("Fatal: %s", error->message);
|
||||
}
|
||||
// TODO: .ui files as resources instead of sketchy relative paths
|
||||
if (!gtk_builder_add_from_file(builder, "./ui/main.ui", &error)) {
|
||||
g_error("Fatal: %s", error->message);
|
||||
}
|
||||
|
||||
// Load css
|
||||
GtkCssProvider* provider = gtk_css_provider_new();
|
||||
gtk_css_provider_load_from_path(provider, "./ui/main.css");
|
||||
gtk_style_context_add_provider_for_display(gdk_display_get_default(),
|
||||
GTK_STYLE_PROVIDER(provider),
|
||||
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION
|
||||
);
|
||||
// Load css
|
||||
GtkCssProvider *provider = gtk_css_provider_new();
|
||||
gtk_css_provider_load_from_path(provider, "./ui/main.css");
|
||||
gtk_style_context_add_provider_for_display(
|
||||
gdk_display_get_default(), GTK_STYLE_PROVIDER(provider),
|
||||
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||
|
||||
// populate state
|
||||
stateOut->window = GTK_WINDOW(gtk_builder_get_object(builder, "main_window"));
|
||||
stateOut->workspacePaned =
|
||||
GTK_PANED(gtk_builder_get_object(builder, "workspace_paned"));
|
||||
stateOut->workspaceCanvas =
|
||||
GTK_PICTURE(gtk_builder_get_object(builder, "workspace"));
|
||||
stateOut->workspaceButtonLinetool =
|
||||
GTK_BUTTON(gtk_builder_get_object(builder, "button_linetool"));
|
||||
// populate state
|
||||
stateOut->window =
|
||||
GTK_WINDOW(gtk_builder_get_object(builder, "main_window"));
|
||||
stateOut->workspacePaned =
|
||||
GTK_PANED(gtk_builder_get_object(builder, "workspace_paned"));
|
||||
stateOut->workspaceCanvas =
|
||||
GTK_PICTURE(gtk_builder_get_object(builder, "workspace"));
|
||||
stateOut->workspaceButtonLinetool =
|
||||
GTK_BUTTON(gtk_builder_get_object(builder, "button_linetool"));
|
||||
|
||||
// Set window properties
|
||||
gtk_window_set_application(stateOut->window, app);
|
||||
gtk_window_set_title(stateOut->window, "Vektor");
|
||||
gtk_window_set_default_size(stateOut->window, 800, 600);
|
||||
// Set window properties
|
||||
gtk_window_set_application(stateOut->window, app);
|
||||
gtk_window_set_title(stateOut->window, "Vektor");
|
||||
gtk_window_set_default_size(stateOut->window, 800, 600);
|
||||
|
||||
g_object_unref(builder);
|
||||
g_object_unref(builder);
|
||||
}
|
||||
|
||||
void vektor_uictrl_map(VektorWidgetState *state) {
|
||||
|
||||
// set the workspace divider to 7:3 ratio
|
||||
int window_width = gtk_widget_get_width(GTK_WIDGET(state->window));
|
||||
g_print("%i", window_width);
|
||||
gtk_paned_set_position(state->workspacePaned, 800 * .7);
|
||||
// set the workspace divider to 7:3 ratio
|
||||
int window_width = gtk_widget_get_width(GTK_WIDGET(state->window));
|
||||
g_print("%i", window_width);
|
||||
gtk_paned_set_position(state->workspacePaned, 800 * .7);
|
||||
}
|
||||
|
||||
@@ -8,13 +8,13 @@ Global application widget state, holding references to
|
||||
all the widgets used in internal logic of the program
|
||||
*/
|
||||
typedef struct VektorWidgetState {
|
||||
GtkWindow *window;
|
||||
GtkPaned *workspacePaned;
|
||||
GtkPicture *workspaceCanvas;
|
||||
GtkWindow *window;
|
||||
GtkPaned *workspacePaned;
|
||||
GtkPicture *workspaceCanvas;
|
||||
|
||||
GtkButton* workspaceButtonLinetool;
|
||||
GtkButton *workspaceButtonLinetool;
|
||||
|
||||
// GtkWidget* Workspace
|
||||
// GtkWidget* Workspace
|
||||
} VektorWidgetState;
|
||||
|
||||
void vektor_uictrl_init(GtkApplication *app, VektorWidgetState *stateOut);
|
||||
|
||||
@@ -9,59 +9,60 @@
|
||||
#define VKTR_CANVAS_SIZE (VKTR_CANVAS_WIDTH * VKTR_CANVAS_HEIGHT * 4)
|
||||
|
||||
void vektor_canvas_init(VektorWidgetState *state, VektorCanvas *canvasOut) {
|
||||
canvasOut->canvasWidget = state->workspaceCanvas;
|
||||
canvasOut->width = VKTR_CANVAS_WIDTH;
|
||||
canvasOut->height = VKTR_CANVAS_HEIGHT;
|
||||
canvasOut->canvasPixels = g_malloc0(VKTR_CANVAS_SIZE);
|
||||
canvasOut->canvasWidget = state->workspaceCanvas;
|
||||
canvasOut->width = VKTR_CANVAS_WIDTH;
|
||||
canvasOut->height = VKTR_CANVAS_HEIGHT;
|
||||
canvasOut->canvasPixels = g_malloc0(VKTR_CANVAS_SIZE);
|
||||
|
||||
canvasOut->canvasPixelBytes =
|
||||
g_bytes_new(canvasOut->canvasPixels, VKTR_CANVAS_SIZE);
|
||||
canvasOut->canvasTexture = gdk_memory_texture_new(
|
||||
VKTR_CANVAS_WIDTH, VKTR_CANVAS_HEIGHT, GDK_MEMORY_R8G8B8A8,
|
||||
canvasOut->canvasPixelBytes, VKTR_CANVAS_WIDTH * 4);
|
||||
canvasOut->canvasPixelBytes =
|
||||
g_bytes_new(canvasOut->canvasPixels, VKTR_CANVAS_SIZE);
|
||||
canvasOut->canvasTexture = gdk_memory_texture_new(
|
||||
VKTR_CANVAS_WIDTH, VKTR_CANVAS_HEIGHT, GDK_MEMORY_R8G8B8A8,
|
||||
canvasOut->canvasPixelBytes, VKTR_CANVAS_WIDTH * 4);
|
||||
|
||||
gtk_picture_set_paintable(canvasOut->canvasWidget,
|
||||
GDK_PAINTABLE(canvasOut->canvasTexture));
|
||||
|
||||
// g_object_unref(bytes);
|
||||
gtk_picture_set_paintable(canvasOut->canvasWidget,
|
||||
GDK_PAINTABLE(canvasOut->canvasTexture));
|
||||
gtk_picture_set_content_fit(GTK_PICTURE(canvasOut->canvasWidget),
|
||||
GTK_CONTENT_FIT_CONTAIN);
|
||||
// g_object_unref(bytes);
|
||||
}
|
||||
|
||||
/* Generate new texture based on canvasPixels*/
|
||||
void vektor_canvas_update(VektorCanvas *canvas) {
|
||||
g_bytes_unref(canvas->canvasPixelBytes);
|
||||
canvas->canvasPixelBytes =
|
||||
g_bytes_new(canvas->canvasPixels, VKTR_CANVAS_SIZE);
|
||||
g_bytes_unref(canvas->canvasPixelBytes);
|
||||
canvas->canvasPixelBytes =
|
||||
g_bytes_new(canvas->canvasPixels, VKTR_CANVAS_SIZE);
|
||||
|
||||
g_object_unref(canvas->canvasTexture);
|
||||
canvas->canvasTexture =
|
||||
gdk_memory_texture_new(canvas->width, canvas->height, GDK_MEMORY_R8G8B8A8,
|
||||
canvas->canvasPixelBytes, canvas->width * 4);
|
||||
g_object_unref(canvas->canvasTexture);
|
||||
canvas->canvasTexture = gdk_memory_texture_new(
|
||||
canvas->width, canvas->height, GDK_MEMORY_R8G8B8A8,
|
||||
canvas->canvasPixelBytes, canvas->width * 4);
|
||||
|
||||
gtk_picture_set_paintable(canvas->canvasWidget,
|
||||
GDK_PAINTABLE(canvas->canvasTexture));
|
||||
gtk_picture_set_paintable(canvas->canvasWidget,
|
||||
GDK_PAINTABLE(canvas->canvasTexture));
|
||||
}
|
||||
|
||||
void vektor_canvas_fill(VektorCanvas *canvas, VektorColor color) {
|
||||
for (int x = 0; x < VKTR_CANVAS_WIDTH; x++) {
|
||||
for (int y = 0; y < VKTR_CANVAS_HEIGHT; y++) {
|
||||
int i = (y * VKTR_CANVAS_WIDTH + x) * 4;
|
||||
canvas->canvasPixels[i + 0] = color.r;
|
||||
canvas->canvasPixels[i + 1] = color.g;
|
||||
canvas->canvasPixels[i + 2] = color.b;
|
||||
canvas->canvasPixels[i + 3] = color.a;
|
||||
for (int x = 0; x < VKTR_CANVAS_WIDTH; x++) {
|
||||
for (int y = 0; y < VKTR_CANVAS_HEIGHT; y++) {
|
||||
int i = (y * VKTR_CANVAS_WIDTH + x) * 4;
|
||||
canvas->canvasPixels[i + 0] = color.r;
|
||||
canvas->canvasPixels[i + 1] = color.g;
|
||||
canvas->canvasPixels[i + 2] = color.b;
|
||||
canvas->canvasPixels[i + 3] = color.a;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void vektor_canvas_drawfrom(VektorFramebuffer *fb, VektorCanvas *target) {
|
||||
for (int x = 0; x < fb->width; x++) {
|
||||
for (int y = 0; y < fb->height; y++) {
|
||||
for (int x = 0; x < fb->width; x++) {
|
||||
for (int y = 0; y < fb->height; y++) {
|
||||
|
||||
int i = (y * fb->width + x) * 4;
|
||||
target->canvasPixels[i + 0] = (guchar)fb->pixels[i + 0];
|
||||
target->canvasPixels[i + 1] = (guchar)fb->pixels[i + 1];
|
||||
target->canvasPixels[i + 2] = (guchar)fb->pixels[i + 2];
|
||||
target->canvasPixels[i + 3] = (guchar)fb->pixels[i + 3];
|
||||
int i = (y * fb->width + x) * 4;
|
||||
target->canvasPixels[i + 0] = (guchar)fb->pixels[i + 0];
|
||||
target->canvasPixels[i + 1] = (guchar)fb->pixels[i + 1];
|
||||
target->canvasPixels[i + 2] = (guchar)fb->pixels[i + 2];
|
||||
target->canvasPixels[i + 3] = (guchar)fb->pixels[i + 3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,15 +6,15 @@
|
||||
#include "uicontroller.h"
|
||||
|
||||
typedef struct VektorCanvas {
|
||||
GtkPicture *canvasWidget;
|
||||
GtkPicture *canvasWidget;
|
||||
|
||||
// texture related stuff
|
||||
guchar *canvasPixels;
|
||||
GdkTexture *canvasTexture;
|
||||
GBytes *canvasPixelBytes;
|
||||
// texture related stuff
|
||||
guchar *canvasPixels;
|
||||
GdkTexture *canvasTexture;
|
||||
GBytes *canvasPixelBytes;
|
||||
|
||||
int width;
|
||||
int height;
|
||||
int width;
|
||||
int height;
|
||||
} VektorCanvas;
|
||||
|
||||
void vektor_canvas_init(VektorWidgetState *state, VektorCanvas *canvasOut);
|
||||
|
||||
Reference in New Issue
Block a user