2009-05-11 22 views
0

私は画像を見るためのMacプラグインを持っています。もともとQuickdrawで書かれていて、私はQuartzに移そうとしています。Quartzプラグインの左上隅を探す

私の現在の問題は起源です。 QDでは、原点はプラグイン矩形の左上隅です。 Quartzでは、プラグイン矩形の上から1つの画面の高さになります(Firefoxのボタンなどは含まれません)。これは事実、私のプラグインの四角形の真ん中のどこかでランダムです。

これはまた、ブラウザウィンドウの描画部分のサイズを知る必要があることを意味します。私はウィンドウの大きさを把握できると確信していますが、どのくらいのスペースがタブなどで占められているのか把握していますか? Macはこれらのことを知らないのですか?

Appleがなぜ原点を左下に置くことにしたのか誰にも分かりますか?私にはそんなに愚かなようだ。

答えて

1

NSViewを使用している場合は、-isFlipped関数の実装を作成してYESを返します。これにより、反転座標系に基づいて描画することができます。あなたはNSViewのを使用していないが、描画生CoreGraphicsを行っている場合

あるいは、あなたはとてもようにCTMを変更することができます。

CGContextScaleCTM(context, 1.0, -1.0); 

これはthis Apple Q&A documentから来ています。

あなたが何か他のものによって与えられてきたCGContextRefでこれをやっている場合は、まず既存のCTMを保存する必要がありますし、完了したら、それを復元:

CGContextSaveGState(context); 

// do your stuff here ... 

CGContextRestoreGState(context); 

ああ、と起源QuartzレンダリングシステムはPostScriptに基づくPDFグラフィックスシステムに基づいており、左下に原点を持っているため、左下にあります。

+0

スケーリングのことは本当に気にしません。私は物事を否定的に扱うことができます。問題は、プラグインスペースの左上隅にイメージをロックするのに問題があることです。起源は見つけるのが難しいと思われるので、イメージを文脈に描画するときに、イメージを正しい場所に翻訳するのは難しいです... –

+0

フリップされたビュー座標を使用している場合、原点は効果的に左上。さもなければ、それはちょうどイメージの左下原点のケースであるべきです - プラグインビューの高さ - イメージの高さです。 NSMaxY(pluginView.bounds)は上端のy-インデックスを与えるので、 'image.bounds.origin.y =(NSMaxY(pluginView.bounds) - image.size.height);' –

関連する問題