From bf956fa04570e18d24c1b86a6d2ef1168a1e812a Mon Sep 17 00:00:00 2001 From: luke zeller Date: Thu, 23 Apr 2020 14:57:43 -0400 Subject: [PATCH] re configured GTK to be much easier we now have a function that runs every draw --- program | Bin 29496 -> 19808 bytes program.cpp | 323 +++++++++------------------------------------------- 2 files changed, 52 insertions(+), 271 deletions(-) diff --git a/program b/program index 5b649bf181891489e076e91116942baaa9c92855..efb85dbfb5f1e394d3ce17db53c7a43ab7007ddc 100755 GIT binary patch literal 19808 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 diff --git a/program.cpp b/program.cpp index 2e8200a..50a5ae8 100644 --- a/program.cpp +++ b/program.cpp @@ -1,7 +1,8 @@ -#include -#include - +#include #include +#include + +int zoom = 2; int charA[8][8] = { {0,0,0,0,0,0,0,0}, @@ -59,303 +60,83 @@ int charE[8][8] = { }; -/* Surface to store current scribbles */ -static cairo_surface_t *surface = NULL; +static void do_drawing(cairo_t *); -static void clear_surface(void) +static void draw_pixel(cairo_t *cr, int x, int y, int size) { - cairo_t *cr; - - cr = cairo_create(surface); - - //set to black - cairo_set_source_rgb(cr, 0, 0, 0); - cairo_paint(cr); - - cairo_destroy(cr); -} - -/* Create a new surface of the appropriate size to store our scribbles */ -static gboolean configure_event_cb(GtkWidget *widget, - GdkEventConfigure *event, - gpointer data) -{ - if(surface) - { - cairo_surface_destroy(surface); -} - - surface = gdk_window_create_similar_surface(gtk_widget_get_window(widget), - CAIRO_CONTENT_COLOR, - gtk_widget_get_allocated_width(widget), - gtk_widget_get_allocated_height(widget)); - - /* Initialize the surface to white */ - clear_surface(); - - /* We've handled the configure event, no need for further processing. */ - return TRUE; -} - -/* Redraw the screen from the surface. Note that the ::draw - * signal receives a ready-to-be-used cairo_t that is already - * clipped to only draw the exposed areas of the widget - */ -static gboolean -draw_cb(GtkWidget *widget, - cairo_t *cr, - gpointer data) -{ - cairo_set_source_surface(cr, surface, 0, 0); - cairo_paint(cr); - - return FALSE; -} - -/* Draw a rectangle on the surface at the given position */ -static void -draw_pixel(GtkWidget *widget, - gdouble x, - gdouble y, - int size) -{ - cairo_t *cr; - - /* Paint to the surface, where we store our state */ - cr = cairo_create(surface); - + //set to white cairo_set_source_rgb(cr, 1, 1, 1); + //create rectange and fill it cairo_rectangle(cr, x * size, y * size, size, size); cairo_fill(cr); - - cairo_destroy(cr); - - /* Now invalidate the affected region of the drawing area. */ - gtk_widget_queue_draw_area(widget, x, y, size, size); + } -static void -draw_char(GtkWidget *drawing_area, int zoom, int x, int y, int chara[8][8]) +static void draw_char(cairo_t *cr, int x, int y, int zoom, int charToDraw[8][8]) { - for(int i=0;i<8;i++){ - for(int j=0;j<8;j++){ + //8x8 char loop + for(int i=0;i<8;i++) + { + for(int j=0;j<8;j++) + { + //get actual coords of pixels to draw int realX = j + (x * 8); int realY = i + (y * 8); - switch (chara[i][j]) { - case 1: draw_pixel(drawing_area, realX, realY, zoom); + switch (charToDraw[i][j]) { + case 1: draw_pixel(cr, realX, realY, zoom); break; case 0: break; default: std::cout << "nonstandard num in array" << std::endl; } - - }//end of j - - }//end of i + } + } } -static void -close_window(void) +static gboolean on_draw_event(GtkWidget *widget, cairo_t *cr, gpointer user_data) +{ + do_drawing(cr); + + return FALSE; +} + +static void do_drawing(cairo_t *cr) { - if(surface) - cairo_surface_destroy(surface); + cairo_set_source_rgb(cr, 0, 0, 0); + cairo_paint(cr); + + draw_char(cr, 0, 0, zoom, charA); + draw_char(cr, 1, 0, zoom, charB); + draw_char(cr, 2, 0, zoom, charC); + draw_char(cr, 3, 0, zoom, charD); + draw_char(cr, 4, 0, zoom, charE); } -static void -zoom1(GtkWidget *drawing_area) -{ - int zoom = 1; - gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); - gtk_widget_queue_resize(drawing_area); -} - -static void -zoom2(GtkWidget *drawing_area) -{ - int zoom = 2; - gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); - gtk_widget_queue_resize(drawing_area); -} - -static void -zoom3(GtkWidget *drawing_area) -{ - int zoom = 3; - gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); - gtk_widget_queue_resize(drawing_area); -} - -static void -zoom4(GtkWidget *drawing_area) -{ - int zoom = 4; - gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); - gtk_widget_queue_resize(drawing_area); - -} - - - -static void -activate(GtkApplication *app, - gpointer user_data) +//set up gtk, +int main(int argc, char *argv[]) { GtkWidget *window; - GtkWidget *box; - GtkWidget *frame; - GtkWidget *drawing_area; + GtkWidget *darea; - //define menubar things - GtkWidget *menubar; - GtkWidget *fileMenu; - GtkWidget *fileMi; - GtkWidget *quitMi; - GtkWidget *viewMenu; - GtkWidget *viewMi; - GtkWidget *zoomMi; - GtkWidget *zoomMenu; - GtkWidget *zoom1Mi; - GtkWidget *zoom2Mi; - GtkWidget *zoom3Mi; - GtkWidget *zoom4Mi; + gtk_init(&argc, &argv); + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - int zoom = 2; + darea = gtk_drawing_area_new(); + gtk_container_add(GTK_CONTAINER(window), darea); - window = gtk_application_window_new(app); - gtk_window_set_title(GTK_WINDOW(window), "z80 screen test"); + g_signal_connect(G_OBJECT(darea), "draw", + G_CALLBACK(on_draw_event), NULL); + g_signal_connect(window, "destroy", + G_CALLBACK(gtk_main_quit), NULL); + + gtk_window_set_default_size(GTK_WINDOW(window), 320 * zoom, 200 * zoom); + gtk_window_set_title(GTK_WINDOW(window), "z80 screentest"); gtk_window_set_resizable(GTK_WINDOW(window), FALSE); - g_signal_connect(window, "destroy", G_CALLBACK(close_window), NULL); - - - gtk_container_set_border_width(GTK_CONTAINER(window), 0); - - box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); - gtk_container_add(GTK_CONTAINER(window), box); - - - menubar = gtk_menu_bar_new(); - fileMenu = gtk_menu_new(); - viewMenu = gtk_menu_new(); - zoomMenu = gtk_menu_new(); - - fileMi = gtk_menu_item_new_with_label("File"); - quitMi = gtk_menu_item_new_with_label("Quit"); - - viewMi = gtk_menu_item_new_with_label("View"); - zoomMi = gtk_menu_item_new_with_label("Zoom"); - - zoom1Mi = gtk_menu_item_new_with_label("100%"); - zoom2Mi = gtk_menu_item_new_with_label("200%"); - zoom3Mi = gtk_menu_item_new_with_label("300%"); - zoom4Mi = gtk_menu_item_new_with_label("400%"); - - gtk_menu_item_set_submenu(GTK_MENU_ITEM(fileMi), fileMenu); - gtk_menu_shell_append(GTK_MENU_SHELL(fileMenu), quitMi); - gtk_menu_shell_append(GTK_MENU_SHELL(menubar), fileMi); - - gtk_menu_item_set_submenu(GTK_MENU_ITEM(viewMi), viewMenu); - gtk_menu_shell_append(GTK_MENU_SHELL(viewMenu), zoomMi); - gtk_menu_shell_append(GTK_MENU_SHELL(menubar), viewMi); - - gtk_menu_item_set_submenu(GTK_MENU_ITEM(zoomMi), zoomMenu); - gtk_menu_shell_append(GTK_MENU_SHELL(zoomMenu), zoom1Mi); - gtk_menu_shell_append(GTK_MENU_SHELL(zoomMenu), zoom2Mi); - gtk_menu_shell_append(GTK_MENU_SHELL(zoomMenu), zoom3Mi); - gtk_menu_shell_append(GTK_MENU_SHELL(zoomMenu), zoom4Mi); - - gtk_box_pack_start(GTK_BOX(box), menubar, FALSE, FALSE, 0); - - g_signal_connect_swapped (quitMi, "activate", - G_CALLBACK (gtk_widget_destroy), - window); - - - - drawing_area = gtk_drawing_area_new(); - /* set a minimum size */ - gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); - - gtk_box_pack_start(GTK_BOX(box), drawing_area, FALSE, FALSE, 0); - - /* Signals used to handle the backing surface */ - g_signal_connect(drawing_area, "draw", - G_CALLBACK(draw_cb), NULL); - g_signal_connect(drawing_area,"configure-event", - G_CALLBACK(configure_event_cb), NULL); - - - - g_signal_connect_swapped (zoom1Mi, "activate", - G_CALLBACK (zoom1), - drawing_area); - g_signal_connect_swapped (zoom2Mi, "activate", - G_CALLBACK (zoom2), - drawing_area); - g_signal_connect_swapped (zoom3Mi, "activate", - G_CALLBACK (zoom3), - drawing_area); - g_signal_connect_swapped (zoom4Mi, "activate", - G_CALLBACK (zoom4), - drawing_area); - - - gtk_widget_show_all(window); -/* - draw_char(drawing_area, zoom, 0, 0,charA); - draw_char(drawing_area, zoom, 1, 0,charB); - draw_char(drawing_area, zoom, 2, 0,charC); - draw_char(drawing_area, zoom, 3, 0,charD); - draw_char(drawing_area, zoom, 4, 0,charE); -*/ + gtk_main(); - for(int i=0;i<25;i++){ - for(int j=0;j<40;j++){ - - int randNum = (rand() % 5); - - switch(randNum) { - case 0: draw_char(drawing_area, zoom, j, i,charA); break; - case 1: draw_char(drawing_area, zoom, j, i,charB); break; - case 2: draw_char(drawing_area, zoom, j, i,charC); break; - case 3: draw_char(drawing_area, zoom, j, i,charD); break; - case 4: draw_char(drawing_area, zoom, j, i,charE); break; - default: std::cout << "invalid num in rand" << std::endl; break; - } - - //draw_char(drawing_area, zoom, j, i,charA); - - - }//end of j - - }//end of i - - - /* -std::cout << "got here" << std::endl; - zoom = 4; - gtk_widget_set_size_request(drawing_area, 320 * zoom, 200 * zoom); - gtk_widget_queue_resize(drawing_area); - - draw_pixel(drawing_area, 0, 0, zoom); - */ -} - - -int -main(int argc, - char **argv) -{ - GtkApplication *app; - int status; - - app = gtk_application_new("com.github.amberisvibin.z80screentest", G_APPLICATION_FLAGS_NONE); - g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); - status = g_application_run(G_APPLICATION(app), argc, argv); - g_object_unref(app); - - return status; + return 0; }