Update title bar for text editor

This commit is contained in:
daleclack 2024-03-30 23:04:56 +08:00
parent b81414180b
commit cadb560664
3 changed files with 17 additions and 6 deletions

View File

@ -3,18 +3,20 @@
#include "../json_nlohmann/json.hpp" #include "../json_nlohmann/json.hpp"
#include <cstring> #include <cstring>
#include <fstream> #include <fstream>
#include "MyTitleBar.h"
using json = nlohmann::json; using json = nlohmann::json;
struct _TextEditor struct _TextEditor
{ {
GtkApplicationWindow parent_instance; GtkApplicationWindow parent_instance;
GtkWidget *header; MyTitleBar *header;
GtkWidget *main_box; GtkWidget *main_box;
GtkWidget *text_view, *scrolled_win; GtkWidget *text_view, *scrolled_win;
GtkTextBuffer *text_buffer; GtkTextBuffer *text_buffer;
GtkWidget *menu_btn, *popover; GtkWidget *menu_btn, *popover;
GtkBuilder *menu_builder, *expander_builder; GtkBuilder *menu_builder, *expander_builder;
// Input keyboard // Input keyboard
GtkWidget *expander; GtkWidget *expander;
GtkWidget *btns[26]; GtkWidget *btns[26];
@ -301,9 +303,9 @@ static void text_editor_init(TextEditor *self)
json_file.close(); json_file.close();
// Use headerbar for title and more info // Use headerbar for title and more info
self->header = gtk_header_bar_new(); self->header = my_titlebar_new();
gtk_window_set_title(GTK_WINDOW(self), "Text editor"); gtk_window_set_title(GTK_WINDOW(self), "Text editor");
gtk_window_set_titlebar(GTK_WINDOW(self), self->header); my_titlebar_set_window(self->header, self);
gtk_window_set_default_size(GTK_WINDOW(self), width, height); gtk_window_set_default_size(GTK_WINDOW(self), width, height);
// Add Actions for menu // Add Actions for menu
@ -323,8 +325,7 @@ static void text_editor_init(TextEditor *self)
// Add menu button // Add menu button
self->menu_btn = gtk_menu_button_new(); self->menu_btn = gtk_menu_button_new();
gtk_menu_button_set_icon_name(GTK_MENU_BUTTON(self->menu_btn), "open-menu"); gtk_menu_button_set_icon_name(GTK_MENU_BUTTON(self->menu_btn), "open-menu");
gtk_header_bar_pack_end(GTK_HEADER_BAR(self->header), self->menu_btn); my_titlebar_pack_end(self->header, self->menu_btn);
gtk_header_bar_set_show_title_buttons(GTK_HEADER_BAR(self->header), TRUE);
// Add a menu // Add a menu
self->menu_builder = gtk_builder_new_from_resource("/org/gtk/daleclack/text_menu.xml"); self->menu_builder = gtk_builder_new_from_resource("/org/gtk/daleclack/text_menu.xml");
@ -341,7 +342,7 @@ static void text_editor_init(TextEditor *self)
// Add Search Button // Add Search Button
self->btnsearch = gtk_toggle_button_new(); self->btnsearch = gtk_toggle_button_new();
gtk_button_set_icon_name(GTK_BUTTON(self->btnsearch), "find"); gtk_button_set_icon_name(GTK_BUTTON(self->btnsearch), "find");
gtk_header_bar_pack_end(GTK_HEADER_BAR(self->header), self->btnsearch); my_titlebar_pack_end(self->header, self->btnsearch);
// Add a search bar // Add a search bar
self->search_bar = gtk_search_bar_new(); self->search_bar = gtk_search_bar_new();

View File

@ -26,6 +26,11 @@ void _my_titlebar_set_window(MyTitleBar *self, GtkWidget *window)
self->ctrl_window = window; self->ctrl_window = window;
} }
void _my_titlebar_pack_end(MyTitleBar *self, GtkWidget *widget)
{
gtk_header_bar_pack_end(GTK_HEADER_BAR(self->header), widget);
}
static void my_titlebar_init(MyTitleBar *self) static void my_titlebar_init(MyTitleBar *self)
{ {
// Create widgets // Create widgets

View File

@ -2,11 +2,16 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
// For any style of pointer
#define my_titlebar_set_window(title_bar, window) \ #define my_titlebar_set_window(title_bar, window) \
_my_titlebar_set_window(My_TitleBar(title_bar), GTK_WIDGET(window)) _my_titlebar_set_window(My_TitleBar(title_bar), GTK_WIDGET(window))
#define my_titlebar_pack_end(title_bar, widget) \
_my_titlebar_pack_end(My_TitleBar(title_bar), GTK_WIDGET(widget))
G_DECLARE_FINAL_TYPE(MyTitleBar, my_titlebar, My, TitleBar, GObject) G_DECLARE_FINAL_TYPE(MyTitleBar, my_titlebar, My, TitleBar, GObject)
void _my_titlebar_set_window(MyTitleBar *title_bar, GtkWidget *window); void _my_titlebar_set_window(MyTitleBar *title_bar, GtkWidget *window);
void _my_titlebar_pack_end(MyTitleBar *title_bar, GtkWidget *widget);
MyTitleBar *my_titlebar_new(); MyTitleBar *my_titlebar_new();