皆様
八木 です。
Calc/Writer で、点線/破線が描画されるようにするパッチを書きました。
(geometry::ViewInformation2D クラスを利用します)
パッチ内容及び報告内容(予定)について、もしもお気づきの点ありましたら教
えて下さい。
パッチをここに置きました。
http://dl.dropbox.com/u/20970054/fix-Dotted-and-Dashed-table-borders-are-not-drawn-correctly.patch
下記の内容で Bugzilla に報告したいと考えています。
ーーーーー英文ここからーーーーー
I will post a patch.
This patch will solve the problem that a thin line is drawn instead
dotted and dashed line.
In addition, to solve the problem when drawing thick dotted and dashed
lines.
ーーーーー英文ここからーーーーー
ーーーーー日本語文ここからーーーーー
私はパッチを投稿します。
このパッチは、点線及び破線ではなく細線が描画される不具合を解消します。
更に、太い点線及び破線の描画時の不具合を解消します。
ーーーーー日本語文ここまでーーーーー
(11/09/24 17:56), [email protected] wrote:
皆様
八木 です。
長らく進展の無い Bug 37129 について、不具合を解消しようとしていますが
躓 いています。
https://bugs.freedesktop.org/show_bug.cgi?id=37129
私の調べた事や考えた事を書きます。宜しければご意見等を頂ければと思いま
す。
[経緯]Cédric さんは、パッチ(Clac の罫線を drawinglayer で描画する修
正)を撤回する意思はない。
よって、この不具合を修正するためには、drawinglayer を使って点線
/ 破線を正しく描画する必要がある。
[不具合の原因]drawinglayer を使った点線/破線の描画には、現状、3つの
不 具合があると思われます。
不具合1:細い点線/破線を描画すると、実線で描画される。
ただし、これは次の不具合2を回避するためと思われます。
不具合2:細い点線/破線を描画できない(何も描画されない)。
不具合1を回避する修正を加えたとしても、細い点線/破線
が 描画されない不具合があります。
パッチ適用後に、細い点線/破線の描画時にアンチエリアス
制 御が行われなくなった事が原因と推測されます。
(パッチ適用前には処理がありました)
不具合3:描画される点線/破線の点の長さ、間隔がおかしい。
太い点線/破線で出ている不具合です。
デバイスの解像度や画面の拡大/縮小率に関わらず、固定さ
れ たドット数で点線/破線を描画するのが
原因と思われます。
svtools::GetDashing が固定の値を返すのが直接的な原因と
思 いますが、
このメソッドを
BorderLinePrimitive2D::create2DDecomposition 内の一連の処理内で呼び出
すのが
適切なのかどうなのか...。
[不具合の解消方法]
不具合1:BorderLinePrimitive2D.cxx 内の、
BorderLinePrimitive2D::create2DDecomposition にある
処理を修正する(場合分け処理の修正)。
不具合2:vclpixelprocessor2d.cxx において thick line 用に用意さ
れ ている mnPolygonStrokePrimitive2D が
点線/破線描画においても使える様なので、これを利用して
ア ンチエリアスをキャンセルして描画する。
不具合3:良い案がありません...。
svtools::GetDashing 呼び出し時に、画面上の1ドットが何
TWIP 相当かの情報があれば、
画面/用紙に合わせた点線/破線の長さを計算できると思わ
れ ます。
create2DDecomposition メソッドに渡される、
geometry::ViewInformation2D 引数から
情報を得られるか調べて見ましたが、私には分かりませんで
した。
呼び出し元の ScOutputData オブジェクトには、そのものズ
バ リな情報がありますが、
drawinglayer からは使わない方が良いように思えます。
長々と失礼致しました。
ご意見、ご指摘等頂ければ幸いです。
(11/06/07 7:29), [email protected] wrote:
安部 様
ありがとうございました。凄く助けられました。
bugzilla にてコメントを追加しました。
https://bugs.freedesktop.org/show_bug.cgi?id=37129
(11/06/07 2:26), Takeshi Abe wrote:
八木さん
早速のご返事ありがとうございます。
On Tue, 07 Jun 2011 00:18:14 +0900,"[email protected]"
<[email protected]> wrote:
リグレッションの原因と思われる修正は、こちらでした。
commit bf9aaaec78793e1572df1812308c7aae2cb9f4b3
Author: Cédric Bosdonnat<[email protected]>
Date: Tue Feb 22 15:26:34 2011 +0100
Use svx::frame::DrawRange with the drawinglayer in calc now
なるほど、これはかなり絞り込まれていますね。
次のようにコメントしたいと考えています。
推測の理由を入れました。
拙い文だと思いますので、おかしい部分があればご指摘頂ければ嬉しいです。
問題ないと思います。
-- Takeshi Abe
ーーーーーコメント案ここからーーーーー
Temporarily, how about reverting a part of the patches?
I'm guessing that this problem occurs because of the following commit.
Commit bf9aaaec78793e1572df1812308c7aae2cb9f4b3
"Use svx:: frame:: DrawRange with the drawinglayer in calc now"
Because in Calc, this problem is solved in the following
modifications.
----- here -----
diff --git a/sc/source/ui/view/output.cxx
b/sc/source/ui/view/output.cxx
--- a/sc/source/ui/view/output.cxx
+++ b/sc/source/ui/view/output.cxx
@@ -1232,7 +1232,7 @@ void ScOutputData::DrawFrame()
{
size_t nRow2 = nRow1;
while( (nRow2 + 1<= nLastRow)&& pRowInfo[ nRow2 + 1
].bChanged ) ++nRow2;
- rArray.DrawRange( pProcessor, nFirstCol, nRow1,
nLastCol, nRow2, pForceColor );
+ rArray.DrawRange( *pDev, nFirstCol, nRow1, nLastCol, nRow2,
pForceColor );
nRow1 = nRow2 + 1;
}
}
----- now -----
ーーーーーコメント案ここまでーーーーー
--
Unsubscribe instructions: E-mail to [email protected]
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/ja/discuss/
All messages sent to this list will be publicly archived and cannot be deleted