Krita* Gemini* - 在二合一设备上效果翻倍





0/5 (0投票)
本文将讨论Krita开发者如何为2合1设备添加模式感知功能——包括自动和用户选择的模式切换实现,以及开发者在为2合1体验创建应用程序时应考虑的一些方面。
为什么选择2合1
2合1电脑(2合1)是一种可以通过操纵机身转换为平板电脑的笔记本电脑。笔记本模式(也称为桌面模式)允许使用键盘和鼠标作为主要输入设备。平板模式则依赖触摸屏,需要手指或触控笔进行交互。例如英特尔® Ultrabook™ 等2合1设备,通过多种输入选项提供精确的控制,让您在需要工作时可以打字,在想要娱乐时可以触屏。
开发者在修改应用程序以利用和适应这种新型可变形电脑时,必须考虑多种场景。有些应用程序在两种模式下可能保持几乎相同的菜单和外观。而另一些,例如用于Windows* 8 [11]的Krita Gemini,则可能精心选择在每种用户界面模式下突出显示和提供的内容有所不同。Krita是一款用于素描和绘画的程序,提供从头开始创建数字绘画文件的端到端解决方案[12]。本文将解释Krita开发者如何添加2合1模式感知功能——包括自动和用户选择的模式切换实现——以及开发者在创建应用程序以获得2合1用户体验时应考虑的一些方面。
引言
多年来,计算机使用了各种输入方法,从打孔卡到命令行,再到鼠标或其他设备的点选。随着触摸屏的普及,我们现在可以用鼠标、触控笔或手指进行点选。我们大多数人还没有准备好用触摸屏完成所有交互,而通过Krita Gemini等模式感知应用程序,我们不必如此。新的2合1设备,如英特尔® Ultrabook™,可以在一台设备上提供最佳用户体验的界面模式。
2合1电脑可以通过多种方式在笔记本模式和屏幕模式之间转换(图1和图2)。英特尔网站[2]上有更多2合1电脑的示例。Ultrabook电脑可以通过将屏幕与键盘分离,或使用其他方式(例如将屏幕折叠在键盘上)来禁用键盘并使屏幕成为主要输入设备,从而从笔记本模式转换为屏幕模式。计算机制造商现在开始向操作系统提供这种硬件转换信息。例如,Windows* 8 API事件WM_SETTINGCHANGE和“ConvertibleSlateMode”文本参数会指示自动的笔记本到屏幕和屏幕到笔记本的模式更改。开发者包含手动模式更改按钮以方便用户也很有帮助。
就像2合1设备可以在笔记本和屏幕模式之间转换一样,软件也可以以不同的方式响应这种转换。在某些情况下,可能希望UI尽可能接近笔记本模式;而在其他情况下,您可能希望对UI进行更重大的更改。例如,英特尔帮助KO GmBH将其Krita Touch应用程序的功能与其流行的Krita开源绘画程序(笔记本应用程序)集成到新的Krita Gemini应用程序中。Krita项目是一个活跃的开发社区,欢迎新想法并保持高质量的支持。该团队添加了提供从笔记本“鼠标和键盘”模式到屏幕模式触摸界面的无缝过渡所需的机制。在图3的短片中,您可以看到Krita Gemini的用户界面(UI)转换的实际效果。
英特尔已与多家供应商合作,帮助他们为应用程序添加2合1模式感知功能。英特尔开发者中心Intel Developer Zone提供了重要的资源,帮助开发者构建应用程序,包括2合1、触摸传感器、图形等。请参阅本文末尾的相关链接。
在屏幕模式下创作,在笔记本模式下完善
Gemini团队致力于最大化两种操作模式下的用户体验。在图4和图5中,您可以看到UI在两种模式之间发生了许多显著的变化。这使用户能够无缝地从在屏幕模式下“外出”绘画,切换到在笔记本模式下进行修饰和更精细的细节工作。
使应用程序能够在两种操作模式之间转换,主要有三个步骤。
使应用程序能够在两种操作模式之间转换,主要有三个步骤。
步骤1: 应用程序必须“触摸感知”。我们很幸运,在目前的2合1活动之前,“触摸感知”运动就已经开展得很好,否则这将是一个比简单的往返屏幕模式更具挑战性的过渡。英特尔已经发布了关于为Windows 8应用程序添加触摸输入的文章[9]。
步骤2: 添加2合1模式感知。视频(图3)的第一部分演示了自动传感器激活的模式更改——在这种情况下是旋转(图6)——然后是通过应用程序中的按钮进行用户启动的过渡(图7)。
支持自动过渡需要定义、监控传感器状态,并在了解状态后采取适当的措施。此外,还应包含用户启动的模式转换[图3],以方便用户,以防他们希望在系统默认为笔记本模式时处于屏幕模式。您可以参考英特尔文章“如何编写2合1感知应用程序”,以了解添加基于传感器的过渡的示例方法[8]。Krita用于管理模式之间过渡的代码可以在其源代码中通过搜索“SlateMode”[13]找到。Krita是在GNU公共许可证下发布的。有关最新信息,请参阅源代码库[14]。
#ifdef Q_OS_WIN #include <shellapi.h> #define SM_CONVERTIBLESLATEMODE 0x2003 #define SM_SYSTEMDOCKED 0x2004 #endif
并非所有触摸屏电脑都提供自动过渡,因此我们建议您像Krita Gemini团队一样,在您的应用程序中包含一个按钮,允许用户手动启动从一种模式到另一种模式的过渡。Gemini的按钮如图7所示。按钮启动的UI过渡执行的功能与机械传感器启动的过渡相同。屏幕信息和默认输入设备将从屏幕模式的触摸输入和大型图标切换到笔记本模式,具有更小的图标以及键盘和鼠标的输入。然而,由于没有传感器路径,按钮方法必须在没有传感器状态信息的情况下执行屏幕、图标和默认输入设备更改。因此,开发者应提供一种路径,使用户能够通过触摸或鼠标从一种模式切换到另一种模式,而不考虑按钮启动的UI状态,以防用户选择不合适的模式。
按钮的定义 - Kaction()
- 及其状态和操作在下面的代码中显示(参考6)
// Snip from Gemini - Define 2-in1 Mode Transition Button:
toDesktop = new KAction(q);
toDesktop->setEnabled(false);
toDesktop->setText(tr("Switch to Desktop"));
SIGNAL(triggered(Qt::MouseButtons,Qt::KeyboardModifiers)), q, SLOT(switchDesktopForced()));
connect(toDesktop,
SIGNAL(triggered(Qt::MouseButtons,Qt::KeyboardModifiers)), q, SLOT(switchToDesktop()));
sketchView->engine()->rootContext()->setContextProperty("switchToDesktop
sketchView->Action", toDesktop);
然后,工程师们承担了处理由按钮触发的事件的任务。首先检查系统最后一个已知状态,因为代码不能假定它在2合1系统上,然后更改模式[13]
// Snip from Gemini - Perform 2-in1 Mode Transition via Button:
#ifdef Q_OS_WIN
bool MainWindow::winEvent( MSG * message, long * result ) {
if (message && message->message == WM_SETTINGCHANGE && message->lParam)
{
if (wcscmp(TEXT("ConvertibleSlateMode"), (TCHAR *) message->lParam) == 0)
d->notifySlateModeChange();
else if (wcscmp(TEXT("SystemDockMode"), (TCHAR *)
message->lParam) == 0)
d->notifyDockingModeChange();
*result = 0;
return true;
}
return false;
}
#endif
void MainWindow::Private::notifySlateModeChange()
{
#ifdef Q_OS_WIN
bool bSlateMode = (GetSystemMetrics(SM_CONVERTIBLESLATEMODE) == 0);
if (slateMode != bSlateMode)
{
slateMode = bSlateMode;
emit q->slateModeChanged();
if (forceSketch || (slateMode && !forceDesktop))
{
if (!toSketch || (toSketch && toSketch->isEnabled()))
q->switchToSketch();
}
else
{
q->switchToDesktop();
}
//qDebug() << "Slate mode is now" << slateMode;
}
#endif
}
void MainWindow::Private::notifyDockingModeChange()
{
#ifdef Q_OS_WIN
bool bDocked = (GetSystemMetrics(SM_SYSTEMDOCKED) != 0);
if (docked != bDocked)
{
docked = bDocked;
//qDebug() << "Docking mode is now" << docked;
}
#endif
}
步骤3:修复测试中发现的问题。虽然在触摸或鼠标模式下使用调色板都很容易,但工作区本身需要保持焦点和缩放,以符合用户的期望。因此,让一切都变大不是一个选项。在屏幕模式下,控件已放大以方便触摸交互,但屏幕图像本身需要在不同级别上进行管理,以维持预期的用户体验。请注意,在视频(图3)中,编辑窗格中的图像在不同模式下在屏幕上的大小保持不变。这是开发人员需要创造性解决方案的领域,以便保留屏幕空间以保持图像一致。另一个问题是,最初的尝试是让两个UI同时运行,由于两个UI共享相同的图形资源,这严重影响了性能。在两个UI中都进行了调整,以使分配的资源需求尽可能独立,并尽可能优先处理活动的UI。
摘要
如您所见,为应用程序添加2合1模式感知是一个相当简单的过程,只要您考虑到用户在一种交互模式与另一种模式下将如何与您的应用程序交互。请阅读英特尔文章“为基于Ultrabook™设计的2合1设备编写转型应用程序”,以获取有关创建具有转换用户界面的应用程序的更多信息[10]。对于Krita Gemini,我们决定使其在屏幕模式下创作绘画和艺术品变得简单,并在笔记本模式下进行这些创作的最后润饰。在开发2合1模式时,请考虑在屏幕模式或笔记本模式下向用户展示应用程序时,您希望突出显示什么。
相关链接
- Intel.com:介绍Intel开发者中心
- 2合1信息
- 超便携设备触摸开发者指南
- 适用于第4代英特尔®酷睿™处理器英特尔®处理器显卡的开发者指南
- Ultrabook和屏幕Windows * 8传感器开发指南
- 英特尔®文章:Ideum GamePlay:您最喜欢的游戏触摸控制
- 英特尔®文章:为Ultrabook设备和支持触摸的桌面应用程序设计
- 英特尔®文章:如何编写2合1感知应用程序(作者:Stephan Rogers)
- 英特尔®文章:在Windows* 8上混合使用触控笔和触摸输入(作者:Meghana Rao)
- 英特尔®开发者论坛2013演示(PDF):为基于Ultrabook™设计的2合1设备编写转型应用程序(作者:Meghana Rao,PDF)
- Krita Gemini*:一般信息
- Krita Gemini:可执行文件下载(滚动至Krita Gemini链接)
- Krita Gemini模式转换:源代码下载
- KO GmbH Krita Gemini:源代码和许可证库
相关的英特尔文章
其他英特尔资源
- 英特尔®开发者中心
- 英特尔®图形性能分析器
- 为Ultrabook™设备开发节能应用
- Ultrabook™应用实验室
- Windows* 8.1预览 – 开发者有什么新内容
- Ultrabook™ 和平板电脑 Windows* 8 传感器开发指南
注意事项
本文档中的信息是基于英特尔产品提供的。本文档不授予任何明示或暗示的、通过禁止反悔或其他方式的任何知识产权许可。除英特尔对此类产品的销售条款和条件中规定的内容外,英特尔不承担任何其他责任,并声明对销售和/或使用英特尔产品的所有明示或暗示的保证不承担任何责任,包括对特定用途的适用性、适销性或侵犯任何专利、版权或其他知识产权的保证。
除非 Intel 书面同意,否则 Intel 产品不设计也不用于任何可能导致人员伤亡的应用程序。
英特尔可能随时更改规格和产品描述,恕不另行通知。设计人员不得依赖标记为“保留”或“未定义”的任何特性或说明的缺失或特性。英特尔将这些保留供将来定义,并且对因将来对其进行更改而产生的任何冲突或不兼容性不承担任何责任。此处的信息如有更改,恕不另行通知。请勿基于此信息最终确定设计。
本文档描述的产品可能存在设计缺陷或错误,称为勘误,这可能导致产品偏离已发布的规格。当前已知的勘误可根据要求提供。
请联系您当地的英特尔销售办事处或您的经销商以获取最新的规范,并在下订单前进行咨询。
订购号为本文档或英特尔其他文献中引用的文档副本,可通过致电1-800-548-4725或访问 http://www.intel.com/design/literature.htm 获取。
性能测试中使用的软件和工作负载可能已针对在英特尔微处理器上的性能进行了优化。性能测试,例如SYSmark*和MobileMark*,是使用特定的计算机系统、组件、软件、操作和功能测量的。对这些因素中的任何一个进行更改都可能导致结果有所不同。您应参考其他信息和性能测试,以协助您全面评估您打算购买的产品,包括该产品与其他产品结合使用时的性能。
本文档中重印的任何软件源代码均根据软件许可证提供,并且只能根据该许可证的条款使用或复制。
Intel 和 Intel 标志是 Intel Corporation 在美国和/或其他国家/地区的商标。
版权 ©2014 英特尔公司。保留所有权利。
*其他名称和品牌可能被声明为他人的财产。