sweetblood has asked for the wisdom of the Perl Monks concerning the following question:
Does anyone know if it is possible to create non-rectangular windows using TK(or anything else perly)? I've done some super searching and came up empty.
TIA
Re: Non-rectangular mainwindow
by dk (Chaplain) on Aug 25, 2003 at 08:48 UTC
|
Try Prima, it supports non-rectangular windows
- on Win32 natively, on X11 if you've shape extension compiled in the X server:
use Prima qw(Application);
my $icon = Prima::Image-> create(
width => 300,
height => 300,
);
$icon-> begin_paint;
$icon-> color( cl::Black);
$icon-> bar( 0, 0, 300, 300);
$icon-> color( cl::White);
$icon-> fillpoly([
5, 5,
250, 5,
5, 200,
100, 100,
5,5
]);
$icon-> end_paint;
Prima::Widget-> create(
shape => $icon,
size => [ 300, 300], # fixed size
onMouseDown => sub { $::application-> close }, # click to exit
);
run Prima;
| [reply] [d/l] |
|
++Cool beans -- I remember now, the Prima eyes example shows you this as well ;)
MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!" | I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README). | ** The third rule of perl club is a statement of fact: pod is sexy. |
| [reply] |
|
Thanks - I haven't used prima, barley heard of it infact, but I'll give it a go.
| [reply] |
Re: Non-rectangular mainwindow
by BrowserUk (Patriarch) on Aug 24, 2003 at 21:04 UTC
|
The way this is usually done is using transparent background. The window as managed by the system is still rectangular, but some parts of it (eg. the corners of the square for a round window (Shades of Jeremy:)) are specified as being transparent, so the user perceives a round window.
However, for this to work, the underlying windowing system has to support the transparent background concept. This didn't become available on Win32 until Win2K or later. I'm not sure about X and others, but I think the Mac had this ages since.
Then it's a case of does the windowing API (Tk etc.) you are using expose this. Often 'advanced features' of the underlying systems are not exposed by cross-platform toolkits unless that feature is available on all the supported platforms.
You have some reading to do I think:)
Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"When I'm working on a problem, I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong." -Richard Buckminster Fuller
If I understand your problem, I can solve it! Of course, the same can be said for you.
| [reply] |
|
Under Win32, no transparent background is needed (and no DirectX either), as the SetWindowRgn() call allows to specify a complex region as the window border. I can't find a good example to copy online, but it would be raw GDI calls and I'm not sure how to manage the region memory that gets owned by GDI after the call - I suppose one would have to keep the structure alive as long as the window handle is valid.
In principle, this should be possible from Perl, but it will be hard to find a toolkit that supports it natively. One could hack it, as long as one gets to the hWnd of the window. A problem with this approach is, that many windowing toolkits destroy and recreate windows at various stages, so the "funky shape" might get lost when hiding/reshowing the window or minimizing/restoring the window. Also, the window metrics will most likely become unusable.
perl -MHTTP::Daemon -MHTTP::Response -MLWP::Simple -e ' ; # The
$d = new HTTP::Daemon and fork and getprint $d->url and exit;#spider
($c = $d->accept())->get_request(); $c->send_response( new #in the
HTTP::Response(200,$_,$_,qq(Just another Perl hacker\n))); ' # web
| [reply] [d/l] |
|
| [reply] |
|
I run Win98SE and I have several programs that use unusually shaped windows. Might have to do with DirectX.
My code doesn't have bugs, it just develops random features.
Flame ~ Lead Programmer: GMS (DOWN) | GMS (DOWN)
| [reply] |
Re: Non-rectangular mainwindow
by mpd (Monk) on Aug 24, 2003 at 18:31 UTC
|
Tk doesn't have support for this natively, but I suppose you could write a custom widget. You'll likely need a more powerful GUI toolkit, however. What system are you running on? | [reply] |
Re: Non-rectangular mainwindow
by PodMaster (Abbot) on Aug 25, 2003 at 08:00 UTC
|
Can't really be done.
See perlTk Type Tutor - useful for learning a DVORAK keyboard layout for an example, uncomment "-background => undef" (kinda works on Win32 -- not very useful).
Practically no toolkit with perl bindings has the ability to do this nice.
With wxPerl you can write on the screen all you want, but you can't capture mouse clicks and such ...
I guess what really needs to happen is for someone to write it in C(++), and then create a perl binding for it
(that goes for Tk or any other toolkit).
Super searching is not the be'all'and'end'all of searching,
especially when you're digging for perlTk information ( http://google.com, http://perltk.org ).
MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!" | I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README). | ** The third rule of perl club is a statement of fact: pod is sexy. |
| [reply] |
Re: Non-rectangular mainwindow
by Anonymous Monk on Aug 26, 2003 at 21:28 UTC
|
On X11 it's possible to make Tk windows shapy with the help
of X11::Protocol. Look at the earthclock programm at
http://ptktools.sourceforge.net/
| [reply] |
Re: Non-rectangular mainwindow
by didier (Vicar) on Aug 28, 2003 at 10:36 UTC
|
As proof of concept this awful following script
which map a flower with transparency (if you wait a bit).
For sure if you only want no-rectangular corners, you just need
work out that.
As each pixel is hard coded, the script is very long.
Hope this help.
Update
For Perlmonks HD space consideration I link this out:
Transparency
| [reply] |
|
|