2012-12-07 2 views
1

XTextWidth() 함수를 사용하여 문자열의 너비를 가져 오려고했지만 어떤 이유로 반환 된 값은 항상 실제 표시된 문자열 길이보다 큽니다.X 라이브러리에서 잘못된 문자열 길이 값을보고하는 이유는 무엇입니까?

내가 그것을 어떻게

import Control.Concurrent 
import qualified Graphics.X11.Xlib as X 
import qualified Graphics.X11.Xlib.Types as Xt 
import qualified Graphics.X11.Types as Xt 

main = do 
    display <- X.openDisplay "" 
    let dflt = X.defaultScreen display 
     border = X.blackPixel display dflt 
     background = X.whitePixel display dflt 
    rootw <- X.rootWindow display dflt 
    win <- X.createSimpleWindow display rootw 0 0 500 300 1 border background 
    X.mapWindow display win 
    X.moveWindow display win 0 0 

    updateScreen display win 

updateScreen display win = do 
    gc <- X.createGC display win 
    bgcolor <- initColor display "white" 
    fgcolor <- initColor display "black" 
    X.setBackground display gc bgcolor 
    X.setForeground display gc fgcolor 

    font <- X.loadQueryFont display "-misc-fixed-*-*-*-*-14-*-*-*-*-*-*" 
    let str = "Some reasonably long string." 
     len = X.textWidth font str 
    putStrLn $ show len 
    X.drawImageString display win gc 0 50 str 

    X.freeFont display font 
    X.freeGC display gc 
    threadDelay 100000 
    updateScreen display win 

initColor :: X.Display -> String -> IO X.Pixel 
initColor dpy color = do 
    let colormap = X.defaultColormap dpy (X.defaultScreen dpy) 
    (apros,_) <- X.allocNamedColor dpy colormap color 
    return $ X.color_pixel apros 
을 를 해결할 수 : 나는 화면의 폭을 측정하는 경우는 168 픽셀 (는 IS 다음 컴파일 가능한 및 실행 가능한 예) 주위 어딘가에있는 동안 다음의 예에서는, 인쇄 값이 196입니까?

답변

4

선택한 글꼴로 표시하지 않습니다. 사용해보기 :

X.setFont display gc $ X.fontFromFontStruct font 
관련 문제