皆様
八木 です。

長らく進展の無い 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

メールによる返信