Как реальные родные виджеты пользовательского интерфейса разрешаются в инфраструктуре NativeUI C ++?

0

Я хотел бы знать и понимать код, который в конечном итоге вызывает фактические виджеты IOS/Android/WP, когда класс NativeUI C++ используется в базе кода MoSync.

Я быстро рассмотрел несколько классов в GitHub, например Button.cpp и т.д., Но я не могу с готовностью видеть, как ссылаются настоящие виджеты на родном устройстве.

Я не C/C++ dev (Java), но я вроде как ожидал некоторых #ifdefs или что-то, чтобы "переключить" соответствующую базовую реализацию. Если это не так, то это прекрасно, просто побалуйте себя любопытством.

Теги:
mobile
mosync

1 ответ

1

Классы виджета C++, такие как упомянутый Button.cpp, имеют свой базовый класс в Widget.cpp, который создает любой виджет на основе строкового аргумента. Кроме того, любые свойства виджета эффективно устанавливаются через строковые аргументы.

my_button = new NativeUI::Widget("button")
my_button->setProperty("text", "OK");

MoSync реализует интерфейс IDL для собственных виджетах пользовательского интерфейса в WidgetFunctions.idl:

typedef int MAWidgetHandle;
MAWidgetHandle maWidgetCreate(in MAString widgetType);
int maWidgetSetProperty(in MAWidgetHandle widget, in MAString property, in MAString value);

Это независимое от языка описание функций, вызываемых из NativeUI :: Widget через интерфейс вызова C:

handle = maWidgetCreate("button");
maWidgetSetProperty(handle,"text","OK");

Пока мы не находимся на уровне MoSync C/C++, который является видом виртуальной машины с интерфейсом системного вызова. Отсюда он переводится на языки других платформ (Java, С# и т.д.) Различными способами:

Он может использовать Java Native Interface (JNI) для вызова соответствующих функций в среде Android в MoSyncNativeUI.java:

public int maWidgetCreate(String type)
public int maWidgetSetProperty(int widgetHandle, String key, String value)

Или он скомпилирован в промежуточный "язык PIPE", псевдо-ассемблерный диалект, этот язык затем транслируется в Visual Studio С# для Windows Phone 7 или в проект XCode для iOS.

Все платформы внедряют движок пользовательского интерфейса в "runtime", который поставляется вместе с каждым пакетом приложений. Эта среда выполнения предварительно сконфигурирована в соответствующем SDK и реализует эти собственные пользовательские интерфейсы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню