Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Non-rectangular mainwindow

by sweetblood (Prior)
on Aug 24, 2003 at 17:45 UTC ( [id://286227]=perlquestion: print w/replies, xml ) Need Help??

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

Replies are listed 'Best First'.
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;
      ++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.

      Thanks - I haven't used prima, barley heard of it infact, but I'll give it a go.
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.

      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
        Here is a pretty cool example by the cult of the dead cow. I can't find it anywhere anymore, it's a good thing I saved it. It creates a cowskull shaped window (i'll see about a screenshot).

        update: Screen shot here. It's an Alt+PrtScrn of me resizing the window.

        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.

      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)

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?
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.

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/
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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://286227]
Approved by ybiC
Front-paged by broquaint
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (2)
As of 2024-04-25 06:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found