Как установить файл PNG в расширение Gnome Shell для St.Icon

В моем расширении Gnome Shell есть папка «иконки», а внутри есть файл значка с именем «MyIcon.png». Я хочу использовать его как параметр для объекта St.Icon.

let icon = new St.Icon({ /* I need what to code here*/ });

Спасибо за любую помощь.

Сельчук.


person The_Cute_Hedgehog    schedule 05.12.2013    source источник


Ответы (4)


Вот решение для GnomeShell v3.8.4:

const St = imports.gi.St;
const Me = imports.misc.extensionUtils.getCurrentExtension();
const Gio = imports.gi.Gio;
let gicon = Gio.icon_new_for_string(Me.path + "/icons/my_icon.png");
icon = new St.Icon({ gicon });
person Edouard Chevalier    schedule 14.01.2014
comment
Спасибо, именно об этом я и говорил. - person The_Cute_Hedgehog; 14.01.2014

Вчера столкнулся с такой же проблемой.

Вы должны сделать две вещи:

Шаг 1: добавьте этот код в файл "stylesheet.css"

.your-icon-name {
    background-image: url("icons/MyIcon.png");
    background-size: 20px;
    height: 20px;
    width: 20px;
}

«размер фона», «высота» и «ширина» предназначены только для предварительного масштабирования изображения, их можно не указывать, чтобы сохранить исходный размер.

Шаг 2. Напишите это в файле .js:

let icon = new St.Icon({style_class: 'your-icon-name'});
person nils277    schedule 21.12.2013
comment
Да, это то, чем я сейчас занимаюсь. Тем не менее, есть правильное решение или обходной путь для этой проблемы. Я видел пример, когда разработчик включил в путь поиска свой собственный каталог 'icons'. Я дам вам знать, где я это видел, когда у меня будет время для Google. Спасибо. - person The_Cute_Hedgehog; 23.12.2013
comment
Я смущен, почему вы думаете, что это не правильное решение. Есть ли что-то, чего не хватает? - person Eric Fossum; 19.07.2019
comment
@EricFossum Если бы мы сравнили это с HTML, это было бы похоже на использование тега img, а затем не определение src, а установку стиля фонового изображения для этого тега img. Вот что делает это не правильным решением. - person DaVince; 19.02.2021

Вот пример того, как это сделать:

_getIconImage: function() {
     let icon_file = this._path + "/icons/icon.png";
     let file = Gio.file_new_for_path(icon_file);
     let icon_uri = file.get_uri();

     return St.TextureCache.get_default().load_uri_async(icon_uri, 64, 64);
},

myIcon = _getIconImage();
person fpmurphy    schedule 27.12.2013

Для тех, кто хочет добавить подкаталог своего расширения icon/ (или images/ и т. д.) в путь поиска, чтобы использовать стили CSS, вот что работает для меня:

function init(metadata) {
    // ...

    let theme = imports.gi.Gtk.IconTheme.get_default();
    theme.append_search_path(metadata.path + "/icons");

    // ...
}
person Richard Fellinger    schedule 27.07.2016