motofan logo
4 страниц V  1 2 3 > »         
> 

Управление на рабочем столе, HomeScreenTools

DmT
сообщение 27.12.2008, 10:09 Закрепленное сообщение!


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 174
Регистрация: 31.3.2007
Из: Екатеринбург
Пользователь №: 129 181

Рейтинг: 669



Существует проблема: при двух и более эльфах, которые требуют управление с рабочего стола, и при приходе ивента клавиши вызывают APP_ConsumeEv - получается черти что.
Поэтому вот нам менеджер эльфов рабочего стола - HomeScreenTools.
Информация для разработчиков:
Первое что нужно сделать - добавить себе в SDK в ивенты:
Код
#define NEW_DESKTOP_APP_EV 0xFFD0
#define DEL_DESKTOP_APP_EV 0xFFD1
#define DESKAPP_GET_FOCUS_EV 0xFFD2

Далее, если эльф использует управление на рабочем столе он должен регистрироваться, дерегистрироваться и ловить ивент сообщающий о выбранном регионе.
А теперь по порядку.
Для регистрации вызываем
Код
UINT32 RegRegionOnDesktop( EVENT_STACK_T *ev_st, APPLICATION_T *app )
{
    DESKAPP_DATA_T Iam;

    Iam.y = высота_на_которой_расположены_контрлы;
    strcpy(Iam.app_name, app_name); // вместо app_name можно использовать что угодно, лишь бы повторения небыло.
    AFW_CreateInternalQueuedEvAux(NEW_DESKTOP_APP_EV, FBF_LEAVE, sizeof(DESKAPP_DATA_T), &Iam);

    return RESULT_OK;
}

Структура данных:
Код
typedef struct
{
    char app_name[APP_NAME_LEN];
    INT16 y;
} DESKAPP_DATA_T;

При выходе вызываем:
Код
UINT32 UnRegRegion( EVENT_STACK_T *ev_st, APPLICATION_T *app )
{
    AFW_CreateInternalQueuedEvAux(DEL_DESKTOP_APP_EV, FBF_LEAVE, sizeof(app_name), (char*)app_name);

    return RESULT_OK;
}

Кроме того, надо ловить ивент DESKAPP_GET_FOCUS_EV и обрабатывать его функцией:
Код
UINT32 OnGetFocus( EVENT_STACK_T *ev_st, APPLICATION_T *app )
{
    EVENT_T     *event;

    event = AFW_GetEv(ev_st);
    if(namecmp(((DESKAPP_DATA_T*)event->attachment)->app_name, app_name)) IsActive = TRUE;
    else IsActive = FALSE;  // для мониторинга активности/неактивности
    
    // Если используется графика(что желательно) тут стоит обновить интерфейс, с учетом активности/неактивности

    return RESULT_OK;
}

Ну и обрабатывать клавиатуру надо только если IsActive == true
Для пользователей:
Если есть нужда - пропишите HomeScreenTools в авторан.

Скачать с исходниками:
Прикрепленный файл hst.zip   ( 12.2 килобайт ) Кол-во скачиваний: 297


Сообщение отредактировал DmT - 6.1.2009, 13:26
Прикрепленный файл hst.zip   ( 12.2 килобайт ) Кол-во скачиваний: 297
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 27.12.2008, 13:40


0xFFFF
******

Группа: Разработчики
Сообщений: 832
Регистрация: 28.3.2006
Из: Нижний Новгород
Пользователь №: 76 255
Модель телефона: E398, Milestone 2
Прошивка: 49R w/ElfPack2


Настроение:
^^,



Рейтинг: 1224



Цитата(DmT @ Сегодня, 13:09)

при приходе ивента клавиши вызывают APP_ConsumeEv
*

Ага, хотя и не должны этого делать! Может, лучше вместо того, чтобы такой огород городить просто ткнуть носом горе-разработчиков, кто такие нехорошие вещи делает?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 27.12.2008, 13:53


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 174
Регистрация: 31.3.2007
Из: Екатеринбург
Пользователь №: 129 181

Рейтинг: 669



Andy51,
Ну и что ты предлагаешь? Если все равно нужны контролы на хомскрине
Точно знаю что ToolBar и Tunes "дерутся" за рабочий стол.

Сообщение отредактировал DmT - 27.12.2008, 13:56
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
om2804
сообщение 27.12.2008, 15:43


МотоКодер
******

Группа: Разработчики
Сообщений: 786
Регистрация: 14.8.2006
Из: Архангельск
Пользователь №: 95 055
Модель телефона: E398
Прошивка: DaR
Победитель конкурса 2008

Рейтинг: 1650



Andy51, а как быть без APP_ConsumeEv ?
На рабочем столе будут тогда вызываться приложения, назначенные на джой
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 27.12.2008, 16:37


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 174
Регистрация: 31.3.2007
Из: Екатеринбург
Пользователь №: 129 181

Рейтинг: 669



om2804,
Ну ты то согласен поправить Tunes таким образом или есть идеи лучше?

Добавлено позже (27.12.2008, 21:48):
Ещё вот такой вопрос: Нужно ли встраивать функции рисования в менеджер?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
tim apple
сообщение 27.12.2008, 17:24


Мастер
****

Группа: Разработчики
Сообщений: 260
Регистрация: 13.7.2007
Из: РФ, Башкирия, Стерлитамак
Пользователь №: 141 375
Модель телефона: ---
Прошивка: ---

Рейтинг: 403



можно проще:
эльф с запросом о регистрации в HomeScreenTools передает пару ивентов (из своей базы ивентов).
HomeScreenTools сам знает, кто в фокусе и вызовет нужный ивент.
+ ивенты будут уникальны
+ проще =)

также можно передавать только один ивент и вызываться он будет с параметром.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
om2804
сообщение 27.12.2008, 20:57


МотоКодер
******

Группа: Разработчики
Сообщений: 786
Регистрация: 14.8.2006
Из: Архангельск
Пользователь №: 95 055
Модель телефона: E398
Прошивка: DaR
Победитель конкурса 2008

Рейтинг: 1650



Tunes переделаю конечно

Сообщение отредактировал om2804 - 27.12.2008, 21:15
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
DmT
сообщение 28.12.2008, 3:15


Мото-Портной
******

Группа: Разработчики
Сообщений: 1 174
Регистрация: 31.3.2007
Из: Екатеринбург
Пользователь №: 129 181

Рейтинг: 669



om2804,
tim apple,
Andy51,
Теперь про графичские функции. Я думаю сделать надо, чтоб упростить создание, так называемых, аплетов. Ну например элементарно выводить строчку. Сейчас для этого нужно строить диалог, затем его как то акуратно обрабатывать. При нескольких таких эльфах это сильно глючит.
Предлагаю ввести единую канву(Canvas), которая обслуживается HomeScreenTools. А все остальные эльфы рисуют через API менеджера(на той же самой канве).

А вот ещё подумал.
Как лучше сделать:
уникальность ивентов клавиш касается только рабочего стола, или все события клавиатуры обрабатываются через HomeScreenTools?

Сообщение отредактировал DmT - 28.12.2008, 6:53
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Мачо
сообщение 28.12.2008, 8:45


Ветеран
*****

Группа: Легенды MotoFan.Ru
Сообщений: 456
Регистрация: 26.7.2004
Из: Киров
Пользователь №: 8 569
Модель телефона: Е398 (умер), E6
Прошивка: Dream A Reality 2.0
Финалист Конкурса 2010

Рейтинг: 1410



Про проблему тюнса и хоум скрина. А не проще приоритет хоум скрина уменьшить?
Если тюнс активен то эвенты до хс и не дойдут. Если нет то дойдут.

а ша у всех эльфов приоритет один вот и конфликты.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Andy51
сообщение 28.12.2008, 11:28


0xFFFF
******

Группа: Разработчики
Сообщений: 832
Регистрация: 28.3.2006
Из: Нижний Новгород
Пользователь №: 76 255
Модель телефона: E398, Milestone 2
Прошивка: 49R w/ElfPack2


Настроение:
^^,



Рейтинг: 1224



DmT, а кстати да! Мачо дело говорит - просто возьмём и сделаем вместо всей твоей навороченной системы фоновый "сервис", который будет работать на приоритете чуть выше айдла и по запросу делать consume определённых клавиш. Тогда клавиатура поделится сама собой между фоновыми эльфами, а тем просто достаточно будет указать какие клавиши они "отнимают" у айдла.

По поводу графики - в EP2 предусмотрена система для вывода графики напрямую через драйвер. Причём основана она на коллбеках, регистрирующихся на обновление участка экрана. Я полагаю, что такой способ вывода графики на раб.стол эффективнее, быстрее и менее глючен.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Управление на рабочем столе, HomeScreenTools · Эльфы, их разработка и портирование · Forum
 

4 страниц V  1 2 3 > » 
Закрытая темаСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 12.6.2024, 21:05

Форум живёт: