デスクトップ アプリがこの先生きのこるには

51
デスクトップがこの 先生きのこるには 2013/07/06 Room metro Tokyo #1 Manato KAMEYA (@Grabacr07) アプリ

Upload: manato-kameya

Post on 24-May-2015

6.145 views

Category:

Technology


6 download

DESCRIPTION

2013/07/06 Room metro Tokyo #1 で発表したスライドです。 Windows における DPI システムの解説が多め。

TRANSCRIPT

Page 1: デスクトップ アプリがこの先生きのこるには

デスクトップがこの先生きのこるには

2013/07/06 Room metro Tokyo #1

Manato KAMEYA (@Grabacr07)

アプリ

Page 2: デスクトップ アプリがこの先生きのこるには

Subject

• まだまだデスクトップ、そしてWPF アプリ

• DPI-aware application のために

(今回、ほとんど DPI 関係のお話になってしまいました)

• DPI についてちょっと深く知る的な

• Windows 8.1 Preview 新機能

• タッチエクスペリエンス

Page 3: デスクトップ アプリがこの先生きのこるには

Agenda

デスクトップアプリがこの先生きのこるには

Introduction

Touch Experience

Windows DPI

Conclusion

デスクトップアプリがこの先生きのこるには

Page 4: デスクトップ アプリがこの先生きのこるには

• 内容は個人に帰属します所属する組織を代表するものではありません

• Windows 8.1 Preview

• プレビュー版に関する話題が含まれます

• 正式リリース時には変更される可能性があります

Page 5: デスクトップ アプリがこの先生きのこるには

Introduction

Page 6: デスクトップ アプリがこの先生きのこるには

Self Introduction

• 亀谷学人 (かめやまなと)

• 某メーカー系 SIer 勤務

• C# + WPF

Windows Client Application 開発

• Twitter: ぐらばく (@Grabacr07)

• Blog: http://grabacr.net/最近目が死んでる

Page 7: デスクトップ アプリがこの先生きのこるには

Interactive Whiteboard

• コンピューターディスプレイ

• 大型 (40 型~ 80 型)

プラズマディスプレイ、プロジェクター、etc…

• ペンや指による入力デジタル感圧式、赤外線、影、超音波、etc…

• 対応ソフトウェア開発

Page 8: デスクトップ アプリがこの先生きのこるには

for the Tablet PC…?

• Windows 8と様々なタブレット PC の登場

例のソフトウェア、Windows 8 でも動くよね?

既に動作確認は取れております

タブレット PC で表示が狂う件

大変申し訳ございません早急に調査し対応致しますので今暫くお待ち頂きますよう宜しくお願

Page 9: デスクトップ アプリがこの先生きのこるには

for the Tablet PC…?

• Windows 8と様々なタブレット PC の登場

例のアプリ、Windows 8 でも動くよね?

既に動作確認は取れております

タブレット PC で表示が狂う件

大変申し訳ございません早急に調査し対応致しますので今暫くお待ち頂きますよう宜しくお願

高 DPI 環境で表示不良

Page 10: デスクトップ アプリがこの先生きのこるには

for the Tablet PC…?

• Windows 8と様々なタブレット PC の登場

• ディスプレイの小型化 + 高精細化

TABLET / PC SIZE RESOLUTION PPI

Acer ICONIA W38.1 inch174 mm x 109 mm

WXGA (1280 x 800)186 ppi0.136 mm

Acer ICONIA W711.6 inch257 mm x 146 mm

Full-HD (1920 x 1080)190 ppi0.134 mm

Surface Pro10.6 inch235 mm x 132 mm

Full-HD (1920 x 1080)208 ppi0.122 mm

MacBook Pro (Retina)13.3 inch287 mm x 179 mm

WQXGA (2560 x 1600)227 ppi0.112 mm

高 DPI 環境の標準化

物理的な1 ドットサイズ

Page 11: デスクトップ アプリがこの先生きのこるには

新旧 DPI システム解説

Windows DPI

Page 12: デスクトップ アプリがこの先生きのこるには

What is DPI ?

• 今更ですが…

• Dots Per Inch

• 1インチの幅でどれだけのドットを表現できるか

• Windows では 1 インチ = 96 pixel

• 100 % (96 dpi)、125 % (120 dpi)、150 % (144 dpi) などの設定[コントロールパネル] -> [デスクトップのカスタマイズ] -> [テキストやその他の項目の大きさの変更]

96 dpi

100 x 50 px

144 dpi

150 x 75 px

96 dpi

100 x 50 px

144 dpi

150 x 75 px

Page 13: デスクトップ アプリがこの先生きのこるには

DPI Settings (Windows 8)

Page 14: デスクトップ アプリがこの先生きのこるには

96 DPI (100 %)

1920 x 1080

Page 15: デスクトップ アプリがこの先生きのこるには

120 DPI (125 %)

1536 x 864

Page 16: デスクトップ アプリがこの先生きのこるには

144 DPI (150 %)

1280 x 720

Page 17: デスクトップ アプリがこの先生きのこるには

DPI of the major Tablet PCs

• 既定の DPI 設定

• デバイスによって異なる

• ArrowsTab 100 %

• VAIO Pro 11 125 %

• VAIO Pro 13 125 %

• ICONIA W7 150 %

• Surface RT 100 %

• Surface Pro 150 %

Page 18: デスクトップ アプリがこの先生きのこるには

DPI of the major Tablet PCs

• 適切な設定とは? (まぁ好みなんですが)

• ppi (画素密度) – 30 ~ 40 くらいに近いと見やすい?

TABLET / PC SIZERESOLUTION(NATIVE)

PPI FITTING DPIRESOLUTION(LOGICAL)

Surface RT 10.6” 1366 x 768 148 ppi 96 dpi (100 %) 1366 x 768

VAIO Pro 13 13.6” 1920 x 1080 166 ppi 128 dpi (125 %) 1536 x 864

ICONIA W7 11.6” 1920 x 1080 190 ppi 144 dpi (150 %) 1280 x 720

Surface Pro 10.6” 1920 x 1080 208 ppi 144 dpi (150 %) 1280 x 720

MacBook Pro (Retina)

13.3” 2560 x 1600 227 ppi 192 dpi (200 %) 1280 x 800

Page 19: デスクトップ アプリがこの先生きのこるには

DPI of the major Tablet PCs

• 適切な設定とは? (まぁ好みなんですが)

• ppi (画素密度) – 30 ~ 40 くらいに近いと見やすい?

TABLET / PC SIZERESOLUTION(NATIVE)

PPI FITTING DPIRESOLUTION(LOGICAL)

Surface RT 10.6” 1366 x 768 148 ppi 96 dpi (100 %) 1366 x 768

VAIO Pro 13 13.6” 1920 x 1080 166 ppi 128 dpi (125 %) 1536 x 864

ICONIA W7 11.6” 1920 x 1080 190 ppi 144 dpi (150 %) 1280 x 720

Surface Pro 10.6” 1920 x 1080 208 ppi 144 dpi (150 %) 1280 x 720

MacBook Pro (Retina)

13.3” 2560 x 1600 227 ppi 192 dpi (200 %) 1280 x 800

Q. どうして 200 % 設定が適正でないの? A. Windows 8 で使うには小さすぎるから

Surface Pro 10.6” 1920 x 1080 208 ppi 192 dpi (200 %) 960 x 540

Page 20: デスクトップ アプリがこの先生きのこるには

Windows Store apps

• スケーリングの UX ガイドライン

• 100 % -> 通常

• 140 % -> 174 ppi以上、Full-HD (1920 x 1080) デバイスで自動的に

• 180 % -> 240 ppi以上、WQHD (2560 x 1440) デバイスで自動的に

TABLET / PC SIZE RESOLUTION PPI SCALING

ICONIA W7 11.6” 1920 x 1080 190 ppi 140 % ?

Surface Pro 10.6” 1920 x 1080 208 ppi 140 % ?

Page 21: デスクトップ アプリがこの先生きのこるには

High DPI Issues

• UI 要素やテキストが切れる

• フォントサイズ / レイアウトが不適切になる

• UI 要素がぼやける

• 座標空間の位置調整が不適切で、入力に影響する

狙った場所にドラッグ&ドロップできなくなったり

• 全画面表示のアプリケーションが部分的にしかレンダリングされない

全画面表示のゲームなどで見られる

• etc...

Page 22: デスクトップ アプリがこの先生きのこるには

DPI-unaware application

• 文字が切れる、レイアウトが崩れる、etc…

(悪意のある例ですが) 本当に何も対策しないとこうなる

96 dpi 環境 (100 %) 120 dpi 環境 (125 %) 144 dpi 環境 (150 %)

Page 23: デスクトップ アプリがこの先生きのこるには

DPI-aware application

• Win32 application

• マニフェストで

<dpiAware>True</dpiAware>宣言

• GetDeviceCaps関数

GetSystemMetrics関数

SystemParametersInfo関数

• Windows Forms application

• AutoScaleModeプロパティを Dpi に

• 開発環境の DPI を記憶

Page 24: デスクトップ アプリがこの先生きのこるには

DPI-aware application

96 dpi 環境 (100 %)

144 dpi 環境 (150 %)• DPI を考慮するとスケーリングされて意図した外観に

スケーリングされてサイズが変わってる

Page 25: デスクトップ アプリがこの先生きのこるには

DPI Virtualization and Scaling

• DPI 仮想化機能

• DPI-unaware applications のための救済措置

• Windows Vista で導入

• DPI 設定に合わせて自動的に拡大96 dpi で画面表示領域外にレンダリングされ、

DWM が拡大して表示

• ぼやける (重要)このチェックを外した状態

Page 26: デスクトップ アプリがこの先生きのこるには

DPI Virtualization and Scaling

• ぼやけるただ拡大しているだけなので…

96 dpi 環境 (100 %)

144 dpi 環境 (150 %)

拡大しただけなのでサイズは変わってない

Page 27: デスクトップ アプリがこの先生きのこるには

Device Independent Pixel

• DIP (デバイス非依存ピクセル)

• Direct2D, WPF など

• 環境の DPI 設定に関わらず 1 dip = 1/96 inch とする

• コントロールやフォントのサイズは全て DIP で指定する

開発者が DPI を意識して座標やサイズの計算をする必要がない!

• DPI 仮想化が効かない (仮想化する必要がない)

• WPF ->「解像度およびデバイスに依存しないグラフィックス」

Page 28: デスクトップ アプリがこの先生きのこるには

Device Independent Pixel

• ぼやけないそのための特別なコードも必要なし

96 dpi 環境 (100 %)

144 dpi 環境 (150 % のサイズで描画)

DIP なのでサイズ変わってない

Page 29: デスクトップ アプリがこの先生きのこるには

High DPI in WPF

• WPF で DPI を意識するケース(1)

• P/Invoke -> Win32 API … WPF の外から座標を取得してくる場合など

• DIP (デバイス非依存ピクセル) でないものは計算が必要

WPF で DPI 算出

var source = PresentationSource.FromVisual(this);if (source != null && source.CompositionTarget != null){

var dpiX = 96.0 * source.CompositionTarget.TransformToDevice.M11;var dpiY = 96.0 * source.CompositionTarget.TransformToDevice.M22;

}

1.25 とか1.5 とか

Page 30: デスクトップ アプリがこの先生きのこるには

High DPI in WPF

• WPF で DPI を意識するケース(2)

• ラスター画像がぼやける (もしくはジャギる)

• ベクター画像を用意する?

• DPI ごとに異なる画像を用意する?

• Windows Store apps では有効な手段

96 dpi

100%

144 dpi

150%

¥scale-100¥test.jpg¥scale-140¥test.jpg¥scale-180¥test.jpg

¥scale-100¥test.jpg¥scale-140¥test.jpg¥scale-180¥test.jpg

Page 31: デスクトップ アプリがこの先生きのこるには

High DPI in WPF

• Pathを使え、Pathを。

96 dpi(100 %)

144 dpi(150 %)

http://grabacr.net/archives/795

Demo

XAML で描いたクラウディアさん

ベクター形式なので DPI 対応 (拡大してもぼやけない)

Page 32: デスクトップ アプリがこの先生きのこるには

DPI Settings (Windows 8)

Page 33: デスクトップ アプリがこの先生きのこるには

DPI Settings (Windows 8.1 Preview)

モニターごとのスケーリング

(新機能)

Page 34: デスクトップ アプリがこの先生きのこるには

DPI Settings (Windows 8.1 Preview)

従来方式も可能

Page 35: デスクトップ アプリがこの先生きのこるには

Per-Monitor DPI

• モニターごとにスケーリング

Primary: 10.6” Tablet (1920 x 1080) Secondary: 24” Display (1920 x 1200)

144 dpi (150 %) 96 dpi (100 %)

Demo

Page 36: デスクトップ アプリがこの先生きのこるには

Per-Monitor DPI

Primary: 10.6” Tablet (1920 x 1080) Secondary: 24” Display (1920 x 1200)

144 dpi (150 %) 96 dpi (100 %)

Demo

• モニターごとにスケーリング

• ログオン時にそれぞれのモニターに最適な DPI を選択

• ウィンドウがモニター間を移動したときスケーリング

• Dynamic scaling

• アプリ側で、動的な DPI スケーリングに対応する必要がある!

• 非対応アプリは、DPI 仮想化によってスケーリングされる現状、explorer.exe やWPF アプリも DPI 仮想化されてしまう (まぁ、Preview 版ですし)

Page 37: デスクトップ アプリがこの先生きのこるには

Optimal Configuration

Display size Resolution (pixels) Panel PPI OS DPI Scale level

10.6” Full-HD 1920 x 1080 208 144 150%

10.6” HD 1366 x 768 148 96 100%

11.6” WUXGA 1920 x 1200 195 144 150%

11.6” HD 1366 x 768 135 96 100%

13.3” WUXGA 1920 x 1200 170 144 150%

13.3” QHD 2560 x 1440 221 192 200%

13.3” HD 1366 x 768 118 96 100%

15.4” Full-HD 1920 x 1080 143 120 125%

17” Full-HD 1920 x 1080 130 120 125%

23” QFHD (4K) 3840 x 2160 192 192 200%

24” QHD 2560 x 1440 122 120 125%

Page 38: デスクトップ アプリがこの先生きのこるには

DPI Awareness Level

• DPI-unaware applications

• 高 DPI 環境非対応、スケーリングなし

• 一応 DPI 仮想化は効くけど、品質はお察しレベル

• System DPI-aware applications

• スケーリングされるので、高 DPI 環境でも表示できる

• Windows 8.1 Preview で異なる DPI のディスプレイに移動すると仮想化されてしまう

• Per-Monitor DPI-aware ← New!

• Windows 8 までの環境で、高 DPI 環境でも表示できる

• Windows 8.1 Preview で異なる DPI のディスプレイに移動しても表示できる

Page 39: デスクトップ アプリがこの先生きのこるには

Per-Monitor DPI-aware

• 現時点でカスタム Win32 アプリのみ対応可能?

• マニフェストで Per-Monitor DPI に対応してることを宣言

<dpiAware>Per-Monitor</dpiAware> または <dpiAware>True/PM</dpiAware>

• 自分が描画されているモニターの DPI を調べる

• WM_DPICHANGED メッセージを処理

• DPI に合わせてスケーリングし再描画

• Windows 標準アプリ (explorer, mspaint, etc…) 非対応?

• WPF アプリ非対応?

Page 40: デスクトップ アプリがこの先生きのこるには

デスクトップでもタッチしたい!

Touch Experience

Page 41: デスクトップ アプリがこの先生きのこるには

Touch Experience

• デスクトップアプリで意識すべきなのは?

• コントロールの大きさ指 (爪でなく) でタッチできるサイズになっている?

• MouseEnter, MosuseMoveに頼った動きマウスを乗せてメニューを表示させたり、Tooltip に頼ったりしてない?

例えば、NumericUpDownコントロール上下ボタンは既定で 16 x 8 pixel、指で押せるわけがない

Surface Pro + 144 dpi で物理サイズ約 3 x 1.5 mm

Hogeボタン処理 XXX_YYY を実行します?

マウスを乗せるとTooltip でヘルプが出たり

Page 42: デスクトップ アプリがこの先生きのこるには

UX Guidelines

• Windows User Experience Interaction Guidelineshttp://msdn.microsoft.com/ja-JP/windows/desktop/aa511258

› すべての Windows デスクトップアプリ向けに、高品質で一貫性のある UX および UI の基準を確立する。

› UX と UI に関する一般的な質問を予想し、一般的な使用パターンについてガイダンスを提供する。

› Windows で快適に使うことができる、機能的で美しいデスクトップ アプリの開発を支援する。

• 読んだことあります?

• 900 ページ弱の PDF ファイルがあります!

簡易版もあるよ -> http://msdn.microsoft.com/ja-jp/windows/ee340680.aspx

• Windows 7 の頃に作られたもの (だけど、Windows 8 でも使えるよね…?)

Page 43: デスクトップ アプリがこの先生きのこるには

UX Guidelines

• Interaction -> Touch Experiencehttp://msdn.microsoft.com/ja-jp/library/windows/desktop/cc872774.aspx

• コントロールの大きさ

タッチできる最小サイズ -> 物理サイズ 6 x 6 mm

速度や正確さが向上 / 快適に感じる -> 物理サイズ 10 x 10 mm

• コントロールのレイアウト、感覚など

ICONIA W7 (11.6”) + 120 dpi で 60 ピクセル前後

ちょうど、リボンの大きいボタンと同じくらい

Page 44: デスクトップ アプリがこの先生きのこるには

Office 2013

• マウスモード

• 従来と同じ

• 指で押しづらい

• タッチモード

• タッチ向け

• 余白が広い

= 指で押しやすい

Page 45: デスクトップ アプリがこの先生きのこるには

Office 2013

タッチ操作でメニューを出した場合

マウス操作でメニューを出した場合

Page 46: デスクトップ アプリがこの先生きのこるには

Conclusion

Page 47: デスクトップ アプリがこの先生きのこるには

DPI-aware application

• 高精細モニター搭載デバイスが主流に

• 主力タブレット PC 製品は軒並み 160 ~ 200 ppi

• 既定の DPI は 120 ~ 144 dpi、もしくはそれ以上が主流に

• DPI-aware application はむしろ「当然」の域に

• DPI 仮想化機能

• あくまで非対応アプリへの救済措置

• WPF を使いましょう (デバイス非依存ピクセル)

Page 48: デスクトップ アプリがこの先生きのこるには

Per-Monitor DPI

• Windows 8.1 Preview 新機能

• モニターごとに適切な DPI を自動設定

• ウィンドウがモニター間を移動すると自動的にスケーリング

• Per-Monitor DPI-aware

• モニター間移動でスケーリングするにはアプリ側で対応が必要

• 現状、WPF などは対応できない? (正式版に期待)

Page 49: デスクトップ アプリがこの先生きのこるには

Touch Experience

• デスクトップで意識すべき点

• コントロールの大きさが十分か

• マウス固有の動きに依存していないか

• UX Guidelines 読もう

• タッチ対応を含め、デスクトップアプリの開発を支援

• Office などの UI を例にしてみてもよいかも

Page 50: デスクトップ アプリがこの先生きのこるには

Reference

• DPI and Device-Independent Pixels

http://msdn.microsoft.com/en-us/library/windows/desktop/ff684173(v=vs.85).aspx

• Guidelines for scaling to pixel density (Windows Store apps)

http://msdn.microsoft.com/en-us/library/windows/apps/hh465362.aspx

• Writing DPI-Aware Desktop Applications in Windows 8.1 Preview

http://go.microsoft.com/fwlink/p/?LinkID=307061

• DPI Tutorial sample

http://code.msdn.microsoft.com/DPI-Tutorial-sample-64134744/description

Page 51: デスクトップ アプリがこの先生きのこるには

Reference

• Getting system DPI in WPF app.. - MSDN Blogs

http://blogs.msdn.com/b/jaimer/archive/2007/03/07/getting-system-dpi-in-wpf-app.aspx

• Scaling to different screens - Building Windows 8 - MSDN Blogs

http://blogs.msdn.com/b/b8/archive/2012/03/21/scaling-to-different-screens.aspx

• Windows User Experience Interaction Guidelines

http://msdn.microsoft.com/en-us/library/windows/desktop/aa511258.aspx