Приветствуем на Форум Херсона. Форум Херсонской молодежи.. На данный момент Вы находитесь на форуме как Гость и имеете очень ограниченные возможности и права. Что бы писать или отвечать в темах, загружать картинки, файлы на форуме Вам нужно зарегистрироваться, что совершенно бесплатно. Регистрация очень быстрая, не откладывайте эту процедуру! Если возникнут проблемы с регистрацией напишите нам. |
|
Программирование Все вопросы по написанию программ |
|
Опции темы |
24.01.2009, 12:29 | #1 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
Less Toolkit
Используясь stl, boost и различные тулкиты я пришел к выводам:
1. stl не всегда удобен( гениальный вывод - я знаю ) 2. при написании gui нужно использовать шаблоны 3. все существующие концепции model-view громоздки, неудобны и также должны иметь шаблоны - у меня есть идеи как сделать все проще и вместе с тем сэкономить массу времени на синхронизацию данных и gui 4. во многих тулкитах нет банальных вещей - например удобного репозитория картинок, контейнеров для хранения данных в виде VFS и т.д. 5. нет тулкита для С++, который бы хорошо работал и на ПК( для разных ОС ) и на КПК( например на моей н810 - wxWidgets жутко тормозит и страшно выглядит ), точнее есть один - Qt, но он проприетарный( его купила Nokia ) и может быть закрыт в любой момент 6. я для себя написал реализацию dc с одним интерфейсом для PDF, HTML, SVG, LaTeX, PS и т.п. - т.е. одна и та же функция теперь легко может рисовать не только на экране, но и в PDF, HTML, на принтер( ну это понятно ) и т.д., точно также у меня есть другие полезные заготовки( например унифицированная( через VFS ) работа с rar, tar, zip и т.д. ), которые могут пригодится тем, кто не хочет искать стороние библиотеки и потом прикручивать их "сбоку" ну и т.д. данный тулкит ес-но разделен на gui и non-gui, здесь я буду шаг за шагом описывать то что делаю( сделал ), с целью получить максимально конструктивной критики
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? Последний раз редактировалось Lester, 17.04.2009 в 19:29. Причина: Добавлено сообщение |
||||||||
|
24.01.2009, 13:20 | #2 (Ссылка на пост) |
Модератор
Пол:
|
QT - проприетарный ? ололошечки
уже все пописялись от радости что QT, который будет выпущен в марте, будет под LGPL. zwitter добавил 24.01.2009 в 14:22 зыж - надписи PHP код забавляют да Последний раз редактировалось zwitter, 24.01.2009 в 13:22. Причина: Добавлено сообщение |
|
24.01.2009, 13:40 | #3 (Ссылка на пост) | |||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
Цитата:
вот кстати .h и .cpp для array array.zip
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? |
|||||||||
|
24.01.2009, 13:57 | #4 (Ссылка на пост) | ||||||
Модератор
Пол:
|
Цитата:
вот тут поподробнее. Цитата:
идеи в студию. Цитата:
про VFS подробнее пожалуйста. что вам надо и где хранить ? Цитата:
Цитата:
я конечно рад что вы для себя открыли что-то похожее на Apache FOP, но только не надо пафоса с перечислением всех форматов которые умеет экспортировать сторонняя библиотека. Цитата:
vector<double> vector<long> vector<ID???> - WTF ? vector<string> vcl: TImageList .... блджад, где обещанные инновации ? нахрена мне ваша заготовка, если вы один хрен инкапсулируете вектор и лишь закрываете мне многие полезности вектора ? как мне отсортировать массив структур в вашем тулките ? где двоичный поиск ? ваша операция Index ищет первое вхождение в массиве ? где операция подсчета количества элементов в массиве ? сложить в дальнюю папку я конечно понимаю, что каждый уважающий себя начинающий программист обязан написать свой стек, списки и библиотеку для рисования окошек. ничего, это пройдет |
||||||
|
24.01.2009, 14:29 | #5 (Ссылка на пост) | |||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
я уже сказал - хорош гадить, думай, что хочешь, но не мешай - я буду тут шаг за шагом все описывать, начал ес-но с основ, просьба или писать по сути, или не писать вообще
потому по сути: "обоснуйте" - да хотя бы нет проверок на индексы( у меня тоже нет - добавлю, это легко - сейчас я другое делаю ), ну и сложение двух векторов, вставка 10 одинаковых значений в начало и т.п. - уже отдельные операции, да и банально: Код:
ArrayString array; array.Add( "item", 10 ); array.Prepend( "1" ); array.Insert( 1, "2" ); Код:
vector<String>array; for( size_t i = 0 ; i < 10 ; ++i ) array.push_back( "item" ); vector<String>::iterator it = array.begin(); array.insert( it , "1" ); array.insert( ++it , "2" ); "я конечно понимаю, что каждый уважающий себя начинающий программист обязан написать свой стек, списки и библиотеку для рисования окошек. " да - я прошел это еще с zx48k, сейчас я хочу написать прежде всего удобный тулкит, насколько это мне удастся - будем судить потом, сейчас я жду только конструктивной критики Lester добавил 24.01.2009 в 15:49 Цитата:
"как мне отсортировать массив структур в вашем тулките ?" - странно, но Sort() "ваша операция Index ищет первое вхождение в массиве ?" - за это спасибо, расширю поиск "где операция подсчета количества элементов в массиве ?" - Count(), вы опять невнимательны Lester добавил 24.01.2009 в 16:05 добавил: Код:
virtual long FindFirst( const T& item ); virtual long FindNext( void ); virtual ArrayULong FindAll( const T& item ); надо задать оператор сравнения, например так: /************************************************** ********************************************/ struct MyStruct { String name; String lastName; public:////////////////////////////////////////////////////////////////////////// bool operator<( const MyStruct& value ) const { return name < value.name; } bool operator>( const MyStruct& value ) const { return name > value.name; } }; вопрос понял, добавлю еще один вариант sort с параметром в виде функции для сравнения Lester добавил 24.01.2009 в 16:26 форматирование опять побилось - сорри Lester добавил 24.01.2009 в 16:31 "где двоичный поиск?" - тоже согласен, думаю надо будет ввести новый тип SortedArray, плюс, чтоб обычный Array умел помнить - отсортирован он или нет, и если да - делал быстрый поиск, вот за такую критику спасибо - на все вопросы сразу я ответить не могу( долго ), а по отдельности( как сейчас про массивы ) - буду только благодарен
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? Последний раз редактировалось Lester, 24.01.2009 в 15:32. Причина: Добавлено сообщение |
|||||||||
|
25.01.2009, 00:17 | #6 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
насчет массивов - будем считать, что разобрались( бинарный поиск и SortedArray занесены в TODO и обязательно будут реализованы ), пошли дальше...
Bitmap( класс для работы с изображениями ) PHP код:
поддерживаются GIF, PNG, BMP, XPM, TGA, JPEG, PCX, TIFF, загрузка и сохранение в файл/буффер, базовые фильтры - все остальные будут реализованы отдельно, работа с альфа-каналом и маской, данный класс используется везде где надо хранить и передавать изображения( например иконки для gui ) может у кого-то есть предложения по данному классу( например чего-то не хватает )
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? Последний раз редактировалось Lester, 25.01.2009 в 00:21. |
||||||||
|
25.01.2009, 01:00 | #7 (Ссылка на пост) |
Модератор
Пол:
|
какой сакральный смысл у функции IsOk ?
|
|
25.01.2009, 01:04 | #8 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
простой - имеем ли мы дело с рабочим изображением, предположим ты напишешь так:
Bitmap bmp( "non-exist.png" ); // а такого файла нет тогда IsOk вернет false
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? |
||||||||
|
25.01.2009, 01:18 | #9 (Ссылка на пост) |
Модератор
Пол:
|
каша полнейшая. не торт совершенно
проповедники ООП плачут крокодильими слезами. нафига все было сбивать в 1 класс ? в том же VCL есть три разных понятия - TBitmap, TPicture, TImage вынесите все функции нафиг из класса, ООП тут нет. |
|
25.01.2009, 03:21 | #10 (Ссылка на пост) | |||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
Цитата:
1. смысл разделения на TBitmap, TPicture, TImage( особенно для того кто пользуется ими - так удобнее? ) 2. как вырезать из картинки в VCL подкартинку( ее произвольную часть ) , как отразить изображение, повернуть, размыть и т.д., т.е. те действия которые я добавил в класс насчет методов - да, есть смысл убрать операции которые возвращают новые изображения, и оставить только ...Self, ес-но переименовав, так и сделаю - будет компактнее и выглядеть опрятнее Lester добавил 25.01.2009 в 04:29 сейчас выглядит как: PHP код:
кстати разделение таки будет, но разумное - будет BitmapEx( туда будут вынесены ColourReduction, RotateHue и Rotate ), в котором будут реализованы изменения яркости/контрастности, дополнительные фильтры( скопирую алгоритмы из gimp ) и т.п., то что надо редко, но может пригодится, например для создания анимаций Lester добавил 25.01.2009 в 13:41 ну и забыл добавить - пути в именах файлов для загрузки могут быть относительными. По умолчанию от папки программы, но базовый путь может быть выставлен через SetResourcesPath: PHP код:
добавил еще операторы "+" и "+=", может пригодится, например есть набор иконок для объектов( БД, таблица и т.п. ), надо еще для тех же объектов иконки - добавить/удалить/флушить/заблокировать/разблокировать и т.п., чтоб не иметь зоопарк иконок в папке ресурсов создаем только иконки самих объектов + отдельные( с маской ) иконки - добавить/удалить/флушить/заблокировать/разблокировать, а потом накладываем одни на другие, например так: PHP код:
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? Последний раз редактировалось Lester, 25.01.2009 в 13:35. Причина: Добавлено сообщение |
|||||||||
|
25.01.2009, 19:46 | #11 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
ну и ес-но раз есть изображения, то должно быть удобное хранилище для них:
PHP код:
доступ к картинкам воможен по:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? Последний раз редактировалось Lester, 25.01.2009 в 19:49. |
||||||||
|
25.01.2009, 22:35 | #12 (Ссылка на пост) | |||||||||
Щас сменю себе статус
Пол:
Благодарил(а): 9,926
Благодарили 6,148 раз в 2,096 постах
Галерея:
0
Вес репутации: 82
|
Цитата:
в vcl делать над изображениями эффекты наверное так же как и везде... если нужен эффект берешь и пишешь его
__________________
|
|||||||||
|
25.01.2009, 23:41 | #13 (Ссылка на пост) | ||||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
Цитата:
Google говорит, что TPicture класс для хранения изображения, а TImage - виджет, странно, что zwitter привел его в пример Цитата:
Lester добавил 26.01.2009 в 03:57 в продолжении темы про BitmapRepository, в тулките есть большой набор предопределенных ID - например ID_BMP_CUT, ID_BMP_PRINT, ID_BMP_BACK и т.п., стандартый набор иконок для этих ID с разными размерами лежит в отдельном расширении к тулкиту( .so, .dll, .dylib ), можно использовать его( а также иметь несколько таких расширений - и выбирать тему ), можно самому загружать иконки для используемых ID, можно использовать тему иконок KDE/Gnome( в том числе и в виндовс - достаточно указать путь ) - для них есть десятки отличных тем, т.е. можно писать, например, так: PHP код:
Lester добавил 26.01.2009 в 08:52 добавил макрос - BITMAP, теперь пример выглядит так: PHP код:
добавил возможность связать action с bitmap, для всех стандартных это можно включить( при старте приложения ) через: theSystemOptions->Write( "/Actions/EnableDefaultAutoBitmaps", true ); для своих actions можно создать связку через: AssignActionBitmap( MY_ID_ACTION_NEW, MY_ID_BMP_NEW ); пока это тестовый вариант, потом подумаю как сделать( назвать ) лучше пример: PHP код:
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? Последний раз редактировалось Lester, 26.01.2009 в 10:43. Причина: Добавлено сообщение |
||||||||||
|
26.01.2009, 11:53 | #14 (Ссылка на пост) |
Модератор
Пол:
|
месье хардкодит меню ?
как это пошло.... |
|
26.01.2009, 13:06 | #15 (Ссылка на пост) | ||||||||
Местные мы
Пол:
Благодарил(а): 457
Благодарили 620 раз в 179 постах
Галерея:
0
Вес репутации: 23
|
zwitter, ну что ты язвишь человек старается, пишет, хочет поделится своими трудами. Тут можно долго спорить где ООП, а где нет, тут уже зависит от человека который это пишет.
Вот у нас тоже проект - работа с изображениями. Там столько классов, враперы, враперы над враперами, менеджеры, класс команды, класс аргументов для команды, классы валидаторы, куча enum-ов и т.д. И это все нада дернуть чтобы наложить там эффект какой-то для изображения. Но "в самом низу" этого месива юзается одна несложная либа, вот класс Лестера (который Bitmap) чем-то её напоминает. Я это к чему, что на уровне тулкита - это нормально. Все просто, есть клаас с кучей методов которые делают все что нужно, а в приложении заворачивай этот класс во что угодно - обычно так и делают, чтобы не нарушать архитектуру приложения и не подстраиваться под либу/тулкит. Теперь к пану Lesterу, огласите весь список пожалуйста. В смысле расскажите нам с высоты птичьего полета про ваш тулкит, а не по одному классу. Например список классов с кратчайшем описанием что для чего, ну в таком ключе.. А аудитория будет выбирать наиболее интересные вещи и просить их огласки (вот как с массивом). Это конечно если вы захотите. Я вот тоже например пишу свой "велосипед", не так глобально конечно... больше для развлечения я бы сказал. Поэтому наезжать с критикой мне даж как-то не удобно что ли, так как я знаю что мой "велосипед" можно критиковать до бесконечности, но я им пользуюсь, мне нравится |
||||||||
|
26.01.2009, 13:40 | #16 (Ссылка на пост) |
Модератор
Пол:
|
ну язвлю, да.
мне не нравится стиль автора. сделал класс меню ? ну засунь ты все меню в xml, там пропиши все пункты, иконки, action'ы, hot-key'и. вгрузи его 1 вызовом и будет щастье. вот тогда я скажу - да, это удобная штука, с радостью бы использовал |
|
Сказали Спасибо пользователю zwitter за этот пост: | Lester (26.01.2009) |
26.01.2009, 17:02 | #17 (Ссылка на пост) | ||||||||
Местные мы
Пол:
Благодарил(а): 457
Благодарили 620 раз в 179 постах
Галерея:
0
Вес репутации: 23
|
(обращение к Лестеру)
Так, посмотрел я массив. Я конечно не гуру Срр, но осмелюсь высказаться )) Ну сразу - объявление всего класса как макроса конечно интересно... дебажить невозможно, да и пользоваться неудобно (я чуть-чуть попробовал )) ). Нужно где-то тулить DECLARE_ARRAY, потом DEFINE_ARRAY, а потом и саму переменную объявить. Почему бы просто не написать шаблонный класс сразу? (собственно как vector<>). Тогда пишем CustomArray<MyType> A; и готово. Может я не усмотрел где-то глубинный смысл задумки, но добавлять макросы в проект для каждого нового типа - реально неудобно. Ладно.., дальше: Код:
T& operator[]( size_t index ); T operator[]( size_t index ) const; Ведь с константной ссылкой мы ничего не поменяем в классе name и в T - и это не нарушит иммутабельность. Вот этот момент хотелось бы подробней знать. Потом еще момент, есть конструктор который принимает указатель и кол-во элементов и создает массив. Так вот ИМХО не помешало бы и такой метод иметь. Например я создал массив (твой), поработал с ним, удалил все с него, а потом хочу туда засунуть уже готовый массив (типа int a[64]) - прийдется уже по одному делать Add(). То есть, можно добавить метод типа: Код:
void FillFrom(size_t count, T* value ); И последнее, метод Export, строка: Код:
for( size_t i = 0 ; i < count ; ++i ) res[ i ] = (T) ( mVector[ i ] ); Ведь даже оператор присваивания принимает const name&, а так выходит что создается временный объект - он попадает в оператор присваивания, а потом удаляется. И тут же момент, обычно Срр-шники юзают new/delete, а тут память выделяется через malloc, если этого не знать а потом вызвать указателю delete [] - сам знаешь что будет. Но хотя если там написать res = new T[count] - повызываются лишний раз конструкторы, тоже не хорошо. ps. это я смотрел там на первый класс name (а то там внизу еще один есть, дома погляжу...) Последний раз редактировалось Marchello, 26.01.2009 в 17:06. |
||||||||
|
Сказали Спасибо пользователю Marchello за этот пост: | Lester (26.01.2009) |
26.01.2009, 17:14 | #18 (Ссылка на пост) | ||||||||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
"если уж вы окончательно перешли на французский язык, то называйте меня не месье, а ситуайен, что значит — гражданин"
как один из вариантов - почему нет, как мне по мне - вполне наглядное и легко настраиваемое решение Lester добавил 26.01.2009 в 18:43 Цитата:
Lester добавил 26.01.2009 в 18:47 Цитата:
1. удобнее 2. читабельнее но такое будет реализовано - причем не только для меню, но и для всего gui, ну и когда через пару месяцев будет рабочий вариант( с устоявшимися классами и интерфейсами ) я с удовольствием приму любые наработки( ес-но с сохранением всех авторских прав - и добавлением их автора в список разработчиков ) Lester добавил 26.01.2009 в 19:03 Цитата:
Цитата:
Цитата:
Цитата:
Lester добавил 26.01.2009 в 19:54 в том же Array в конструкторе name( size_t count, ... ) исправил на: Код:
for( size_t i = 0 ; i < count ; ++i ) Add( va_arg( vl, T ) );
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? Последний раз редактировалось Lester, 26.01.2009 в 18:55. Причина: Добавлено сообщение |
||||||||||||||
|
27.01.2009, 01:32 | #19 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
Интерфейс для хранения структурированных данных:
PHP код:
пример кода: PHP код:
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? Последний раз редактировалось Lester, 27.01.2009 в 08:55. |
||||||||
|
27.01.2009, 09:50 | #20 (Ссылка на пост) | ||||||||
Местные мы
Пол:
Благодарил(а): 457
Благодарили 620 раз в 179 постах
Галерея:
0
Вес репутации: 23
|
Я как любитель gamedev-а всегда склонен к быстродействию кода, поэтому стараюсь обращать внимание на изъяны в этом.
Поэтому методы: Код:
virtual String GetPath( void ) const = 0; virtual ArrayString GetGroups( void ) = 0; virtual ArrayString GetEntries( void ) = 0; virtual String GetFirstGroup( void ) = 0; virtual String GetNextGroup( void ) = 0; // и т.д. ИМХО лучше возвращать const String& или const String* (это предпочтительней). А если же предполагается возвращать объекты из стека метода, то можно даже так написать: Код:
void GetEntries( ArrayString* s) { // тут мы заполняем сразу 's' и никаких стековых объектов } И еще на счет массива, у тебя все методы виртуальные, а класс определен в виде макроса. То есть, если и наследоваться от него то только уже от конкретной реализации (с конкретным типом) - тоже не функционально. К тому же объявление методов виртуальными скорости не добавляет. А если отказаться от виртуальности (и от макросовости) - можно с половину методов сделать с inline (правда нужно чтобы эти методы были в h файле, хотя если отказаться от макроса - нужно делать шаблоном, а с шаблонами - все методы будут в h файле )) ). |
||||||||
|
28.01.2009, 00:29 | #21 (Ссылка на пост) | ||||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
Цитата:
Цитата:
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? Последний раз редактировалось Lester, 28.01.2009 в 07:50. |
||||||||||
|
31.01.2009, 12:08 | #22 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
наверное в ближайшую неделю не буду здесь отписываться - пока занят работой + написанием нового кода, время на исправления( еще раз спасибо Marchello и zwitter за замечания ) не будет, пока добавил новый виджет для отображения TreeItem(s), поддержку текстур для виджетов( потом отдельно опишу, но принцип очень простой - достаточно указать картинку:
например так: button->SetThemeBitmap( BITMAP_BUTTON_PRESSED, Bitmap( "pressed.png" ), 3, 3, 3, 3 ); // 3, 3, 3, 3 - границы по бокам, которые не будут растягиваться и все, также в TreeItem добавлена возможность использовать check-state, а также помимо иконки можно указать функцию для отрисовки - которой отдаются координаты, что дает возможность создавать аимации, без написания дополнительного кода для этого, если же стоит флаг использовать анимации, а функция не указана - будет масштабироваться заданная иконка ) вот видео всего этого: 1.flv ( переименовал avi в flv - чтоб загрузить на форум, но у меня открывается и с этим расширением )
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? Последний раз редактировалось Lester, 31.01.2009 в 12:12. |
||||||||
|
Сказали Спасибо пользователю Lester за этот пост: | TIGR (31.01.2009) |
31.01.2009, 12:16 | #23 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
кстати теперь Bitmap( "pressed.png" ) может автоматом добавлять картинку в глобальный BitmapRepository( один флаг в SystemSettings - стоит по умолчанию ), и если вызвать этот конструктор еще раз с тем же параметром( для того же файла - идет проверка по абсолютному пути + дате изменения + размеру ) - повторной загрузки и декодирования картинки не будет
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? Последний раз редактировалось Lester, 31.01.2009 в 13:10. |
||||||||
|
27.02.2009, 12:08 | #24 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
В связи с загрузкой на работе долго ничего не делал, сейчас понемногу наверстываю( в основном рутинные вещи реализую ), на данный момент в общем виде сделал обработку событий, ничего нового не придумал как сдереть идею MFC и wxWidgets:
PHP код:
PHP код:
PHP код:
Lester добавил 27.02.2009 в 17:29 Думаю вот реализовать такую фичу, чтоб можно было любому виджету сказать: dialog->Save() - и он запомнил все свои параметры + параметры всех дочерних виджетов в конфиг приложения, а по dialog->Load() - загружал, т.е. например значения текстовых полей, чекбоксов, скроллов и т.п., ну и ес-но предусмотреть сохранение/загрузку в разные форматы/места, вобщем что-то вроде сериализации Lester добавил 28.02.2009 в 09:15 Пока делаю виджеты с поддержкой тем, раньше было просто: PHP код:
Он уже хранит в себе 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. Причина: Добавлено сообщение |
||||||||
|
13.04.2009, 07:01 | #25 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
растет пока проект - много переписал, т.к. понял, что ужасно, в частности самый первый пример - массивы:
PHP код:
ARRAY.ZIP в остальном библиотека ощутимо выросла - больше 2Мб кода, не считая тестов, сейчас пишу плагин для поддержки wx, fktk уже на 80% готов, кстати отказался от идеи писать все абсолютно с нуля - за основу взят обрезанный вариант fltk, из которого выдраны все ненужные классы, благо ничего быстрее, удобнее и компактнее( статически слинкованный диалог на fltk весит около 100кб ) под все популярные ОС не найти, а мне немного надо - обработка основных событий и отрисовка примитивов + текста, ес-но плагин для использовния fltk "as is" также останется
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? |
||||||||
|
17.04.2009, 19:55 | #26 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
Несколько моих бредовых идей по стилю написания кода гуи( ес-но это альтернативный вариант и пользоваться им необязательно ):
Пример цельного куска кода: PHP код:
1. список ID PHP код:
2. Создание гуи: PHP код:
3. получение указателей на виджеты PHP код:
PHP код:
button->SetAction( ID_LABEL, ACTION_LABEL_SET_TEXT, "Sample Text" ); 5. автоматическое обновление PHP код:
check->EnableIf( ID_TEXT, IF_VALUE_EQUAL, "Sample" ); check->ShowIf( ID_CHECKBOX, IF_CHECKED ); label->LabelIf( ID_CHECKBOX, IF_CHECKED, "Checked", "Not Checked" ); checkbox->CheckIf( ID_TEXT, IF_NON_EMPTY ); Все это, чтоб не писать лишний раз обработчики событий( ввод текста, нажатие клавиш, выбор чекбокса и т.п. ). Lester добавил 18.04.2009 в 12:20 насчет: PHP код:
PHP код:
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? Последний раз редактировалось Lester, 18.04.2009 в 11:23. Причина: Добавлено сообщение |
||||||||
|
03.05.2009, 13:50 | #27 (Ссылка на пост) | |||||||||
Местные мы
Пол:
Благодарил(а): 457
Благодарили 620 раз в 179 постах
Галерея:
0
Вес репутации: 23
|
Цитата:
Вот например метод FromArray, ты там юзаешь memcpy для того чтобы заполнить масив в this извне. Но ведь при таком раскладе не будут вызываться операторы '=' для кастумных типов. Хотя может тут какой-то скрытый смысл? И потом, скольо весит пустой такой массив? У меня в 2008 студии пустой вектор весит 20 байт (и 24 в релизе), тогда у тебя выйдет где-то: (20+20+20) + 6*4 (bool, size_t, ArraySortFunction) + 2*sizeof(T) + + размер String (который будет минимум 4*2 байт) = 100 байт для типа int. А потом еще вызывается reserve(256) в конструкторе... Короче, такой пустой масив это == int[25] Хотя память сейчас не критична. Я вот думаю даже иметь две реализации класса массива - первая ну как обычно, и вторая - для типов не имеющих кастумного оператора присваивания (аля POD). Тогда для простых типов можно будет повсевместно юзать memcpy - что упростит и ускорит это дело, ну и в таком случае конечно не использовать std::vector, будет такой себе PlainArray - конечно с меньшей функциональностью, но зато шустрый (что важно для gamedev-a). |
|||||||||
|
03.05.2009, 14:24 | #28 (Ссылка на пост) | |||||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
Цитата:
Цитата:
он позволит в большинстве случаев обойтись без лишних движений по мере заполнения массива, как по мне затраты на выделение/перемещение блоков памяти для каждого нового элемента стоят большего внимания чем небольшой перерасход памяти Цитата:
лично проведенные бенчмарки( на массивах из пяти миллионов элементов ) показали, что vector ничем не уступает С-массиву по скорости, видно оптимизация все разворачивает в работу с тем же С-массивом
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? |
|||||||||||
|
15.07.2009, 14:08 | #29 (Ссылка на пост) | ||||||||
Гаденыш
Пол:
Благодарил(а): 2,442
Благодарили 5,834 раз в 2,093 постах
Галерея:
0
Вес репутации: 78
|
давно не отписывался( но работа идет и быстрыми темпами ), сейчас закончил новую фишку - парсер для текста на разных языках программирования, работает все просто:
Lexer lexer( LEX_CPP ); lexer.Parse( text ); String html = lexer.AsHTML(); парсеру можно отдать свой список ключевых слов, переменных, типов и т.д., от парсера также можно получить список стилей( массив размером с исходную строку с индексами стилей ), в TODO - экспорт в RTF, PDF etc., простая привязка к GUI. Вот пример использования: тут не все видно, но строки, числа и т.п. тоже подсвечиваются как надо
__________________
- Слава Україні! - закричали они, вместо приветствия. - Что это за фашизм?! - возмутился журналист Гундырев. - Откуда у них столько ненависти к русским? |
||||||||
|