ミープレ!

Karnoの日記

日記を読む

« 作る作る詐欺 | 政治の問題点。 »

2008年08月19日 20:27
タイトル ひゃっほう!!!!!!!!!!
本文 トランス状態だぜwwwwwwwwwwwwwwwwwwwww
トランス脂肪酸は嫌われてるみたいだけど
でもそんなの関係ねぇwwwwwwwwwwwwwwwww
/// <summary>
/// リンク付きテキストを指定されたarea内に描画します。
/// ただしheightは無視します。
/// </summary>
/// <param name="g">描画グラフィック</param>
/// <param name="texts">描画リンクデータの配列</param>
/// <param name="area">描画する大きさとか位置とか</param>
/// <param name="draw">計算だけか、描画するのか</param>
/// <param name="height">描画した後の高さ</param>
/// <returns>リンク描画したエリアたち</returns>
private LinkRectangles[] DrawWrappedLinkText(Graphics g, LinkTextData[] texts, Rectangle area, bool draw, out int height)
{
    Rectangle cline = area;
    int lines = 1;
    int MaxHeight = 0;
    List<Rectangle> drawAreas = new List<Rectangle>();
    List<LinkRectangles> LinkRects = new List<LinkRectangles>();
    foreach (LinkTextData ltd in texts)
    {
        String LinkTextBuffer = ltd.LinkText;
        int prevlen = -1; //前の長さを格納しとく
        {
            //現在の行の高さを取得して、一番大きければMaxHeightへ
            //スコープの関係上{}でくくる
            int lh = GetRealStringSize(ltd.LinkText, g).Height;
            if (lh > MaxHeight) MaxHeight = lh;
        }
        drawAreas.Clear();
        while (LinkTextBuffer != "")
        {
            String drawText = LinkTextBuffer;
            Size charsize = GetRealStringSize(drawText.Substring(0, 1), g);
            if (cline.Width < charsize.Width)
            {
                //新しい行にする
                VerticalShift(ref area, charsize.Height);
                cline = area;
                lines++;
            }
            //前の長さを参考にすることができるかな?
            if (prevlen != -1 && drawText.Length > prevlen)
            {
                //できそう
                drawText = drawText.Substring(0, prevlen);
            }
            else
            {
                //初っ端なので概算する
                double aboutlen = (double)GetRealStringSize(drawText, g).Width / (double)Width;
                if (aboutlen > 1.0) //drawTextの方が長い場合で
                {
                    //およそaboutlen倍textが長い
                    //->なら1/aboutlen倍すればいいじゃん!
                    drawText = drawText.Substring(0, (int)(drawText.Length / aboutlen));
                }
            }
            //処理高速化のため方向によって分ける
            if (GetRealStringSize(drawText, g).Width > cline.Width)
            {
                //縮める方
                while (GetRealStringSize(drawText, g).Width >= cline.Width && drawText.Length > 1)
                {
                    drawText = drawText.Substring(0, drawText.Length - 1);
                }
            }
            else if (GetRealStringSize(drawText, g).Width < cline.Width)
            {
                //伸ばす方
                while (GetRealStringSize(drawText, g).Width < cline.Width && LinkTextBuffer.Length - drawText.Length > 1)
                {
                    drawText = drawText + LinkTextBuffer.Substring(drawText.Length, 1);
                }
                //だからってはみ出しちゃ意味無いよね!
                //最悪でも1文字でしょ!
                if (GetRealStringSize(drawText, g).Width > cline.Width)
                    drawText = drawText.Substring(0, drawText.Length - 1);
            }
            //リンクテキストのバッファを更新しとく
            LinkTextBuffer = LinkTextBuffer.Substring(drawText.Length);
            if (draw) //描画するの?
            {
                if (ltd.IsLink)
                {
                    using (Font f = new Font(Font, FontStyle.Underline))
                        DrawText(drawText, g, cline, LinkColor, f);
                }
                else
                    DrawText(drawText, g, cline, TextColor);
            }
            //リンクだったら描画領域をListに追加しとく
            if (ltd.IsLink)
            {
                drawAreas.Add(new Rectangle(cline.Location, GetRealStringSize(drawText, g)));
            }
            prevlen = drawText.Length;
            HorizontalShift(ref cline, GetRealStringSize(drawText, g).Width);
        }
        if (ltd.IsLink)
            LinkRects.Add(new LinkRectangles(ltd, drawAreas.ToArray()));
    }
    height = lines * MaxHeight;
    return LinkRects.ToArray();
}


これはこの部分になりました。

« 作る作る詐欺 | 政治の問題点。 »

コメントをつける

コメントをつけるためにはログインが必要です

まだユーザー登録していない方はこちらからユーザー登録してください

Karnoの最近の日記

日時 題名 本文(省略)
2008/09/03 00:02 ( ゚∀゚)o彡゜リニア!リニア! 長い間 「未来の超特急」 「実現しない」 とか言われてたリニアですが、ついに国が動き...
2008/09/02 23:50 さて。 韓国経済が10日あたりに峠を迎えるそうです。 また破綻するのかなぁ。 そして俺...
2008/08/30 20:25 なんだかなぁ。 サイト凍結するのすら面倒臭い
2008/08/27 19:41 Google Suggest ですよねー。
2008/08/25 18:56 二名様ごあんな~いっ♪ 仲悪いのは分かったから他所でやってくれんかなぁ。。。 つか何が起きてるの?両者とも...
2008/08/21 21:45 政治の問題点。 上層部がジジババすぎる。 あとは好きなだけ私腹肥やしてこの世とオサラバっすか。
2008/08/19 20:27 ひゃっほう!!!!!!!!!! トランス状態だぜwwwwwwwwwwwwwwwwwwwww トランス脂肪酸は嫌われてる...

Menu

News!