Тема: Less Toolkit
Показать сообщение отдельно
Старый 27.02.2009, 12:08   #24 (Ссылка на пост)
Lester
Гаденыш
 
Аватар для Lester
Пол:
 
Активность Longevity
2/20 16/20
Today Сообщения
0/5 sssss4648
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея: 0
Вес репутации: 78 Lester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторыLester скоро в модераторы
В связи с загрузкой на работе долго ничего не делал, сейчас понемногу наверстываю( в основном рутинные вещи реализую ), на данный момент в общем виде сделал обработку событий, ничего нового не придумал как сдереть идею MFC и wxWidgets:

PHP код:
BEGIN_EVENT_TABLEThemedButton )
    
EVT_PAINTThemedButton::OnPaint )
END_EVENT_TABLE

...

/**********************************************************************************************/
void ThemedButton::OnPaintEventevent )
{
    
PaintDC dcthis );
    
dc.SetBrushRED );
    ... 
также можно написать:

PHP код:
button->ConnectLT_EVENT_PAINTEventHandlerThemedButton::OnPaint ) ); 
для отправки событий есть глобальные функции:

PHP код:
PostEventbuttonLT_EVENT_PAINT );
PostEventbuttonLT_EVENT_KEY_DOWNevent ); // тут мы должны сами инициализировать переменную event, чтоб передать необходимые данные в обработчик 
хотелось бы услышать пожелания по поводу как было бы удобнее организовать обработку событий, да и вообще какие есть варианты

Lester добавил 27.02.2009 в 17:29
Думаю вот реализовать такую фичу, чтоб можно было любому виджету сказать:

dialog->Save() - и он запомнил все свои параметры + параметры всех дочерних виджетов в конфиг приложения, а по dialog->Load() - загружал, т.е. например значения текстовых полей, чекбоксов, скроллов и т.п., ну и ес-но предусмотреть сохранение/загрузку в разные форматы/места, вобщем что-то вроде сериализации

Lester добавил 28.02.2009 в 09:15
Пока делаю виджеты с поддержкой тем, раньше было просто:

PHP код:
button->SetThemeBitmapBITMAP_BUTTON_PRESSEDBitmap"pressed.png" ), 333); // 3, 3, 3, 3 - границы по бокам, которые не будут растягиваться 
теперь есть Style - набор стилей для всех виджетов, можно получить по имени, сохранить/загрузить в файл и т.п.

Он уже хранит в себе ButtonStyle, CheckButtonStyle etc., каждый из которых также может быть сохранен/загружен

Тут уже сложнее - в каждом стиле для отдельного виджета есть разные элементы, есть два варианта для их отрисовки - текстуры и метафайлы( последовательность шагов - нарисуй линию, нарисуй точку и т.п. ), второе будет быстрее работать, меньше занимать места и следовательно лучше подойдет для слабого железа( например моей n810 ). Когда будет время сделаю редактор стилей.

Каждый виджет с поддержкой стилей по умолчанию использует текущий глобальный стиль, который можно переключать, но ему можно "сказать" использовать другой Style( а также ButtonStyle и т.п. )

Lester добавил 28.02.2009 в 09:35
Пару слов про реализацию Metafile в моем тулките

MetafileDC - такой же DC( DC - то же что и канва ) как и для рисования на экране, в принтер, в ПДФ и т.д., после рисования на нем можно получить Metafile

Metafile - набор операций для рисования, что-то вроде своего формата навроде SVG( кстати добавил поддержку SVG в тулкит - теперь его можно нарисовать на DC )

MetafilePlayer - берет Metafile и рисует на любом DC, т.е. написав функцию, которая нарисует, например, график, мы берем полученный Metafile и отдав его MetafilePlayer + указав DC ( куда хотим сохранить - PDF, Postscript, Latex, ODT, PNG, SVG, HTML и т.д. - в том числе можно просто отрисовать на экране, применяя любой масштаб ) получаем экспорт в нужный формат без всякого усилия со своей стороны
__________________
- Слава Україні! - закричали они, вместо приветствия.
- Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским?

Последний раз редактировалось Lester, 28.02.2009 в 08:35. Причина: Добавлено сообщение
Lester вне форума  
Ответить с цитированием