Make internal backgrounds available
This commit is contained in:
parent
c413132308
commit
1ab7ff23ae
|
@ -1,3 +1,6 @@
|
||||||
{
|
{
|
||||||
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
|
"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
|
||||||
|
"files.associations": {
|
||||||
|
"*.xpm": "cpp"
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -15,6 +15,18 @@ const char *my_item_get_display_name(MyItem *item)
|
||||||
return item->col_name;
|
return item->col_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get Path
|
||||||
|
const char *my_item_get_path(MyItem *item)
|
||||||
|
{
|
||||||
|
return item->col_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get whether the image is internal
|
||||||
|
gboolean my_item_get_internal(MyItem *item)
|
||||||
|
{
|
||||||
|
return item->internal;
|
||||||
|
}
|
||||||
|
|
||||||
static void my_item_init(MyItem *self)
|
static void my_item_init(MyItem *self)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,3 +10,9 @@ MyItem *my_item_new(const char *disp_name, const char *path,
|
||||||
|
|
||||||
// Get display name
|
// Get display name
|
||||||
const char *my_item_get_display_name(MyItem *item);
|
const char *my_item_get_display_name(MyItem *item);
|
||||||
|
|
||||||
|
// Get Path
|
||||||
|
const char *my_item_get_path(MyItem *item);
|
||||||
|
|
||||||
|
// Get whether the image is internal
|
||||||
|
gboolean my_item_get_internal(MyItem *item);
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
#include "MyPrefs.h"
|
#include "MyPrefs.h"
|
||||||
#include "MyItem.h"
|
#include "MyItem.h"
|
||||||
|
#include "winpe.xpm"
|
||||||
|
#include "img7.xpm"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
struct _MyPrefs
|
struct _MyPrefs
|
||||||
{
|
{
|
||||||
|
@ -38,7 +41,11 @@ struct _MyPrefs
|
||||||
GtkColumnViewColumn *pics_string_column;
|
GtkColumnViewColumn *pics_string_column;
|
||||||
GtkListItemFactory *factory_pics_image;
|
GtkListItemFactory *factory_pics_image;
|
||||||
GtkListItemFactory *factory_pics_string;
|
GtkListItemFactory *factory_pics_string;
|
||||||
|
|
||||||
|
// Pixbufs
|
||||||
|
GdkPixbuf *pixbuf, *sized;
|
||||||
int width, height;
|
int width, height;
|
||||||
|
char current_image[256];
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE(MyPrefs, my_prefs, GTK_TYPE_WINDOW)
|
G_DEFINE_TYPE(MyPrefs, my_prefs, GTK_TYPE_WINDOW)
|
||||||
|
@ -193,12 +200,51 @@ static void pics_view_init(MyPrefs *self)
|
||||||
self->pics_string_column);
|
self->pics_string_column);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan the selection of two column views
|
static void update_internal_image(GtkWidget *background1, const char **id)
|
||||||
gboolean scan_func(gpointer data)
|
|
||||||
{
|
{
|
||||||
|
GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data(id);
|
||||||
|
GdkPixbuf *sized = gdk_pixbuf_scale_simple(pixbuf, 1024, 576, GDK_INTERP_BILINEAR);
|
||||||
|
gtk_picture_set_pixbuf(GTK_PICTURE(background1), pixbuf);
|
||||||
|
g_object_unref(pixbuf);
|
||||||
|
g_object_unref(sized);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scan the selection of two column views
|
||||||
|
static gboolean scan_func(gpointer data)
|
||||||
|
{
|
||||||
|
MyPrefs *prefs = MY_PREFS(data);
|
||||||
|
// Get the seletion of images view
|
||||||
|
auto model = gtk_column_view_get_model(GTK_COLUMN_VIEW(prefs->images_view));
|
||||||
|
auto item = gtk_single_selection_get_selected_item(GTK_SINGLE_SELECTION(model));
|
||||||
|
const char *file_name = my_item_get_path(MY_ITEM(item));
|
||||||
|
gboolean is_internal = my_item_get_internal(MY_ITEM(item));
|
||||||
|
if (strncmp(prefs->current_image, file_name, strlen(file_name)) != 0)
|
||||||
|
{
|
||||||
|
// Update image
|
||||||
|
if (is_internal)
|
||||||
|
{
|
||||||
|
switch (file_name[1])
|
||||||
|
{
|
||||||
|
case '1':
|
||||||
|
update_internal_image(prefs->background, img7);
|
||||||
|
break;
|
||||||
|
case '2':
|
||||||
|
update_internal_image(prefs->background, winpe);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
strncpy(prefs->current_image, file_name, 256);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void my_prefs_close_request(GtkWindow *self, gpointer user_data){
|
||||||
|
gtk_widget_set_visible(GTK_WIDGET(self), FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
static void my_prefs_init(MyPrefs *self)
|
static void my_prefs_init(MyPrefs *self)
|
||||||
{
|
{
|
||||||
// Options strings for dropdown
|
// Options strings for dropdown
|
||||||
|
@ -211,6 +257,7 @@ static void my_prefs_init(MyPrefs *self)
|
||||||
NULL};
|
NULL};
|
||||||
self->width = 1024;
|
self->width = 1024;
|
||||||
self->height = 576;
|
self->height = 576;
|
||||||
|
strncpy(self->current_image, ":1", 256);
|
||||||
|
|
||||||
// Initalize window
|
// Initalize window
|
||||||
gtk_window_set_default_size(GTK_WINDOW(self), 800, 450);
|
gtk_window_set_default_size(GTK_WINDOW(self), 800, 450);
|
||||||
|
@ -273,6 +320,12 @@ static void my_prefs_init(MyPrefs *self)
|
||||||
|
|
||||||
// Set Child
|
// Set Child
|
||||||
gtk_window_set_child(GTK_WINDOW(self), self->stack_box);
|
gtk_window_set_child(GTK_WINDOW(self), self->stack_box);
|
||||||
|
|
||||||
|
// Add timer to scan the list
|
||||||
|
g_timeout_add(16, scan_func, self);
|
||||||
|
|
||||||
|
// Close request for this window
|
||||||
|
g_signal_connect(self, "close-request", G_CALLBACK(my_prefs_close_request), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void my_prefs_class_init(MyPrefsClass *klass)
|
static void my_prefs_class_init(MyPrefsClass *klass)
|
||||||
|
|
|
@ -11,7 +11,7 @@ static void gtkmain(GtkApplication *app, gpointer data)
|
||||||
_window = GTK_WINDOW(window);
|
_window = GTK_WINDOW(window);
|
||||||
gtk_window_set_icon_name(_window, "org.gtk.daleclack");
|
gtk_window_set_icon_name(_window, "org.gtk.daleclack");
|
||||||
gtk_window_set_title(_window, "Background Prefs Test");
|
gtk_window_set_title(_window, "Background Prefs Test");
|
||||||
gtk_window_set_default_size(_window, 1024, 576);
|
// gtk_window_set_default_size(_window, 1024, 576);
|
||||||
|
|
||||||
// Overlay to pack the background and button
|
// Overlay to pack the background and button
|
||||||
overlay = gtk_overlay_new();
|
overlay = gtk_overlay_new();
|
||||||
|
@ -21,9 +21,13 @@ static void gtkmain(GtkApplication *app, gpointer data)
|
||||||
|
|
||||||
// Add background widget
|
// Add background widget
|
||||||
main_pic = gtk_picture_new();
|
main_pic = gtk_picture_new();
|
||||||
|
gtk_picture_set_content_fit(GTK_PICTURE(main_pic), GTK_CONTENT_FIT_FILL);
|
||||||
gtk_widget_set_hexpand(main_pic, TRUE);
|
gtk_widget_set_hexpand(main_pic, TRUE);
|
||||||
gtk_widget_set_vexpand(main_pic, TRUE);
|
gtk_widget_set_vexpand(main_pic, TRUE);
|
||||||
|
gtk_widget_set_halign(main_pic, GTK_ALIGN_FILL);
|
||||||
|
gtk_widget_set_valign(main_pic, GTK_ALIGN_FILL);
|
||||||
gtk_overlay_set_child(_overlay, main_pic);
|
gtk_overlay_set_child(_overlay, main_pic);
|
||||||
|
gtk_widget_set_size_request(main_pic, 1024, 576);
|
||||||
|
|
||||||
// Add a button
|
// Add a button
|
||||||
btn_back = gtk_button_new_with_label("Prefs");
|
btn_back = gtk_button_new_with_label("Prefs");
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue