Curl Global Community

Full Version: 文字が表示しきれない場合に、右端に「...」と表示するには?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Windows のエクスプローラ で、ファイル名を表示する部分で、
カラム幅の制限上、ファイル名すべてが表示しきれない場合に、右端に「...」と表示されると思います。

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

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

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

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 "あいうえおかきくけこさしすせそたちつてと"}