Xamarin.Mac/NSViewの座標系を左下原点から左上原点に変更する
< Xamarin.Mac
ナビゲーションに移動
検索に移動
2017年6月13日 (火) 02:04時点における103.22.200.204 (トーク)による版
NSViewでは標準で「左下が原点で右が+Xで上+Y」となっている。 いわゆる小学校の算数で習う座標系だ。 エクセルのグラフなども基本はこれである。
しかしコンピューターの世界ではなぜか古くから「左上が原点で下方向が+Yで右方向が+X」という座標系が一般的となっている。 PC-9801のGRAMもWindowsのGDIもDirectXも皆これである。 このためWindowsなどからアプリを移植する際にこの点を考慮しないでコピペすると逆さま表示になる。
しかし根本のソースコードが壮大すぎて手を入れるのが難しい場合もある。 そういうときはNSViewのIsFlippedプロパティをオーバーライドして常に「true」を返すようにすればよい。 この設定は、NSGraphcis系のみならず、CoreGraphicsにも反映される。
// アンチエイリアス無効化
public partial class FlippedView : AppKit.NSView
{
// trueで左上原点
// falseで左下原点
public override bool IsFlipped { get { return true; } }
// 描画
public override void DrawRect(CoreGraphics.CGRect dirtyRect)
{
var cgContext = NSGraphicsContext.CurrentContext.GraphicsPort;
cgContext.MoveTo(100, 100);
cgContext.AddLineToPoint(200, 200);
cgContext.StrokePath();
}
}
関連項目
- Xamarin.Mac/CoreGraphicsの基本的な使い方
- Xamarin.Mac/CoreGraphicsでアンチエイリアスの有効無効を設定する
- Xamarin.Mac/CGImageをNSImageに変換する
- Xamarin.Mac/CGImageをファイルに保存する
- Xamarin.Mac/NSOpenGLViewを使う
- Xamarin.Mac/NSOpenGLViewをRetina Displayに対応させる
- Xamarin.Mac/スクリーンキャプチャを撮る
- Xamarin.Mac/ディスプレイの物理サイズを取得する