Skip to content

Instantly share code, notes, and snippets.

@LinArcX
Created September 26, 2019 09:09
Show Gist options
  • Save LinArcX/94b2a4e732869c1d2b6cb18ac1596663 to your computer and use it in GitHub Desktop.
Save LinArcX/94b2a4e732869c1d2b6cb18ac1596663 to your computer and use it in GitHub Desktop.
#include <gtk/gtk.h>
void close_window(GtkWidget* widget, gpointer data)
{
gtk_window_close(widget);
}
void show_simple_window()
{
GtkApplication* app;
GtkWidget* window;
GtkWidget* grid;
GtkWidget* button;
app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE);
/* create a new window, and set its title */
window = gtk_application_window_new(app);
gtk_window_set_title(GTK_WINDOW(window), "Window");
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
/* Here we construct the container that is going pack our buttons */
grid = gtk_grid_new();
/* Pack the container in the window */
gtk_container_add(GTK_CONTAINER(window), grid);
button = gtk_button_new_with_label("Button 1");
//g_signal_connect(button, "clicked", G_CALLBACK(print_hello), NULL);
/* Place the first button in the grid cell (0, 0), and make it fill just 1 cell horizontally and vertically (ie no spanning) */
gtk_grid_attach(GTK_GRID(grid), button, 0, 0, 1, 1);
button = gtk_button_new_with_label("Button 2");
//g_signal_connect(button, "clicked", G_CALLBACK(print_hello), NULL);
/* Place the second button in the grid cell (1, 0), and make it fill just 1 cell horizontally and vertically (ie no spanning) */
gtk_grid_attach(GTK_GRID(grid), button, 1, 0, 1, 1);
button = gtk_button_new_with_label("Quit");
g_signal_connect_swapped(button, "clicked", G_CALLBACK(close_window), window); //gtk_widget_destroy
/* Place the Quit button in the grid cell (0, 1), and make it span 2 columns. */
gtk_grid_attach(GTK_GRID(grid), button, 0, 1, 2, 1);
/* Now that we are done packing our widgets, we show them all
* in one go, by calling gtk_widget_show_all() on the window.
* This call recursively calls gtk_widget_show() on all widgets
* that are contained in the window, directly or indirectly.
*/
gtk_widget_show_all(window);
g_object_unref(app);
}
void setTimeout(int milliseconds)
{
// If milliseconds is less or equal to 0
// will be simple return from function without throw error
if (milliseconds <= 0) {
fprintf(stderr, "Count milliseconds for timeout is less or equal to 0\n");
return;
}
// a current time of milliseconds
int milliseconds_since = clock() * 1000 / CLOCKS_PER_SEC;
// needed count milliseconds of return from this timeout
int end = milliseconds_since + milliseconds;
// wait while until needed time comes
do {
milliseconds_since = clock() * 1000 / CLOCKS_PER_SEC;
} while (milliseconds_since <= end);
}
void repetitive_task()
{
int delay = 5;
start_point:
// counter downtime for run a rocket while the delay with more 0
do {
// erase the previous line and display remain of the delay
printf("\n\033[ATime left for open new window: %d\n", delay);
// a timeout for display
setTimeout(1000);
// decrease the delay to 1
delay--;
} while (delay >= 0);
show_simple_window();
delay = 5;
goto start_point;
}
int main(int argc, char** argv)
{
gtk_init(&argc, &argv);
repetitive_task();
//show_simple_window();
gtk_main();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment