diff options
author | nirav <nirav@teisuu.com> | 2018-10-14 18:30:40 +0530 |
---|---|---|
committer | Dandelion <nirav@teisuu.com> | 2018-10-14 18:30:40 +0530 |
commit | a7488f38fef1960086af860063f1958fb75d58f3 (patch) | |
tree | f2308d105bdbd5de1a178429c7e2d2b002a8339a /src/window.c | |
parent | fde5cb29f95f51ed075c34f5eebdccb81fa2f0e4 (diff) | |
download | im-a7488f38fef1960086af860063f1958fb75d58f3.tar.gz im-a7488f38fef1960086af860063f1958fb75d58f3.zip |
Added info panel to show current file name, resolution and list index
Diffstat (limited to 'src/window.c')
-rw-r--r-- | src/window.c | 71 |
1 files changed, 67 insertions, 4 deletions
diff --git a/src/window.c b/src/window.c index 2f0dbce..1a81796 100644 --- a/src/window.c +++ b/src/window.c @@ -5,8 +5,11 @@ #include <gtk-3.0/gtk/gtk.h> GtkWidget *window; +GtkWidget *info_panel; GtkWidget *scrolled_window; +GtkWidget *info_panel_left, *info_panel_right; int is_fullscreen = 0; +int show_info = 0; static gboolean key_press(GtkWindow *window, GdkEvent *event, gpointer data) { @@ -47,11 +50,24 @@ static gboolean configure_callback(GtkWindow *window, GdkEvent *event, return TRUE; } +void load_css() +{ + GtkCssProvider *provider = gtk_css_provider_new(); + gtk_css_provider_load_from_resource(provider, "/org/gtk/qwe/qwe.css"); + gtk_style_context_add_provider_for_screen( + gdk_display_get_default_screen(gdk_display_get_default()), + GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + g_object_unref(provider); +} + void create_main_window(GApplication *app) { + // root window window = gtk_application_window_new(GTK_APPLICATION(app)); + gtk_widget_set_name(GTK_WIDGET(window), "main-window"); gtk_window_set_title(GTK_WINDOW(window), "qwe"); gtk_window_set_default_size(GTK_WINDOW(window), 800, 600); + gtk_widget_add_events(GTK_WIDGET(window), GDK_SCROLL_MASK); g_signal_connect(G_OBJECT(window), "configure-event", G_CALLBACK(configure_callback), NULL); g_signal_connect(G_OBJECT(window), "key-press-event", G_CALLBACK(key_press), @@ -62,16 +78,45 @@ void create_main_window(GApplication *app) G_CALLBACK(button_release), NULL); g_signal_connect(G_OBJECT(window), "motion-notify-event", G_CALLBACK(motion_notify), NULL); - gtk_widget_add_events(GTK_WIDGET(window), GDK_SCROLL_MASK); g_signal_connect(G_OBJECT(window), "scroll-event", G_CALLBACK(scroll_callback), NULL); + // scrolled window scrolled_window = gtk_scrolled_window_new(NULL, NULL); + gtk_widget_set_vexpand(GTK_WIDGET(scrolled_window), TRUE); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET(new_image())); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(scrolled_window)); + GtkWidget *viewport = gtk_viewport_new(NULL, NULL); + gtk_container_add(GTK_CONTAINER(viewport), GTK_WIDGET(new_image())); + gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET(viewport)); + + // info panel + info_panel = gtk_grid_new(); + gtk_widget_set_name(GTK_WIDGET(info_panel), "info_panel"); + info_panel_left = gtk_label_new(NULL); + gtk_widget_set_hexpand(GTK_WIDGET(info_panel_left), TRUE); + gtk_label_set_ellipsize(GTK_LABEL(info_panel_left), PANGO_ELLIPSIZE_END); + gtk_label_set_xalign(GTK_LABEL(info_panel_left), 0.0f); + gtk_grid_attach(GTK_GRID(info_panel), GTK_WIDGET(info_panel_left), 0, 0, 1, + 1); + info_panel_right = gtk_label_new(NULL); + gtk_grid_attach(GTK_GRID(info_panel), GTK_WIDGET(info_panel_right), 1, 0, 1, + 1); + gtk_widget_set_valign(GTK_WIDGET(info_panel), GTK_ALIGN_END); + gtk_widget_set_name(GTK_WIDGET(info_panel_left), "info-panel"); + gtk_widget_set_name(GTK_WIDGET(info_panel_right), "info-panel"); + + // overlay + GtkWidget *overlay = gtk_overlay_new(); + gtk_overlay_add_overlay(GTK_OVERLAY(overlay), GTK_WIDGET(scrolled_window)); + gtk_overlay_add_overlay(GTK_OVERLAY(overlay), GTK_WIDGET(info_panel)); + gtk_overlay_set_overlay_pass_through(GTK_OVERLAY(overlay), + GTK_WIDGET(info_panel), TRUE); + + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(overlay)); gtk_widget_show_all(GTK_WIDGET(window)); + gtk_widget_hide(GTK_WIDGET(info_panel)); + load_css(); } void scroll_window(gdouble x, gdouble y) @@ -88,9 +133,16 @@ void scroll_window(gdouble x, gdouble y) v_adj); } -void set_window_title(const char *title) +void set_window_title(const char *title, int width, int height) { gtk_window_set_title(GTK_WINDOW(window), title); + // TODO use malloc + char file[100], count[100]; + sprintf(file, "%s - %dx%d", title, width, height); + sprintf(count, "%d/%d", get_current_file_index() + 1, + get_total_file_count()); + gtk_label_set_text(GTK_LABEL(info_panel_left), file); + gtk_label_set_text(GTK_LABEL(info_panel_right), count); } void get_curr_win_size(gint *width, gint *height) @@ -115,3 +167,14 @@ void toggle_fullscreen() is_fullscreen = 1; } } + +void toggle_infopanel() +{ + if (show_info) { + gtk_widget_hide(GTK_WIDGET(info_panel)); + show_info = 0; + } else { + gtk_widget_show(GTK_WIDGET(info_panel)); + show_info = 1; + } +} |