Version française
Home     About     Download     Resources     Contact us    
Browse thread
Objective Caml 3.00 released
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: T. Kurt Bond <tkb@t...>
Subject: Re: LablTk in Objective Caml 3.00
T. Kurt Bond (that would be me) wrote:
> I noticed that all the ?width options and ?height options for things
> like Label.create and Canvas.create have type int; Why don't these
> actually have type Tk.units so that one can specify them in any of the
> normal Tk screen units: Inches, Millimeters, Centimeters, Points, or
> Pixels, just like you can using raw Tcl/Tk or OcamlTk ? 

Jacques Garrigue writes:
> The answer is in the LablTk section of the manual:
> 
> 27.1   Module Tk: basic functions and types for LablTk
> Dimensions 
>   type units = [`Pix int|`Cm float|`In float|`Mm float|`Pt float]
>   val pixels : units -> int
>      Converts various on-screen units to pixels, respective to the
>      default display. Available units are pixels, centimeters, inches,
>      millimeters and points

Yes, I'd found Tk.pixels.

> Having to write units always explicitly was just a pain. This way you
> can either write directly in pixels, or convert from another unit.

I guess it's a matter of taste; I always found it helpful that it
encouraged one to use screen-independent values like points instead of
pixels, and I didn't mind specifying the units.  Actually, since I
rarely specify raw pixel values in code, the conversion using 
one of the pixels functions is actually more annoying, since I have to
write, for instance, (pixels (`Pt 72)) instead of just (`Pt 72).

> There is a very small glitch: if your application is intended to run
> on several displays with different dpi's, you must use the
> Winfo.pixels or Winfo.fpixels functions.

That's a good point I hadn't thought about.

Anyway, thanks for the explanation.

(I found out it's easy enough to switch, btw, even though I don't
fully understand tkcompiler: just change the definitions of "option
Height" and "option Width" in Widgets.src from [_; int] to [_;units]
and change one place in ocamlbrowser, I think, and everything seems to
recompile and work ok.  I'll leave it alone, though, since it's the
intended behavior.)

-- 
T. Kurt Bond, tkb@tkb.mpl.com