2012-02-09 62 views
2

首先,我不是Mac开发人员,也是非常随意的Mac用户,所以请耐心等待我的问题。Mac的RCP应用程序 - 碳还是可可?

我有一个相当大的RCP应用程序,主要针对Windows和Linux,在两者上运行良好。现在,在试图在OSX(碳x86)上运行它时,我发现它看起来非常难看,完全没有像Mac那样笨拙的使用。例如,这里是最简单的东西,我不能让它看起来很直,不管我做什么,这些按钮都不会像我想要的那样坐着:mac这就是它在窗户上看起来如何比较(相同代码库):win

它减少了按钮的高度,不把他们的权利,对准的是一个烂摊子等

而这些只是冰山的提示,有可能是更大的问题出在那里。

所以,我有两个问题:

1)我应该打扰在所有的Mac上存在与RCP应用程序的战斗?可能是死路一条,没有人真的这样做?毕竟苹果和Java不会混合太多。 2)如果我愿意,我应该把目标定位在碳还是可可?我希望期待最新的mac开发。我会中心只喜欢其中的一个,你会选择哪一个?什么是标准?


UPDATE:

我创建可可的分布和所有这些奇怪的渲染问题消失了。使用eclispe rcp 3.7。一切都很完美。

+1

@awoodland谁收的问题 - 其实,我已收到以极大的参考和实际经验非常宝贵的答案。如果你没有受到干扰,可能会收到更多。恕我直言 - 超过主持。在你看到宝贵的答案即将到来之后,我认为关闭这个主题并不是件好事。 – Dima 2012-02-10 17:22:15

回答

6
  1. 这是一种主观的问题。其他人这样做吗?当然,有不同程度的投资和关怀。你应该这样做吗?我想说这取决于你的用户想要和期望的。

  2. 使用可可。 Carbon是旧的Mac OS 9兼容API,而Cocoa是新的Mac OS X API(以前称为NextStep API)。从历史上看,Eclipse(以及SWT和RCP应用程序)仅支持Carbon,但在Eclipse 3.4中添加了Cocoa支持。 (可可事件循环和SWT事件循环证明很难整合,但是苹果邀请SWT团队去库比蒂诺坐下来让它工作。)

    这就是说,如果你的应用看起来非常不同在两个平台之间。在一些小部件周围确实存在一些次要的UI差异 - 焦点环特别看起来略有不同 - 但总体而言,您应该能够真实地测试Carbon或Cocoa。但作为释放工具,我会用可可。

工作作为对“苹果佬”的Eclipse插件(以前的RCP应用程序),如果你决定在改善了Mac OS的经验,投资一些时间,我可以提供几个要点:

  1. 这可能是值得一读的Mac Human Interface Guidelines。实际上,没有人(包括Apple)将此文档视为不可破解的法律,但将Mac应用程序视为Mac应用程序是一个好开始。我怀疑HIG是这么说的,但是在按钮上放置图标并不是特别需要Mac的东西。 (它更可能是在工具栏中。)

  2. Eclipse bugzilla是你的朋友。当你发现自己在桌面上打头时,想知道为什么ButtonSWT.ARROW位在Carbon上看起来不合适,所以很高兴知道在Bug评论中可能有一种解决方法。另外,你有时会让人发布可以整合的修复程序(因为作为RCP应用程序,你可以发布自己的SWT版本)。例如,Mac OS中use the proper window toolbar的功能首先出现在bugzilla中。

  3. Mac OS应用程序倾向于使用比Windows或GTK应用程序更多的空白。如果您只是为Windows和Linux开发,则有一种趋势就是在布局中只填充许多像素来填充边距。当你在Mac OS上运行这个应用程序时,它往往看起来很奇怪,并且会缩小。根据系统建议最好设置边距和填充。您可以使用IDialogConstants获取这些默认值(在DLU中),然后转换为像素。例如:

    int marginW = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.HORIZONTAL_MARGIN); 
    int marginH = Dialog.convertVerticalDLUsToPixels(fontMetrics, IDialogConstants.VERTICAL_MARGIN); 
    
    int hSpacing = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.HORIZONTAL_SPACING); 
    int vSpacing = Dialog.convertVerticalDLUsToPixels(fontMetrics, IDialogConstants.VERTICAL_SPACING); 
    

    您可能希望使用Dialog和Composite基类来为您提供此功能,以便您拥有简单的访问器。

  4. 回想一下,在Windows上的确定和取消按钮是从Mac OS和GTK向后。 Dialog类处理将默认(确定,是,接受等)按钮放在正确的位置。如果您开始在对话框按钮栏中放置奇怪的按钮,请务必注意,SWT可能会为您重新排序它们。

  5. 连接键监听器或加速器时不要假设控制键。在这种情况下,Apple用户可能希望使用Command键(又称Apple键)。对于加速器,只需使用M1而不是CTRL

  6. 当您发布时,将您的应用程序重新包装到.app。 Mac用户期望有一个.app以及其中的资源,他们不希望有一个文件夹.app和一堆其他不必要的文件夹。来自PDE build for Mac的输出看起来就像其他平台一样 - 内部有启动程序的文件夹,位于pluginsfeatures目录旁边。作为构建后步骤,您可以将pluginsfeatures目录移动到.app目录中,并编辑启动程序以反映更改。 (有一个Perl脚本流传在Internet上,我想,如果不是我可以张贴一个。)

+0

谢谢,Edward,这非常有帮助 – Dima 2012-02-09 16:29:09