Add internal backgrounds

This commit is contained in:
daleclack 2022-01-30 13:39:18 +08:00
parent e9fb7fd3ec
commit 273b372dc2
4 changed files with 140 additions and 17 deletions

View File

@ -0,0 +1,36 @@
<svg width="64" height="64" version="1.1" viewBox="0 0 16.933 16.933" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="linearGradient897-3" x1="6.8792" x2="6.8792" y1="285.36" y2="283.77" gradientTransform="matrix(.99998 0 0 .99998 0 -280.06)" gradientUnits="userSpaceOnUse">
<stop offset="0"/>
<stop stop-opacity="0" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient1769-5" x1="445.28" x2="445.28" y1="179.28" y2="200.07" gradientTransform="matrix(.38956 0 0 .38184 -165.52 -63.44)" gradientUnits="userSpaceOnUse">
<stop stop-color="#60c0f0" offset="0"/>
<stop stop-color="#83d4fb" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient860-6" x1="8.4667" x2="8.4667" y1="293.3" y2="292.77" gradientTransform="translate(0,-280.07)" gradientUnits="userSpaceOnUse">
<stop stop-color="#008ea2" stop-opacity=".25" offset="0"/>
<stop stop-color="#fff" stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient868-1" x1="8.4667" x2="8.4667" y1="294.62" y2="293.56" gradientTransform="matrix(.99998 0 0 .99998 0 -280.06)" gradientUnits="userSpaceOnUse">
<stop stop-color="#008ea2" stop-opacity=".25098" offset="0"/>
<stop stop-color="#008ea2" stop-opacity=".15" offset=".75678"/>
<stop stop-color="#fff" stop-opacity=".15" offset="1"/>
</linearGradient>
<linearGradient id="linearGradient907-9" x1="1.0583" x2="15.875" y1="289.59" y2="289.59" gradientTransform="translate(0,-280.07)" gradientUnits="userSpaceOnUse">
<stop stop-color="#46a2d7" stop-opacity=".5" offset="0"/>
<stop stop-color="#46a2d7" stop-opacity="0" offset=".10783"/>
<stop stop-color="#46a2d7" stop-opacity=".095808" offset=".89398"/>
<stop stop-color="#46a2d7" stop-opacity=".5" offset="1"/>
</linearGradient>
</defs>
<image x=".52916" y="1.969" width="15.875" height="13.229" image-rendering="optimizeQuality" preserveAspectRatio="none" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAAyCAYAAAAA9rgCAAAACXBIWXMAAA7XAAAO1wFxhj+8AAAA GXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAbVJREFUaIHtml9TglAQRw9/jMrR 6a3v//2q0azMFOhhuXJLRgHv5G3dM8PgqHA57C68/BIOSbxtCLW3RUvy63MOFMAESOkvXQMlsAW+ gB2RiifevgDmwANwB2QDz7UD1sASWAEboApzmeHIaSs7Bx6Bmff9EGpgCtwjN2+B3ICSiKqdN/sC qewMaeehsjTH3CCd4UbjBXhHWv0S0gdrukpOkDYeU1kf1y3T5pwF0uJviHTVdREd5+izzilqZMxK vNFyglmznSPrkyKyGdLia2Sm+1T61BsiPXGsYwd8Ijd7TXOzc++PoWT9xSe07V0RpsJD3hwbpMOe kNEq86OHhMG1+SVm2D1TSuR1Wf2FsCN0B/Vd8xZ5GC+Ar2PzoIWMdrSSaxAG7xllwtoxYe2YsHZM WDsmrB0T1o4Ja8eEtWPC2jFh7ZiwdkxYOyasHRPWjglr52qFo48MnsneL6WNDfYJnPxHasStBGon vEWiPdFmJEfislofNJEpl82q+RkzukQAJTROdgU8I3mtKvd+WNJmm8aES2OjRLp2AbzSdG+o+HBs uLndIgXcj2qX0NiAeGx0Bta/AZSga/2YDpsuAAAAAElFTkSuQmCC "/>
<path d="m2.21 2.38h2.695c0.75074 0 0.78302 0.0285 1.5421 0.62962 0.78159 0.5904 0.94779 0.607 1.8636 0.607l6.4126-0.0524c0.638-5e-3 1.1517 0.51363 1.1517 1.1516v6.77c0 0.63802-0.51364 1.1517-1.1517 1.1517h-12.513c-0.63802 0-1.1517-0.51364-1.1517-1.1517v-7.9542c0-0.63802 0.51364-1.1517 1.1517-1.1517z" fill="#46a2d7"/>
<path d="m2.2102 2.3812c-0.63801 0-1.1518 0.51384-1.1518 1.1518v2.8167h14.816v-1.633c0-0.63801-0.51387-1.1563-1.1518-1.1513l-6.4124 0.052194c-0.91582 0-1.0818-0.016798-1.8634-0.60718-0.75908-0.6011-0.79128-0.62941-1.542-0.62941h-2.695z" fill="url(#linearGradient897-3)" opacity=".35" stroke-width=".26458"/>
<rect x="1.0583" y="4.49" width="14.817" height="10.054" rx="1.1517" ry="1.1288" fill="url(#linearGradient1769-5)"/>
<rect x="1.0583" y="12.7" width="14.817" height=".52915" fill="url(#linearGradient860-6)"/>
<path d="m1.0655 13.494c0.03752 0.59168 0.5312 1.0583 1.1446 1.0583h12.513c0.6134 0 1.1071-0.46664 1.1446-1.0583h-14.802z" fill="url(#linearGradient868-1)" stroke-width=".26458"/>
<rect x="1.0583" y="4.49" width="14.817" height="10.054" rx="1.1517" ry="1.1288" fill="url(#linearGradient907-9)"/>
<path d="m2.2102 4.4979c-0.63801 0-1.1518 0.50323-1.1518 1.1286v0.23512c0-0.6089 0.51384-1.0991 1.1518-1.0991h12.513c0.63801 0 1.1518 0.49024 1.1518 1.0991v-0.23512c0-0.62536-0.51384-1.1286-1.1518-1.1286z" fill="#ffffff" opacity=".1" stroke-width=".26458"/>
<path class="ColorScheme-Text" d="m5.78 6.3295c-0.49611 0-0.89549 0.39938-0.89549 0.89549v4.0298c0 0.49611 0.39938 0.89549 0.89549 0.89549h5.3731c0.49611 0 0.89549-0.39938 0.89549-0.89549v-4.0298c0-0.49611-0.39938-0.89549-0.89549-0.89549zm0 0.44775h5.3731c0.24805 0 0.44775 0.1997 0.44775 0.44775v4.0298l-2.2387-2.2387-1.5579 1.791-1.1286-0.89549-1.3432 1.3432v-4.0298c0-0.24805 0.1997-0.44775 0.44775-0.44775zm1.1194 0.89549c-0.37094 0-0.67163 0.30069-0.67163 0.67163 0 0.37094 0.30069 0.67163 0.67163 0.67163 0.37094 0 0.67163-0.30069 0.67163-0.67163 0-0.37094-0.30069-0.67163-0.67163-0.67163z" color="#363636" fill="#000000" opacity=".15" stroke-width=".44775"/>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -25,7 +25,8 @@ link_directories (${GTKMM3_LIBRARY_DIRS})
set(RESOURCE_LIST set(RESOURCE_LIST
icons/16x16/actions/list-add.svg icons/16x16/actions/list-add.svg
icons/16x16/actions/list-remove.svg icons/16x16/actions/list-remove.svg
folder.svg) folder.svg
folder-images.svg)
compile_gresources(RESOURCE_FILE compile_gresources(RESOURCE_FILE
XML_OUT XML_OUT

View File

@ -1,4 +1,6 @@
#include "MyPrefs.hh" #include "MyPrefs.hh"
#include "winpe.xpm"
#include "../Gtk4/img7.xpm"
MyPrefs::MyPrefs() MyPrefs::MyPrefs()
: main_box(Gtk::ORIENTATION_VERTICAL, 10), : main_box(Gtk::ORIENTATION_VERTICAL, 10),
@ -12,29 +14,48 @@ MyPrefs::MyPrefs()
// Initalize Stores // Initalize Stores
folders_store = Gtk::ListStore::create(n_columns); folders_store = Gtk::ListStore::create(n_columns);
folders_view.set_model(folders_store); folders_view.set_model(folders_store);
folder_selection = folders_view.get_selection();
folder_selection->signal_changed().connect(sigc::mem_fun(*this, &MyPrefs::folders_view_changed));
images_store = Gtk::ListStore::create(n_columns); images_store = Gtk::ListStore::create(n_columns);
images_view.set_model(images_store); images_view.set_model(images_store);
image_selection = images_view.get_selection();
image_selection->signal_changed().connect(sigc::mem_fun(*this, &MyPrefs::images_view_changed));
// Load Pixbufs // Load Pixbufs
auto pixbuf = Gdk::Pixbuf::create_from_resource("/org/gtk/daleclack/folder.svg"); auto pixbuf = Gdk::Pixbuf::create_from_resource("/org/gtk/daleclack/folder.svg");
folder_pixbuf = pixbuf->scale_simple(24,24,Gdk::INTERP_BILINEAR); folder_pixbuf = pixbuf->scale_simple(24, 24, Gdk::INTERP_BILINEAR);
pixbuf.reset();
pixbuf = Gdk::Pixbuf::create_from_resource("/org/gtk/daleclack/folder-images.svg");
image_pixbuf = pixbuf->scale_simple(24, 24, Gdk::INTERP_BILINEAR);
pixbuf.reset();
// Add Default Value for folders view // Add Default Value for folders view
auto row = *(folders_store->append()); auto row = *(folders_store->append());
row[n_columns.m_col_path] = "";
row[n_columns.m_col_name] = "Default Backgrounds";
row[n_columns.m_col_pixbuf] = folder_pixbuf;
row[n_columns.m_col_internal] = true;
row = *(folders_store->append());
row[n_columns.m_col_path] = Glib::get_home_dir(); row[n_columns.m_col_path] = Glib::get_home_dir();
row[n_columns.m_col_name] = "User's Home"; row[n_columns.m_col_name] = "User's Home";
row[n_columns.m_col_pixbuf] = folder_pixbuf; row[n_columns.m_col_pixbuf] = folder_pixbuf;
folders_view.append_column(" ",n_columns.m_col_pixbuf); row[n_columns.m_col_internal] = false;
folders_view.append_column("Folders", n_columns.m_col_name);
row = *(folders_store->append()); row = *(folders_store->append());
row[n_columns.m_col_path] = Glib::get_user_special_dir(Glib::USER_DIRECTORY_PICTURES); row[n_columns.m_col_path] = Glib::get_user_special_dir(Glib::USER_DIRECTORY_PICTURES);
row[n_columns.m_col_name] = "User's Pictures Directory"; row[n_columns.m_col_name] = "User's Pictures Directory";
row[n_columns.m_col_pixbuf] = folder_pixbuf; row[n_columns.m_col_pixbuf] = image_pixbuf;
row[n_columns.m_col_internal] = false;
// Append Column for the folders view
folders_view.append_column(" ", n_columns.m_col_pixbuf);
folders_view.append_column("Name", n_columns.m_col_name);
// Default Value for imags view // Default Value for imags view
row = *(images_store->append()); default_folders_view();
row[n_columns.m_col_name] = "Test"; images_view.append_column(" ", n_columns.m_col_pixbuf);
images_view.append_column("Images", n_columns.m_col_name); images_view.append_column("Images", n_columns.m_col_name);
// Add Views // Add Views
@ -48,7 +69,7 @@ MyPrefs::MyPrefs()
btnadd.set_image_from_icon_name("list-add"); btnadd.set_image_from_icon_name("list-add");
btnadd.signal_clicked().connect(sigc::mem_fun(*this, &MyPrefs::btnadd_clicked)); btnadd.signal_clicked().connect(sigc::mem_fun(*this, &MyPrefs::btnadd_clicked));
btnremove.set_image_from_icon_name("list-remove"); btnremove.set_image_from_icon_name("list-remove");
btnremove.signal_clicked().connect(sigc::mem_fun(*this,&MyPrefs::btnremove_clicked)); btnremove.signal_clicked().connect(sigc::mem_fun(*this, &MyPrefs::btnremove_clicked));
btnbox.pack_start(btnadd, Gtk::PACK_SHRINK); btnbox.pack_start(btnadd, Gtk::PACK_SHRINK);
btnbox.pack_start(btnremove, Gtk::PACK_SHRINK); btnbox.pack_start(btnremove, Gtk::PACK_SHRINK);
main_box.pack_start(btnbox, Gtk::PACK_SHRINK); main_box.pack_start(btnbox, Gtk::PACK_SHRINK);
@ -94,18 +115,79 @@ void MyPrefs::dialog_response(int response_id)
dialog.reset(); dialog.reset();
} }
void MyPrefs::btnremove_clicked() { void MyPrefs::btnremove_clicked()
{
// Get the selection and remove the selected item // Get the selection and remove the selected item
selection = folders_view.get_selection(); auto iter = folder_selection->get_selected();
auto iter = selection->get_selected(); if (iter)
if(iter){ {
folders_store->erase(iter); folders_store->erase(iter);
} }
} }
void MyPrefs::folders_view_changed(){} void MyPrefs::folders_view_changed()
{
// Get Selected Folder
auto row = *(folder_selection->get_selected());
if (row[n_columns.m_col_internal])
{
// The default folder
default_folders_view();
}
else
{
// User defined folder
images_store->clear();
}
}
void MyPrefs::images_view_changed(){} void MyPrefs::default_folders_view()
{
// Clear the store
images_store->clear();
// Add Default values
auto row = *(images_store->append());
row[n_columns.m_col_path] = ":1";
row[n_columns.m_col_name] = "winpe.xpm";
row[n_columns.m_col_internal] = true;
row[n_columns.m_col_pixbuf] = image_pixbuf;
row = *(images_store->append());
row[n_columns.m_col_path] = ":2";
row[n_columns.m_col_name] = "img7.xpm";
row[n_columns.m_col_internal] = true;
row[n_columns.m_col_pixbuf] = image_pixbuf;
}
void MyPrefs::images_view_changed()
{
// Set the background as selected
auto row = *(image_selection->get_selected());
if (row[n_columns.m_col_internal])
{
std::string path = row[n_columns.m_col_path];
switch (path[1])
{
case '1':
set_background_internal(winpe);
break;
case '2':
set_background_internal(img7);
break;
}
}
}
void MyPrefs::set_background_internal(const char *const *data)
{
// Set a internal background
auto pixbuf = Gdk::Pixbuf::create_from_xpm_data(data);
auto sized = pixbuf->scale_simple(1024, 576, Gdk::INTERP_BILINEAR);
gtk_image_set_from_pixbuf(background1->gobj(), sized->gobj());
pixbuf.reset();
sized.reset();
}
void MyPrefs::set_background(Gtk::Image *back) void MyPrefs::set_background(Gtk::Image *back)
{ {

View File

@ -17,10 +17,12 @@ protected:
add(m_col_pixbuf); add(m_col_pixbuf);
add(m_col_path); add(m_col_path);
add(m_col_name); add(m_col_name);
add(m_col_internal);
} }
Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf>> m_col_pixbuf; Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf>> m_col_pixbuf;
Gtk::TreeModelColumn<std::string> m_col_path; Gtk::TreeModelColumn<std::string> m_col_path;
Gtk::TreeModelColumn<Glib::ustring> m_col_name; Gtk::TreeModelColumn<Glib::ustring> m_col_name;
Gtk::TreeModelColumn<bool> m_col_internal;
}; };
ModelColumns n_columns; ModelColumns n_columns;
@ -37,15 +39,17 @@ private:
Gtk::Button btnadd, btnremove; Gtk::Button btnadd, btnremove;
//Folder Open Dialog //Folder Open Dialog
Glib::RefPtr<Gdk::Pixbuf> folder_pixbuf; Glib::RefPtr<Gdk::Pixbuf> folder_pixbuf, image_pixbuf;
Glib::RefPtr<Gtk::FileChooserNative> dialog; Glib::RefPtr<Gtk::FileChooserNative> dialog;
void dialog_response(int response_id); void dialog_response(int response_id);
Glib::RefPtr<Gtk::TreeSelection> selection; Glib::RefPtr<Gtk::TreeSelection> folder_selection, image_selection;
//Signal Handlers //Signal Handlers
void btnadd_clicked(); void btnadd_clicked();
void btnremove_clicked(); void btnremove_clicked();
void folders_view_changed(); void folders_view_changed();
void images_view_changed(); void images_view_changed();
}; void default_folders_view();
void set_background_internal(const char * const * data);
};