'

Программирование под Maemo

Понравилась презентация – покажи это...





Слайд 0

Программирование под Maemo Маличенко Дмитрий СПБ ГУАП


Слайд 1

2/20 План Что такое Maemo Программирование под Maemo Работа в Scratchbox-е Простой пример Рисование в окне Работа с диалоговым окном Что еще не рассмотрено Ссылки


Слайд 2

3/20 Что такое Maemo Maemo – это платформа для мобильных устройств основанная на Debian (www.maemo.org) Устройства на базе Maemo: N900 N810 N800 N770


Слайд 3

4/20 Какие есть версии Предыдущая – 4 (Diablo) Библиотека GUI: GTK Интерфейс: стилус Текущая – 5 (Fremantle) Библиотека GUI: GTK Интерфейс: палец + стилус Будущая версия – 6 (Harmattan) Библиотека GUI: Qt Интерфейс: только палец


Слайд 4

5/20 Целевое устройство N900 Умеет звонить Линукс внутри Многозадачность WiFi, bluetooth GPS Сенсоры Интерфейс: палец + стилус Клавиатура: настоящая + виртуальная


Слайд 5

6/20 Программирование под Maemo: особенности Мобильное устройство Маленький экран Интерфейс: палец/стилус Сенсоры Как облагородить интерфейс? Библиотека Hildon – надстройка над GTK+ Использование меньшего числа элементов управления


Слайд 6

7/20 Программирование под Maemo: инструменты Требуется Основанный на Debian дистрибутив Linux Scratchbox – набор инструментов для кросс компиляции (поддерживает ARM, X86) Maemo SDK Инструкция по установке http://maemo.org/development/


Слайд 7

8/20 Программирование под Maemo: связь с устройством Копирование файлов по USB на встроенную флешку (/home/user/MyDocs) USB Networking есть вспомогательные утилиты для запуска на устройстве WiFi + ssh/scp


Слайд 8

9/20 Работа в scratchbox - 1 Используются два окружения X86 для разработки, тестирования и отладки ARM для компиляции под устройство Представляет собой “песочницу” $ /scratchbox/login Welcome to Scratchbox, the cross-compilation toolkit! Use 'sb-menu' to change your compilation target. See /scratchbox/doc/ for documentation. [sbox-FREMANTLE_X86: ~] >


Слайд 9

10/20 Работа в scratchbox - 2 Запуск графического приложения в терминале 1 $ Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -kb & в терминале 2 [sbox-FREMANTLE_X86: ~]> export DISPLAY=:2 [sbox-FREMANTLE_X86: ~]> af-sb-init.sh start Возможна интеграция с eclipse http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Development_Environment/Maemo_Eclipse_Integration http://esbox.garage.maemo.org/2nd_edition/index.html


Слайд 10

11/20 Простой пример #include <hildon/hildon.h> int main(int argc, char *argv[]) { GtkWidget *window; hildon_gtk_init (&argc, &argv); g_set_application_name ("Simplest example"); program = hildon_program_get_instance (); window = hildon_window_new (); hildon_program_add_window (program, HILDON_WINDOW (window)); gtk_widget_show (window); gtk_main (); return 0; } Задаем имя программы Создаем главное окно программы Запуск главного цикла обработки событий


Слайд 11

12/20 Как собрать в Scratchbox $ /scratchbox/login [sbox-FREMANTLE_X86: ~] > gcc –o hello_world `pkg-config --libs --cflags hildon-1` hello_world.c [sbox-FREMANTLE_X86: ~] > ./hello_world pkg-config – возвращает пути к заголовочным файлам и к файлам библиотеки


Слайд 12

13/20 Усложненный пример - 1 Цель: написать приложение для рисования Потребуется: Создать главное окно программы Создать область для рисования Поставить фильтр на требуемые события Зарегистрировать обработчики событий Требуемые события: нажатие, перемещение, отпускание Написать логику обработчиков событий


Слайд 13

14/20 Рисование в окне: функция main #include <hildon/hildon.h> int main (int argc, char **argv) { // Здесь идет код инициализации как в предыдущей программе . . . . g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL); GtkWidget *drawing_area = gtk_drawing_area_new (); g_signal_connect (G_OBJECT (drawing_area), "motion_notify_event", (GtkSignalFunc) motion_event_callback, NULL); // Далее так же задаем функции обработки для button_press_event // и button_release_event . . . . . gtk_widget_set_events (drawing_area, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK ); gtk_container_add (GTK_CONTAINER (window), drawing_area); // Код показа окна и запуск главного цикла обработки . . . . } Обработка сигнала при закрытии окна Создание области для рисования на все окно Добавляем обработчик события «перемещение указателя мыши» Указываем какие события хотим обрабатывать


Слайд 14

15/20 Рисование в окне: обработка событий static gboolean button_press_event( GtkWidget *widget, GdkEventButton *event ) { if (event->button == 1 ) pressed=1; return TRUE; } static gboolean button_release_event( GtkWidget *widget, GdkEventButton *event ) { if (event->button == 1 ) pressed=0; return TRUE; } gboolean motion_event_callback (GtkWidget *widget, GdkEventMotion *event){ if (pressed) gdk_draw_line(widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], x, y, event->x,event->y); x = event->x; y = event->y; return TRUE; } Нарисовать линию используя стиль текущего окна Обновление координат


Слайд 15

16/20 Усложненный пример - 2 Цель: написать приложение с кнопками Потребуется Разобраться с расположением элементов Создать необходимый контейнер Создать кнопки и поместить в контейнер Создать и зарегистрировать обработчики нажатий Прикрепить контейнер к главному окну Показать окно


Слайд 16

17/20 Работа с диалоговым окном int main (int argc, char **argv) { // Инициализационная часть . . . . table = gtk_table_new(3,3,TRUE); for (i=0;i<3;i++) { for (j=0;j<3;j++) { button = hildon_button_new_with_text (HILDON_SIZE_AUTO, HILDON_BUTTON_ARRANGEMENT_VERTICAL, " ", NULL); gtk_table_attach((GtkTable*)table, button,i,i+1,j,j+1, GTK_EXPAND, GTK_EXPAND,0,0); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (button_clicked), NULL); } } gtk_container_add (GTK_CONTAINER (window),table); gtk_widget_show_all (GTK_WIDGET (window)); gtk_main (); return 0; } Выделенные аргументы: левый край кнопки правый край кнопки верхний край нижний край


Слайд 17

18/20 Что еще не рассмотрено Элементы управления GtkRadioButtons Меню (HildonAppMenu) Диалоги (HildonNote, HildonBanner, HildonPickerDialog, HildonWizardDialog) Работа в сети WiFi, Bluetooth Выход в интернет библиотека LibConIC


Слайд 18

19/20 Ссылки Главная ссылка :) www.maemo.org Руководство для разработчиков Maemo http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide Туториал по GTK для новичков http://zetcode.com/tutorials/gtktutorial/ Где разместить проект https://garage.maemo.org/


Слайд 19

20/20 Спасибо за внимание!


×

HTML:





Ссылка: