Как я изменил wxWidgets

April 13th, 2010 Begemot

Предложили мне тут портировать одну маленькую утилиту для автоматического выключения звука на Mac OS, я сказал что если возьмусь то только на c++\wxWidgets, зачем мне осваивать новый язык\библиотеку…

Лихо написал программу под винду и полез под макос, в надежде на быстрое портирование, обламался:)

Сначала долго пытался вообще заставить вх собираться и давать мне собрать примеры на маке, потом изучал cmake, потом перешел с carbon версии wxWidgets на более новую cocoa сборку…

В принципе, тут дело в том что у программы достаточно специфичные требования:

  1. Программа маленькая.
  2. Иконка в трее.
  3. Глобальная горячая клавиша.

Последнее вообще не поддерживается в вхВиджетс под маком, второе недавно появилось – но работает через 1 место, ну и размер…

В общем, потратив 4-5 дней, решил плюнуть и писать нативно. Небольшой проект – как раз можно потренироваться на нем. Подумалось что если я и дальше собираюсь писать для мака, даже на wxWidgets, знание родного языка\опыт работы с нативным фремворком будет только большим плюсом.

Objective-C имеет достаточно специфический синтаксис, но в принципе не сложен. Да и в целом писать под мак мне понравилось – такое впечатление что там это как-то гораздо больше продуманнее все.

В итоге написал, все работает, хотя подозреваю что не идеально. Вывод нативно писать под мак можно и это не страшно:)

Если кому интересно, посмотреть что получилось, можно тут.


Если пост полезен для вас вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.


маковское пессимистическое

March 19th, 2010 Begemot

чо-то я кажется сильно погорячился, когда думал о сроках портирования  на мак. Научился собирать и приступил непосредственно к написанию/портированию, и чем дальше тем меньше мне все это нравится…


Если пост полезен для вас вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.


Mac OS, CMake and wxWidgets

March 18th, 2010 Begemot

Привалило мне тут счастье в виде халтурки по клонированию одной утилиты с винды на мак. Поскольку  я давно мечтал портировать свой софт под мак (я же пишу на вхВиджетс!) не долго думая согласился. Поставил систему (установка MAC OS на хакинтош , первые впечатления) и потихоньку осваиваюсь. Даже завел новый блог – Dive Into Mac OS – микрозаметки новичка🙂

Почти день убил на то что бы скрестить исходники, wxWidgets, CMake и IDEs, с переменным успехом, Очень удачно получилось что пару недель назад я наконец решил освоить CMake  вместе с minGW под виндой, в рамках программы подготовки перехода на альтернативные оси, правда тогда я еще не знал что это будет так скоро:)

Теперь о плохом, модуль смейка FindWxWidgets под маком работает хреново (под виндой кстати тоже не идеально), это + почти полное не понимание того как это все работает под макосом\линуксом привели к тому что я провозился почти целый день,

Теперь кратко о проблемах с wxWidgets и CMake  под Mac OS и о том как удалось решить,

1. скомпилить вхВиджетс получилось но проинсталировать почему-то нет. то есть оно вроде инсталируется но wx-config –list возвращает только ту версию вхсов которая стояла в макое по умолчанию и не видит мою. решается указанием в CMake файле где брать нашу библиотеку

SET(wxWidgets_CONFIG_EXECUTABLE /…path…/build/my-mac/wx-config)

2. Для мака надо обязательно указывать архитектуру иначе ругается на либы

SET(CMAKE_OSX_ARCHITECTURES i386)

3. На всякий случай добавляем еще и (хотя точно не уверен что надо)

set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.6.sdk)

4. Теперь собственно поиск и подключения wxWidgets. (путь мы уже установили вверху)

После

find_package (wxWidgets COMPONENTS ${myWXWIDGETS_LIBS} REQUIRED)

include_directories(${wxWidgets_INCLUDE_DIRS})

Прошлось далать две ветви – одна под винду , вторая для APPLE, команда
add_definitions(${wxWidgets_DEFINITIONS})
у меня упорно не работает видимо что-то с форматом, думаю ошибка в модуле цмейка, под виндой, кстати так же не работает, но там  его можно было просто закоментировать – а тут не получается. под маком сделал так,
add_definitions(-I/volumes/shared/work/const/wxwidgets-trunk/build/my-mac/lib/wx/include/osx_carbon-unicode-static-2.9 -I/volumes/shared/work/const/wxwidgets-trunk/include -D_FILE_OFFSET_BITS=64 -D__WXMAC__ -D__WXOSX__ -D__WXOSX_CARBON__)
то есть указал то что мне выдает wx-config –cppflags…
5.  дальше имена библиотек, опять все через тернии – по нормальному. так :
target_link_libraries(${myPROJECT} ${wxWidgets_LIBRARIES})
не работает, только с ручным исправлением
STRING(REPLACE “wx_osx_carbonu_jpeg-2.9” “wxjpeg-2.9” wxWidgets_LIBRARIES “${wxWidgets_LIBRARIES}”)
STRING(REPLACE “wx_osx_carbonu_png-2.9” “wxpng-2.9” wxWidgets_LIBRARIES “${wxWidgets_LIBRARIES}”)
target_link_libraries(${myPROJECT} ${wxWidgets_LIBRARIES} -liconv)
Вот такие пироги.
P.S. Если вдруг есть кто знакомый с программированием под мак, и желающий провести небольшой экскурс\поотвечать в аське (#264684674) на глупые вопросы, буду признателен – а то тут так много непонятного :)))

Если пост полезен для вас вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.


Салянка из wxWidgets, wxCombobox и MAC OS

June 25th, 2009 Begemot

Сборная.

Кажется на маке с комбобоксами плохо, весьма плохо. Как то уж очень странно они выглядят (такое впечетление что родных нет, и вх эмулирует их сам, причем весьма посредственно)

Picture 6

Picture 8

Правда страшненько?

А вот это такое стремненькое белоей с каемочкой это стандартные color picker(!).

Причем тут комбобокс еще немного прилизанный, так как по умолчанию у него размер раза в 2 – 2.5 шире реально необходимо – почему ? хз. Пришлось руками уменьшать размер после создания

#ifdef __WXMAC__
{  // default combobox size under macos is too big
int w = 0, h = 0;
m_OverlayFontSize->GetSize(&w, &h);
m_OverlayFontSize->SetMinSize(wxSize(w / 2, h));
}
// combobox does not receive wxEVT_KILL_FOCUS event under MAC OS – http://trac.wxwidgets.org/ticket/9862
// so we use text update event, inseted of text_enter + kill_focus
#else

#ifdef __WXMAC__
{  // default combobox size under macos is too big
int w = 0, h = 0;
m_OverlayFontSize->GetSize(&w, &h);
m_OverlayFontSize->SetMinSize(wxSize(w / 2, h));
}

А еще они не получает события установки\потери фокуса. Пришлось жертвовать красотой работы и делать отдельную ветку логики под мак:(

Вот такой вот винегрет.


Если пост полезен для вас вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.


С думами про MACOS

October 13th, 2008 Begemot

Если пишите на wxWidgets, то наверняка думаете\собираетесь\хотите воспользоватся радостями кроссплатформенности, другими словами портировать приложения на другие платформы. Если среди них есть MAC OS, то можете глянуть на блог посвященный программированию на Python и Objective-C в Mac OS.

Блог про ipod, python и  Objective-C,  не про wxWidgets, но можно найти  и полезную теоретическую информацию. Например про хранение и доступ к настройкам приложения или про Локализация приложений в Mac OS.

Я пока под мак не пишу, но собираюсь, так что закинул в закладки.


Если пост полезен для вас вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.