# Copyright 2011, 2012, 2013, 2014, 2017 Kevin Ryde

# This file is part of X11-Protocol-Other.
#
# X11-Protocol-Other is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 3, or (at your option) any later
# version.
#
# X11-Protocol-Other is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with X11-Protocol-Other.  If not, see <http://www.gnu.org/licenses/>.

BEGIN { require 5 }
package X11::AtomConstants;
use strict;
use Exporter;
use vars '$VERSION', '@ISA', '@EXPORT_OK', '%EXPORT_TAGS';

$VERSION = 31;
@ISA = ('Exporter');
%EXPORT_TAGS = (all => \@EXPORT_OK);

# List generated by
# (shell-command "perl -n -e '/define XA_([^ ]*).*?([0-9]+)/ and print \"      $1\n\"' </usr/include/X11/Xatom.h" 'insert)

@EXPORT_OK =
  (qw(
      PRIMARY
      SECONDARY
      ARC
      ATOM
      BITMAP
      CARDINAL
      COLORMAP
      CURSOR
      CUT_BUFFER0
      CUT_BUFFER1
      CUT_BUFFER2
      CUT_BUFFER3
      CUT_BUFFER4
      CUT_BUFFER5
      CUT_BUFFER6
      CUT_BUFFER7
      DRAWABLE
      FONT
      INTEGER
      PIXMAP
      POINT
      RECTANGLE
      RESOURCE_MANAGER
      RGB_COLOR_MAP
      RGB_BEST_MAP
      RGB_BLUE_MAP
      RGB_DEFAULT_MAP
      RGB_GRAY_MAP
      RGB_GREEN_MAP
      RGB_RED_MAP
      STRING
      VISUALID
      WINDOW
      WM_COMMAND
      WM_HINTS
      WM_CLIENT_MACHINE
      WM_ICON_NAME
      WM_ICON_SIZE
      WM_NAME
      WM_NORMAL_HINTS
      WM_SIZE_HINTS
      WM_ZOOM_HINTS
      MIN_SPACE
      NORM_SPACE
      MAX_SPACE
      END_SPACE
      SUPERSCRIPT_X
      SUPERSCRIPT_Y
      SUBSCRIPT_X
      SUBSCRIPT_Y
      UNDERLINE_POSITION
      UNDERLINE_THICKNESS
      STRIKEOUT_ASCENT
      STRIKEOUT_DESCENT
      ITALIC_ANGLE
      X_HEIGHT
      QUAD_WIDTH
      WEIGHT
      POINT_SIZE
      RESOLUTION
      COPYRIGHT
      NOTICE
      FONT_NAME
      FAMILY_NAME
      FULL_NAME
      CAP_HEIGHT
      WM_CLASS
      WM_TRANSIENT_FOR
      LAST_PREDEFINED
    ));


# List generated by
# (shell-command "perl -n -e '/define XA_([^ ]*).*?([0-9]+)/ and print \"use constant $1 => $2;\n\"' </usr/include/X11/Xatom.h" 'insert)

use constant PRIMARY => 1;
use constant SECONDARY => 2;
use constant ARC => 3;
use constant ATOM => 4;
use constant BITMAP => 5;
use constant CARDINAL => 6;
use constant COLORMAP => 7;
use constant CURSOR => 8;
use constant CUT_BUFFER0 => 9;
use constant CUT_BUFFER1 => 10;
use constant CUT_BUFFER2 => 11;
use constant CUT_BUFFER3 => 12;
use constant CUT_BUFFER4 => 13;
use constant CUT_BUFFER5 => 14;
use constant CUT_BUFFER6 => 15;
use constant CUT_BUFFER7 => 16;
use constant DRAWABLE => 17;
use constant FONT => 18;
use constant INTEGER => 19;
use constant PIXMAP => 20;
use constant POINT => 21;
use constant RECTANGLE => 22;
use constant RESOURCE_MANAGER => 23;
use constant RGB_COLOR_MAP => 24;
use constant RGB_BEST_MAP => 25;
use constant RGB_BLUE_MAP => 26;
use constant RGB_DEFAULT_MAP => 27;
use constant RGB_GRAY_MAP => 28;
use constant RGB_GREEN_MAP => 29;
use constant RGB_RED_MAP => 30;
use constant STRING => 31;
use constant VISUALID => 32;
use constant WINDOW => 33;
use constant WM_COMMAND => 34;
use constant WM_HINTS => 35;
use constant WM_CLIENT_MACHINE => 36;
use constant WM_ICON_NAME => 37;
use constant WM_ICON_SIZE => 38;
use constant WM_NAME => 39;
use constant WM_NORMAL_HINTS => 40;
use constant WM_SIZE_HINTS => 41;
use constant WM_ZOOM_HINTS => 42;
use constant MIN_SPACE => 43;
use constant NORM_SPACE => 44;
use constant MAX_SPACE => 45;
use constant END_SPACE => 46;
use constant SUPERSCRIPT_X => 47;
use constant SUPERSCRIPT_Y => 48;
use constant SUBSCRIPT_X => 49;
use constant SUBSCRIPT_Y => 50;
use constant UNDERLINE_POSITION => 51;
use constant UNDERLINE_THICKNESS => 52;
use constant STRIKEOUT_ASCENT => 53;
use constant STRIKEOUT_DESCENT => 54;
use constant ITALIC_ANGLE => 55;
use constant X_HEIGHT => 56;
use constant QUAD_WIDTH => 57;
use constant WEIGHT => 58;
use constant POINT_SIZE => 59;
use constant RESOLUTION => 60;
use constant COPYRIGHT => 61;
use constant NOTICE => 62;
use constant FONT_NAME => 63;
use constant FAMILY_NAME => 64;
use constant FULL_NAME => 65;
use constant CAP_HEIGHT => 66;
use constant WM_CLASS => 67;
use constant WM_TRANSIENT_FOR => 68;
use constant LAST_PREDEFINED => 68;

1;
__END__

=for stopwords X11-Protocol-Other Ryde pre-defined Xlib PIXMAP

=head1 NAME

X11::AtomConstants -- predefined X11 atoms

=for test_synopsis my ($X, $window)

=head1 SYNOPSIS

 use X11::AtomConstants;
 $X->ChangeProperty($window,
                    X11::AtomConstants::WM_NAME,  # property
                    X11::AtomConstants::PIXMAP,   # type
                    8,                            # format
                    'Replace',
                    'My Window Title');

=head1 DESCRIPTION

This is the X11 pre-defined atoms as Perl constants.  For example C<PIXMAP>
is 20, the PIXMAP atom.

    my $atom_id = X11::AtomConstants::PIXMAP;  # $atom_id is 20
    my $name = $X->GetAtomName($atom_id);      # $name is "PIXMAP"

The C<LAST_PREDEFINED> constant is not an atom as such, but the last of the
predefined values, which happens to be C<WM_TRANSIENT_FOR>.

=cut

# List generated by
# (shell-command "perl -n -e '/define XA_([^ ]*).*?([0-9]+)/ and printf \"    %-20s  %2d\n\", $1, $2' </usr/include/X11/Xatom.h" 'insert)

=pod

    Constant             Value

    PRIMARY                1
    SECONDARY              2
    ARC                    3
    ATOM                   4
    BITMAP                 5
    CARDINAL               6
    COLORMAP               7
    CURSOR                 8
    CUT_BUFFER0            9
    CUT_BUFFER1           10
    CUT_BUFFER2           11
    CUT_BUFFER3           12
    CUT_BUFFER4           13
    CUT_BUFFER5           14
    CUT_BUFFER6           15
    CUT_BUFFER7           16
    DRAWABLE              17
    FONT                  18
    INTEGER               19
    PIXMAP                20
    POINT                 21
    RECTANGLE             22
    RESOURCE_MANAGER      23
    RGB_COLOR_MAP         24
    RGB_BEST_MAP          25
    RGB_BLUE_MAP          26
    RGB_DEFAULT_MAP       27
    RGB_GRAY_MAP          28
    RGB_GREEN_MAP         29
    RGB_RED_MAP           30
    STRING                31
    VISUALID              32
    WINDOW                33
    WM_COMMAND            34
    WM_HINTS              35
    WM_CLIENT_MACHINE     36
    WM_ICON_NAME          37
    WM_ICON_SIZE          38
    WM_NAME               39
    WM_NORMAL_HINTS       40
    WM_SIZE_HINTS         41
    WM_ZOOM_HINTS         42
    MIN_SPACE             43
    NORM_SPACE            44
    MAX_SPACE             45
    END_SPACE             46
    SUPERSCRIPT_X         47
    SUPERSCRIPT_Y         48
    SUBSCRIPT_X           49
    SUBSCRIPT_Y           50
    UNDERLINE_POSITION    51
    UNDERLINE_THICKNESS   52
    STRIKEOUT_ASCENT      53
    STRIKEOUT_DESCENT     54
    ITALIC_ANGLE          55
    X_HEIGHT              56
    QUAD_WIDTH            57
    WEIGHT                58
    POINT_SIZE            59
    RESOLUTION            60
    COPYRIGHT             61
    NOTICE                62
    FONT_NAME             63
    FAMILY_NAME           64
    FULL_NAME             65
    CAP_HEIGHT            66
    WM_CLASS              67
    WM_TRANSIENT_FOR      68

    LAST_PREDEFINED       68

=head1 EXPORTS

Nothing is exported by default, but the constants can be requested in usual
C<Exporter> style,

    use X11::AtomConstants 'PIXMAP';
    blah (atom => PIXMAP);

The C<:all> tag imports everything,

    use X11::AtomConstants ':all';
    blah (atom1 => POINT,
          atom2 => RECTANGLE);

Many atoms like C<STRING> or C<WEIGHT> have rather generic names and
importing them may be undesirable.  They can always be used with the full
package name,

    use X11::AtomConstants;
    blah (atom => X11::AtomConstants::PIXMAP);

=head1 SEE ALSO

L<X11::CursorFont>,
L<X11::Keysyms>,
L<X11::Protocol>,
L<X11::Protocol::Other>,
L<X11::Protocol::WM>

I<X Window System Protocol> specification (values in S<Appendix B>),
F</usr/share/X11/doc/hardcopy/XProtocol/proto.PS.gz>

F</usr/include/X11/Xatom.h>

=head1 HOME PAGE

L<http://user42.tuxfamily.org/x11-protocol-other/index.html>

=head1 LICENSE

Copyright 2011, 2012, 2013, 2014, 2017 Kevin Ryde

X11-Protocol-Other is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any later
version.

X11-Protocol-Other is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
more details.

You should have received a copy of the GNU General Public License along with
X11-Protocol-Other.  If not, see <http://www.gnu.org/licenses/>.

=cut
