NAME Tk::Win32RotLabel - A widget that allows rotated labels on the Win32 platform. SYNOPSIS use Tk::Win32RotLabel; $top->Win32RotLabel(-text => 'Anything you want', -angle => 45)->pack; DESCRIPTION This widget extends a simple Label to allow rotated text. It is Win32-specific since a solution already exists on *nix systems (search for Tk::CanvasRottext and Tk::RotX11Font by Slaven Rezic). Please see the the section on "BUGS" section below. PREREQUISITES This module requires the Win32::API module, which is available from your local mirror. WIDGET-SPECIFIC OPTIONS This widget accepts all options that a Tk::Label accepts, but adds one more option to specify the angle of the text. Some options are ignored. See the the section on "LIMITATIONS" section for more information. -angle This option specifies the angle (in degrees) of the text measured in a counter-clockwise fashion. Valid values are 0 to 360 inclusive. Values below 0 will be treated as 0, and values above 360 are treated as 360. Defaults to 0 degrees which means no rotation. LIMITATIONS I am no expert in Win32-specific graphics. This module was implemented by trial and error, and there is some behaviour that I do not understand fully. As a result, there are some limitations: Text Position The text will ALWAYS be displayed flushed along either the left edge or the right edge of label, depending on the angle. Label Size The size of the label will always be computed and forced onto the label such that it creates the smallest possible bounding box around the text. The combination of the above two limitations implies that the label will always be as small as possible, and the text centered in the label. Options such as *-padx|pady*, *-anchor*, *-justify*, etc, are ignored. But, options given to the layout manager (pack/place/grid/form) are NOT ignored, which can lead to non-intuitive results. For example, this: $top->Label(-text => 'test')->pack(qw/-fill x/); will center the text in the label. While this: $top->Win32RotLabel(-text => 'test')->pack(qw/-fill x/); will have the text flushed to the left. It is easy to rectify this problem though by placing the Win32RotLabel in a Frame: my $f = $top->Frame->pack(qw/-fill x/); $f->Win32RotLabel(-text => 'test')->pack; Important: Not all fonts support rotation. Please see the the section on "BUGS" section for more information. BUGS Through my trials I found out that not all fonts support rotation. It seems that only True-Type fonts support this. So, if you try to use a font and get weird results, try a different font. Times New Roman, the default, should work fine. If you set the size of your MainWindow, via a call to geometry() for example, and then create a Win32RotLabel widget as a child of your MainWindow, then the label will appear empty until you move or resize the MainWindow. As a workaround, either resize the MainWindow *after* creating the Win32RotLabel object, or create a Frame, and make it the parent of your Win32RotLabel object. Sometimes, when resizing the toplevel, the text might appear to flicker. That is normal. In some cases though, the text disappears. I do not understand why this happens. To fix this, you can simply minimize and re-maximize the window, or resize it again, and all should be fine. I wrote this, and tested it on two WindowsXP machines (with SP-1 and the latest security patches). It works. I did not test on any other platform, but I got reports that it fails on Win2k. I'm investigating. If you can comment on any of the bugs above, then I would be happy to hear from you (especially if you know how to fix things ;) INSTALLATION Either the usual: perl Makefile.PL make make install or just stick it somewhere in @INC where perl can find it. It's in pure Perl. AUTHOR Ala Qumsieh *aqumsieh@cpan.org* COPYRIGHTS Copyright (c) 2004 Ala Qumsieh. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.