Update gtk160
This commit is contained in:
parent
4c2750140a
commit
896fedf564
|
@ -26,7 +26,7 @@ link_directories (${GTK_LIBRARY_DIRS})
|
||||||
# set(PO_DIR ${CMAKE_BINARY_DIR}/po/zh_CN/LC_MESSAGES)
|
# set(PO_DIR ${CMAKE_BINARY_DIR}/po/zh_CN/LC_MESSAGES)
|
||||||
|
|
||||||
#Source files
|
#Source files
|
||||||
set(SOURCE_FILE src/main.cpp src/MainWin.cpp)
|
set(SOURCE_FILE src/main.cpp src/MainWin.cpp src/TestWin.cpp)
|
||||||
|
|
||||||
#Compile Resource
|
#Compile Resource
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
/* A slim headerbar style for widgets */
|
/* A slim headerbar style for widgets */
|
||||||
.titlebar {
|
.mytitlebar {
|
||||||
min-height: 10px;
|
min-height: 10px;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ctrl_btn {
|
.ctrl_btn {
|
||||||
min-height: 8px;
|
min-height: 8px;
|
||||||
min-width: 8px;
|
min-width: 13px;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
font-weight: 900;
|
font-weight: 900;
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
|
|
|
@ -1 +1,65 @@
|
||||||
#include "MainWin.h"
|
#include "MainWin.h"
|
||||||
|
#include "TestWin.h"
|
||||||
|
|
||||||
|
struct _MainWin
|
||||||
|
{
|
||||||
|
GtkApplicationWindow parent_instance;
|
||||||
|
GtkWidget *main_box, *btn_box;
|
||||||
|
GtkWidget *btn_test;
|
||||||
|
GtkWidget *label_space;
|
||||||
|
TestWin *test_win;
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_TYPE(MainWin, main_win, GTK_TYPE_APPLICATION_WINDOW)
|
||||||
|
|
||||||
|
static void btntest_clicked(GtkWidget *btn, MainWin *self)
|
||||||
|
{
|
||||||
|
gboolean test_win_showed = gtk_widget_get_visible(GTK_WIDGET(self->test_win));
|
||||||
|
if (test_win_showed)
|
||||||
|
{
|
||||||
|
gtk_widget_set_visible(GTK_WIDGET(self->test_win), FALSE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gtk_widget_set_visible(GTK_WIDGET(self->test_win), TRUE);
|
||||||
|
gtk_window_present(GTK_WINDOW(self->test_win));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void main_win_init(MainWin *self)
|
||||||
|
{
|
||||||
|
// Initalize window
|
||||||
|
gtk_window_set_default_size(GTK_WINDOW(self), 800, 450);
|
||||||
|
gtk_window_set_default_icon_name("org.gtk.daleclack");
|
||||||
|
gtk_window_set_title(GTK_WINDOW(self), "Wayland window test");
|
||||||
|
|
||||||
|
// Create child window
|
||||||
|
self->test_win = test_win_new(GTK_WINDOW(self));
|
||||||
|
gtk_widget_set_visible(GTK_WIDGET(self->test_win), FALSE);
|
||||||
|
|
||||||
|
// Create Box and buttons
|
||||||
|
self->main_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
|
||||||
|
self->btn_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
|
||||||
|
self->btn_test = gtk_button_new_with_label("Test");
|
||||||
|
self->label_space = gtk_label_new(" ");
|
||||||
|
g_signal_connect(self->btn_test, "clicked", G_CALLBACK(btntest_clicked), self);
|
||||||
|
|
||||||
|
// Pack widgets
|
||||||
|
gtk_widget_set_hexpand(self->label_space, TRUE);
|
||||||
|
gtk_widget_set_vexpand(self->label_space, TRUE);
|
||||||
|
gtk_widget_set_halign(self->btn_test, GTK_ALIGN_START);
|
||||||
|
gtk_box_append(GTK_BOX(self->btn_box), self->btn_test);
|
||||||
|
gtk_box_append(GTK_BOX(self->main_box), self->label_space);
|
||||||
|
gtk_box_append(GTK_BOX(self->main_box), self->btn_box);
|
||||||
|
gtk_window_set_child(GTK_WINDOW(self), self->main_box);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void main_win_class_init(MainWinClass *self)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWin *main_win_new(GtkApplication *app)
|
||||||
|
{
|
||||||
|
return Main_Win(g_object_new(main_win_get_type(),
|
||||||
|
"application", app, NULL));
|
||||||
|
}
|
|
@ -1,3 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
G_DECLARE_FINAL_TYPE(MainWin, main_win, Main, Win, GtkApplicationWindow)
|
||||||
|
|
||||||
|
MainWin *main_win_new(GtkApplication *app);
|
|
@ -0,0 +1,60 @@
|
||||||
|
#include "TestWin.h"
|
||||||
|
|
||||||
|
struct _TestWin
|
||||||
|
{
|
||||||
|
GtkWindow parent_instance;
|
||||||
|
GtkWidget *header;
|
||||||
|
GtkWidget *btn_close, *btn_mini;
|
||||||
|
};
|
||||||
|
|
||||||
|
G_DEFINE_TYPE(TestWin, test_win, GTK_TYPE_WINDOW)
|
||||||
|
|
||||||
|
static void test_win_hide(TestWin *self)
|
||||||
|
{
|
||||||
|
gtk_widget_set_visible(GTK_WIDGET(self), FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_win_init(TestWin *self)
|
||||||
|
{
|
||||||
|
gtk_window_set_title(GTK_WINDOW(self), "Test Window 1");
|
||||||
|
// Create widgets
|
||||||
|
self->header = gtk_header_bar_new();
|
||||||
|
gtk_widget_set_css_classes(self->header, NULL);
|
||||||
|
gtk_widget_add_css_class(self->header, "mytitlebar");
|
||||||
|
gtk_window_set_titlebar(GTK_WINDOW(self), self->header);
|
||||||
|
|
||||||
|
// Initalize headerbar
|
||||||
|
gtk_header_bar_set_show_title_buttons(GTK_HEADER_BAR(self->header), FALSE);
|
||||||
|
|
||||||
|
// Add a close button
|
||||||
|
self->btn_close = gtk_button_new_with_label("\u00d7");
|
||||||
|
gtk_widget_set_css_classes(self->btn_close, NULL);
|
||||||
|
gtk_widget_add_css_class(self->btn_close, "ctrl_btn");
|
||||||
|
gtk_header_bar_pack_start(GTK_HEADER_BAR(self->header), self->btn_close);
|
||||||
|
|
||||||
|
// Add a minimize button
|
||||||
|
self->btn_mini = gtk_button_new_with_label("-");
|
||||||
|
gtk_widget_set_css_classes(self->btn_mini, NULL);
|
||||||
|
gtk_widget_add_css_class(self->btn_mini, "ctrl_btn");
|
||||||
|
gtk_header_bar_pack_start(GTK_HEADER_BAR(self->header), self->btn_mini);
|
||||||
|
|
||||||
|
// Add style for headerbar
|
||||||
|
GtkCssProvider *provider = gtk_css_provider_new();
|
||||||
|
gtk_css_provider_load_from_resource(provider, "/org/gtk/daleclack/style.css");
|
||||||
|
gtk_style_context_add_provider_for_display(gtk_widget_get_display(GTK_WIDGET(self)),
|
||||||
|
GTK_STYLE_PROVIDER(provider),
|
||||||
|
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||||
|
|
||||||
|
g_signal_connect_swapped(self->btn_close, "clicked", G_CALLBACK(test_win_hide), self);
|
||||||
|
g_signal_connect_swapped(self->btn_mini, "clicked", G_CALLBACK(test_win_hide), self);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_win_class_init(TestWinClass *klass)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
TestWin *test_win_new(GtkWindow *parent)
|
||||||
|
{
|
||||||
|
return Test_Win(g_object_new(test_win_get_type(),
|
||||||
|
"transient-for", parent, NULL));
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
G_DECLARE_FINAL_TYPE(TestWin, test_win, Test, Win, GtkWindow)
|
||||||
|
|
||||||
|
TestWin *test_win_new(GtkWindow *parent);
|
|
@ -6,41 +6,8 @@ using json = nlohmann::json;
|
||||||
|
|
||||||
static void gtkmain(GtkApplication *app, gpointer user_data)
|
static void gtkmain(GtkApplication *app, gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget *window, *header;
|
// Create window
|
||||||
GtkWidget *btn_close, *btn_mini;
|
MainWin *window = main_win_new(app);
|
||||||
GtkWidget *img_close, *img_mini;
|
|
||||||
|
|
||||||
// Create widgets
|
|
||||||
window = gtk_application_window_new(app);
|
|
||||||
header = gtk_header_bar_new();
|
|
||||||
|
|
||||||
const char *title_classes[] = {"titlebar", ""};
|
|
||||||
gtk_widget_set_css_classes(header, title_classes);
|
|
||||||
gtk_window_set_titlebar(GTK_WINDOW(window), header);
|
|
||||||
|
|
||||||
// Initalize headerbar
|
|
||||||
gtk_header_bar_set_show_title_buttons(GTK_HEADER_BAR(header), FALSE);
|
|
||||||
const char *btn_classes[] = {"ctrl_btn",""};
|
|
||||||
|
|
||||||
// Add a close button
|
|
||||||
btn_close = gtk_button_new_with_label("\u00d7");
|
|
||||||
gtk_widget_set_css_classes(btn_close, btn_classes);
|
|
||||||
gtk_header_bar_pack_start(GTK_HEADER_BAR(header), btn_close);
|
|
||||||
|
|
||||||
// Add a minimize button
|
|
||||||
btn_mini = gtk_button_new_with_label("-");
|
|
||||||
gtk_widget_set_css_classes(btn_mini, btn_classes);
|
|
||||||
gtk_header_bar_pack_start(GTK_HEADER_BAR(header), btn_mini);
|
|
||||||
|
|
||||||
// Add style for headerbar
|
|
||||||
GtkCssProvider *provider = gtk_css_provider_new();
|
|
||||||
gtk_css_provider_load_from_resource(provider, "/org/gtk/daleclack/style.css");
|
|
||||||
gtk_style_context_add_provider_for_display(gtk_widget_get_display(window),
|
|
||||||
GTK_STYLE_PROVIDER(provider),
|
|
||||||
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
|
||||||
|
|
||||||
g_signal_connect_swapped(btn_close, "clicked", G_CALLBACK(gtk_window_close), window);
|
|
||||||
g_signal_connect_swapped(btn_mini, "clicked", G_CALLBACK(gtk_window_minimize), window);
|
|
||||||
// show the window
|
// show the window
|
||||||
gtk_window_present(GTK_WINDOW(window));
|
gtk_window_present(GTK_WINDOW(window));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue