package Prima::sys::XQuartz;
use strict;
use warnings;
sub get_fullscreen_image
{
my $self = shift;
goto FALLBACK unless $^O eq 'darwin';
my $real_screen_height = $self->sys_action("xquartz.screen_height");
goto FALLBACK unless $real_screen_height;
my $grab_mode = $self->sys_action("xquartz.grab_mode");
$self->sys_action("xquartz.grab_mode native");
goto FALLBACK unless $self->sys_action("xquartz.grab_mode") eq 'native';
my $diff = $real_screen_height - $self->height;
my $menubar = $self->get_image(0,$self->height - $diff,$self->width,$diff);
$self->sys_action("xquartz.grab_mode $grab_mode");
goto FALLBACK unless $menubar;
my $fullscreen = $self->get_image(0,0,$self->size);
$fullscreen->scaling(ist::None);
$fullscreen->height( $real_screen_height );
$fullscreen->put_image( 0, $self-> height, $menubar );
return $fullscreen;
FALLBACK:
return $self->get_image(0,0,$self->size);
}
1;
=head1 NAME
Prima::sys::XQuartz - MacOSX/XQuartz facilities
=head1 DESCRIPTION
XQuartz emulates X environment with certain limits, namely it cannot grab bits
from the screen, and it hides top-level menu from screen coordinates accessible
for X clients. For example, a Mac with 1024x768 resolution will only report
f.ex. 1024x746 size to Prima. If Prima is compiled with Cocoa library,
C<get_fullscreen_image> method circumvents these limitations and returns shot
of the whole screen.
=head1 AUTHOR
Dmitry Karasik, E<lt>dmitry@karasik.eu.orgE<gt>.
=head1 SEE ALSO
L<Prima::Dialog::FileDialog>
=cut