[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: font :height setting



>>>>> [meadow-users-jp : No.7121] にて
>>>>> 矢木さんは書きました:
> これだと :height にちょうど 90, 105, 120, 180 を指定した時だけ有効になります。
> 範囲指定はできないのでしょうか。

> また、デフォルトのフォントサイズを変更するにはどうしたら良いのでしょうか?

このような場合には、フォントの選択関数を自分で定義してください。

詳しくは書いていないのですが、下記を参照してください。
http://www.meadowy.org/meadow/wiki/%E8%A9%B3%E7%B4%B0%E8%A8%AD%E5%AE%9A%E5%8F%8A%E3%81%B3%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD#%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E8%A6%81%E6%B1%82%E3%81%AE%E8%A8%98%E8%BF%B0

参考までに、フォントの選択関数の例を示します。

> これは 16dot までは正しいと思いますが、24dot では 180dp ではなく
> 181dp になるようです。

そうですか。でも、その理由が分かりません。参考となる文献がありまし
たら教えてください。

-----------------------------------------------------------------
(w32-add-font
 "fontset-std"
 '((spec
    ((:char-spec any :height any :weight any :slant any)
     function
     (lambda (char attrs frame)
       (if (eq (plist-get attrs :height) 'unspecified)
           '(w32-logfont "Courier New" 0 -13 400 0 nil nil nil 0 1 3 49)
         (let ((spec-alist
                ;; (emacs-charset fontname charset scale-factor spacing)
                ;; height is scaled by scale-factor / 6.
                '((ascii "Courier New" 0 -5 0)
                  (japanese-jisx0208 "MS ゴシック" 128 -6 -1 )
                  ))
               (charset (char-charset char)) font-spec)
           (setq font-spec (assq charset spec-alist))
           (when font-spec
             (let* ((fontname (nth 1 font-spec))
                    (charset (nth 2 font-spec))
                    (scale-factor (nth 3 font-spec))
                    (spacing (nth 4 font-spec))
                    ;; get height in pixel.
                    ;;   h_px = h_pt/10 [pt] / 72 [pt/inch] * 96 [dpi]
                    ;;   h_px = h_px * scale-factor / 6
                    ;;   -> h_px = h_pt * scale-factor / 45
                    (height (/ (* (plist-get attrs :height) scale-factor)
                               45))
                    (weight (if (eq (plist-get attrs :weight) 'bold)
                                700 400))
                    (slant (eq (plist-get attrs :slant) 'italic)))
               (list (list 'w32-logfont fontname 0 height weight
                           0 slant nil nil charset 1 3 49)
                     (list (cons 'spacing
                                 (if (or (eq weight 700) slant)
                                     spacing 0))))))))))
    ((:char-spec bitmap :height any :weight any :slant any)
     strict
     (bdf-font "c:/usr/local/share/emacs/fonts/bdf/bitmap16.bdf")
     ))))

--
三好 雅則 http://miyoshi.meadowy.org/