Curl Global Community
文字が表示しきれない場合に、右端に「...」と表示するには? - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: 文字が表示しきれない場合に、右端に「...」と表示するには? (/showthread.php?tid=941)



文字が表示しきれない場合に、右端に「...」と表示するには? - umemura - 07-12-2013

Windows のエクスプローラ で、ファイル名を表示する部分で、
カラム幅の制限上、ファイル名すべてが表示しきれない場合に、右端に「...」と表示されると思います。

これを Curl でも実現したいのですが、どうすればよいでしょうか。




RE: 文字が表示しきれない場合に、右端に「...」と表示するには? - umemura - 07-17-2013

Curl のIDE ドキュメントで、プロパティなどを表示するテキストで同機能が実装されていますね。

インスペクトしてみると、HackEllipsisTextGraphic というクラスがあるようですが、
hidden アクセサで定義されているので使えません。
その継承もとの LightWeightTextGraphic などが公開されるとうれしいのですが・・・。



RE: 文字が表示しきれない場合に、右端に「...」と表示するには? - umemura - 07-17-2013

とりあえず、こんな実装なのかな、という想像です。

Code:
{define-class public CustomTextFrame {inherits HBox}
  field tfb:TextFlowBox
  field sufix-text:Frame = {Frame}
  field cut?:bool = false
  {constructor public {default ...}
    set self.tfb = {DefaultTextFlowBox {splice ...}}
    set self.tfb.height= self.tfb.font-size + 1pt
    {construct-super
        height= self.tfb.font-size + 1pt,
        self.tfb,
        self.sufix-text
    }
  }
  {method public {set-size lc:LayoutContext, bounds:GRect}:void
    def font-w = {self.calc-text-width self.tfb, {self.tfb.get-text} }
    {if font-w > bounds.width then
        {if not self.cut? then
            set self.cut? = true
            {self.sufix-text.add replace? = true, "..."}
        }
     else
        set self.cut? = false
        {self.sufix-text.clear}
    }
    {super.set-size lc, bounds}
  }
  {method {calc-text-width fr:Graphic, txt:String }:FloatDistance
    def font = {Font
                   fr.font-family,
                   fr.font-size * 1pt,
                   weight = fr.font-weight,
                   style = fr.font-style
               }
    def d =
        {fr.display-context.get-string-advance-width
            font,
            txt
        }
    {return d}
  }
}
{CustomTextFrame "あいうえおかきくけこさしすせそたちつてと"}