Vala - Clutter Json UI - Как подключить сигналы UI? - PullRequest
1 голос
/ 12 апреля 2020

Я пытаюсь использовать файлы пользовательского интерфейса JSON с Clutter. И я хочу подключить сигнал из файла пользовательского интерфейса к коду Vala.

Я пробовал что-то подобное, он загружает пользовательский интерфейс, но не подключает сигнал.

Как я могу подключить сигналы из файла интерфейса? Спасибо!


Вот мой main.vala:

using Clutter;


class UIDemo {

    public UIDemo()
    {
        var ui_json = new Script();
        ui_json.load_from_file("ui.json");
        ui_json.connect_signals(this);

        Stage stage = (Stage)ui_json.get_object("main-stage");

        stage.show();
    }

    protected void onActivated()
    {
        stdout.printf("ACTIVATED");
    }

}

void main(string[] args)
{
    Clutter.init(ref args);

    var app = new UIDemo();

    Clutter.main();
}

Вот пользовательский интерфейс. json:

{
    "id": "main-stage",
    "type": "ClutterStage",
    "color": "white",
    "width": 800,
    "height": 600,
    "title": "Script demo",
    "children": [{
        "id": "hello-label",
        "type": "ClutterText",
        "x": 400,
        "y": 300,
        "text": "Hello, world!",
        "color": "black",
        "font-name": "Sans 48px"
    }],
    "signals": [
    {
        "name": "destroy",
        "handler": "clutter_main_quit"
    },
    {
        "name": "activate",
        "handler": "onActivated"
    }]
}

1 Ответ

2 голосов
/ 12 апреля 2020

Это можно сделать двумя способами:

  1. сопоставить имя обработчика в ClutterScript с именем, сгенерированным Vala
  2. , экспортировать имя обработчика в Dynami c Таблица символов двоичного файла

Третье: пример не печатается на stdout во время работы программы, а stderr.

In ui.json Я изменил:

    {
        "name": "activate",
        "handler": "onActivated"
    }

на

    {
        "name": "activate",
        "handler": "ui_demo_onActivated"
    }

Имя в C, сгенерированное Vala, включает имя класса. Это также можно найти, посмотрев код C. Используйте переключатель --ccode с valac для создания файла C.

Этот символ также должен присутствовать в таблице символов Dynami c двоичного файла. Документация GNOME для написания функций обработчика ClutterScript рекомендует -export-dynamic передавать в компоновщик. Это выполняется компилятором C, и этот ключ можно передать компилятору C из valac с помощью -X -export-dynamic:

valac --pkg clutter-1.0 -X -export-dynamic main.vala

. Вы можете прочитать символы Dynami c, доступные в двоичный файл Для платформы, которая генерирует двоичные файлы ELF, например Linux, используйте readelf --dyn-syms main, где main - имя сгенерированного двоичного файла. ui_demo_onActivated будет в этом списке.

...