first commit

This commit is contained in:
Florian Schmitt 2024-10-08 15:38:46 +03:00
commit 2e5df21095
2308 changed files with 453496 additions and 0 deletions

View file

@ -0,0 +1,37 @@
# python -m pygame.docs
import os
import webbrowser
from urllib.parse import quote, urlunparse
def _iterpath(path):
path, last = os.path.split(path)
if last:
yield from _iterpath(path)
yield last
# for test suite to confirm pygame built with local docs
def has_local_docs():
pkg_dir = os.path.dirname(os.path.abspath(__file__))
main_page = os.path.join(pkg_dir, "generated", "index.html")
return os.path.exists(main_page)
def open_docs():
pkg_dir = os.path.dirname(os.path.abspath(__file__))
main_page = os.path.join(pkg_dir, "generated", "index.html")
if os.path.exists(main_page):
url_path = quote("/".join(_iterpath(main_page)))
drive, rest = os.path.splitdrive(__file__)
if drive:
url_path = f"{drive}/{url_path}"
url = urlunparse(("file", "", url_path, "", "", ""))
else:
url = "https://www.pygame.org/docs/"
webbrowser.open(url)
if __name__ == "__main__":
open_docs()

View file

@ -0,0 +1,504 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts
as the successor of the GNU Library Public License, version 2, hence
the version number 2.1.]
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it. You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use,
not price. Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights. These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you. You must make sure that they, too, receive or can get the source
code. If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that
there is no warranty for the free library. Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
Finally, software patents pose a constant threat to the existence of
any free program. We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder. Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License. This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License. We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library. The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom. The Lesser General
Public License permits more lax criteria for linking other code with
the library.
We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License. It also provides other free software developers Less
of an advantage over competing non-free programs. These disadvantages
are the reason we use the ordinary General Public License for many
libraries. However, the Lesser license provides advantages in certain
special circumstances.
For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard. To achieve this, non-free programs must be
allowed to use the library. A more frequent case is that a free
library does the same job as widely used non-free libraries. In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software. For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and
modification follow. Pay close attention to the difference between a
"work based on the library" and a "work that uses the library". The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work
which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for
making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it). Whether that is true depends on what the Library does
and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices
stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no
charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a
table of data to be supplied by an application program that uses
the facility, other than as an argument passed when the facility
is invoked, then you must make a good faith effort to ensure that,
in the event an application does not supply such function or
table, the facility still operates, and performs whatever part of
its purpose remains meaningful.
(For example, a function in a library to compute square roots has
a purpose that is entirely well-defined independent of the
application. Therefore, Subsection 2d requires that any
application-supplied function or table used by this function must
be optional: if the application does not supply it, the square
root function must still compute square roots.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.) Do not make any other change in
these notices.
Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library". Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library". The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License. Also, you must do one
of these things:
a) Accompany the work with the complete corresponding
machine-readable source code for the Library including whatever
changes were used in the work (which must be distributed under
Sections 1 and 2 above); and, if the work is an executable linked
with the Library, with the complete machine-readable "work that
uses the Library", as object code and/or source code, so that the
user can modify the Library and then relink to produce a modified
executable containing the modified Library. (It is understood
that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application
to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (1) uses at run time a
copy of the library already present on the user's computer system,
rather than copying library functions into the executable, and (2)
will operate properly with a modified version of the library, if
the user installs one, as long as the modified version is
interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at
least three years, to give the same user the materials
specified in Subsection 6a, above, for a charge no more
than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy
from a designated place, offer equivalent access to copy the above
specified materials from the same place.
e) Verify that the user has already received a copy of these
materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work
based on the Library, uncombined with any other library
facilities. This must be distributed under the terms of the
Sections above.
b) Give prominent notice with the combined library of the fact
that part of it is a work based on the Library, and explaining
where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License. Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License. However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Library or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded. In such case, this License incorporates the limitation as if
written in the body of this License.
13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,25 @@
pygame C API
============
.. toctree::
:maxdepth: 1
:glob:
c_api/slots.rst
c_api/base.rst
c_api/bufferproxy.rst
c_api/color.rst
c_api/display.rst
c_api/event.rst
c_api/freetype.rst
c_api/mixer.rst
c_api/rect.rst
c_api/rwobject.rst
c_api/surface.rst
c_api/surflock.rst
c_api/version.rst
src_c/include/ contains header files for applications
that use the pygame C API, while src_c/ contains
headers used by pygame internally.

View file

@ -0,0 +1,17 @@
File Path Function Arguments
============================
A pygame function or method which takes a file path argument will accept
either a Unicode or a byte (8-bit or ASCII character) string.
Unicode strings are translated to Python's default filesystem encoding,
as returned by sys.getfilesystemencoding(). A Unicode code point
above U+FFFF (``\uFFFF``) can be coded directly with a 32-bit escape sequences
(``\Uxxxxxxxx``), even for Python interpreters built with an UCS-2
(16-bit character) Unicode type. Byte strings are passed
to the operating system unchanged.
Null characters (``\x00``) are not permitted in the path, raising an exception.
An exception is also raised if an Unicode file path cannot be encoded.
How UTF-16 surrogate codes are handled is Python-interpreter-dependent.
Use UTF-32 code points and 32-bit escape sequences instead.
The exception types are function-dependent.

View file

@ -0,0 +1,213 @@
Pygame Front Page
=================
.. toctree::
:maxdepth: 2
:glob:
:hidden:
ref/*
tut/*
tut/en/**/*
tut/ko/**/*
c_api
filepaths
logos
Quick start
-----------
Welcome to pygame! Once you've got pygame installed (:code:`pip install pygame` or
:code:`pip3 install pygame` for most people), the next question is how to get a game
loop running. Pygame, unlike some other libraries, gives you full control of program
execution. That freedom means it is easy to mess up in your initial steps.
Here is a good example of a basic setup (opens the window, updates the screen, and handles events)--
.. literalinclude:: ref/code_examples/base_script.py
Here is a slightly more fleshed out example, which shows you how to move something
(a circle in this case) around on screen--
.. literalinclude:: ref/code_examples/base_script_example.py
For more in depth reference, check out the :ref:`tutorials-reference-label`
section below, check out a video tutorial (`I'm a fan of this one
<https://www.youtube.com/watch?v=AY9MnQ4x3zk>`_), or reference the API
documentation by module.
Documents
---------
`Readme`_
Basic information about pygame: what it is, who is involved, and where to find it.
`Install`_
Steps needed to compile pygame on several platforms.
Also help on finding and installing prebuilt binaries for your system.
:doc:`filepaths`
How pygame handles file system paths.
:doc:`Pygame Logos <logos>`
The logos of Pygame in different resolutions.
`LGPL License`_
This is the license pygame is distributed under.
It provides for pygame to be distributed with open source and commercial software.
Generally, if pygame is not changed, it can be used with any type of program.
.. _tutorials-reference-label:
Tutorials
---------
:doc:`Introduction to Pygame <tut/PygameIntro>`
An introduction to the basics of pygame.
This is written for users of Python and appeared in volume two of the Py magazine.
:doc:`Import and Initialize <tut/ImportInit>`
The beginning steps on importing and initializing pygame.
The pygame package is made of several modules.
Some modules are not included on all platforms.
:doc:`How do I move an Image? <tut/MoveIt>`
A basic tutorial that covers the concepts behind 2D computer animation.
Information about drawing and clearing objects to make them appear animated.
:doc:`Chimp Tutorial, Line by Line <tut/ChimpLineByLine>`
The pygame examples include a simple program with an interactive fist and a chimpanzee.
This was inspired by the annoying flash banner of the early 2000s.
This tutorial examines every line of code used in the example.
:doc:`Sprite Module Introduction <tut/SpriteIntro>`
Pygame includes a higher level sprite module to help organize games.
The sprite module includes several classes that help manage details found in almost all games types.
The Sprite classes are a bit more advanced than the regular pygame modules,
and need more understanding to be properly used.
:doc:`Surfarray Introduction <tut/SurfarrayIntro>`
Pygame used the NumPy python module to allow efficient per pixel effects on images.
Using the surface arrays is an advanced feature that allows custom effects and filters.
This also examines some of the simple effects from the pygame example, arraydemo.py.
:doc:`Camera Module Introduction <tut/CameraIntro>`
Pygame, as of 1.9, has a camera module that allows you to capture images,
watch live streams, and do some basic computer vision.
This tutorial covers those use cases.
:doc:`Newbie Guide <tut/newbieguide>`
A list of thirteen helpful tips for people to get comfortable using pygame.
:doc:`Making Games Tutorial <tut/MakeGames>`
A large tutorial that covers the bigger topics needed to create an entire game.
:doc:`Display Modes <tut/DisplayModes>`
Getting a display surface for the screen.
:doc:`한국어 튜토리얼 (Korean Tutorial) <tut/ko/빨간블록 검은블록/개요>`
빨간블록 검은블록
Reference
---------
:ref:`genindex`
A list of all functions, classes, and methods in the pygame package.
:doc:`ref/bufferproxy`
An array protocol view of surface pixels
:doc:`ref/color`
Color representation.
:doc:`ref/cursors`
Loading and compiling cursor images.
:doc:`ref/display`
Configure the display surface.
:doc:`ref/draw`
Drawing simple shapes like lines and ellipses to surfaces.
:doc:`ref/event`
Manage the incoming events from various input devices and the windowing platform.
:doc:`ref/examples`
Various programs demonstrating the use of individual pygame modules.
:doc:`ref/font`
Loading and rendering TrueType fonts.
:doc:`ref/freetype`
Enhanced pygame module for loading and rendering font faces.
:doc:`ref/gfxdraw`
Anti-aliasing draw functions.
:doc:`ref/image`
Loading, saving, and transferring of surfaces.
:doc:`ref/joystick`
Manage the joystick devices.
:doc:`ref/key`
Manage the keyboard device.
:doc:`ref/locals`
Pygame constants.
:doc:`ref/mixer`
Load and play sounds
:doc:`ref/mouse`
Manage the mouse device and display.
:doc:`ref/music`
Play streaming music tracks.
:doc:`ref/pygame`
Top level functions to manage pygame.
:doc:`ref/pixelarray`
Manipulate image pixel data.
:doc:`ref/rect`
Flexible container for a rectangle.
:doc:`ref/scrap`
Native clipboard access.
:doc:`ref/sndarray`
Manipulate sound sample data.
:doc:`ref/sprite`
Higher level objects to represent game images.
:doc:`ref/surface`
Objects for images and the screen.
:doc:`ref/surfarray`
Manipulate image pixel data.
:doc:`ref/tests`
Test pygame.
:doc:`ref/time`
Manage timing and framerate.
:doc:`ref/transform`
Resize and move images.
:doc:`pygame C API <c_api>`
The C api shared amongst pygame extension modules.
:ref:`search`
Search pygame documents by keyword.
.. _Readme: ../wiki/about
.. _Install: ../wiki/GettingStarted#Pygame%20Installation
.. _LGPL License: LGPL.txt

View file

@ -0,0 +1,47 @@
*************************************************
Pygame Logos Page
*************************************************
Pygame Logos
============
These logos are available for use in your own game projects.
Please put them up wherever you see fit. The logo was created
by TheCorruptor on July 29, 2001 and upscaled by Mega_JC on
August 29, 2021.
.. container:: fullwidth
.. image:: _static/pygame_logo.png
| `pygame_logo.svg <_static/pygame_logo.svg>`_
| `pygame_logo.png <_static/pygame_logo.png>`_ - 1561 x 438
.. image:: _static/pygame_lofi.png
| `pygame_lofi.svg <_static/pygame_lofi.svg>`_
| `pygame_lofi.png <_static/pygame_lofi.png>`_ - 1561 x 438
.. image:: _static/pygame_powered.png
| `pygame_powered.svg <_static/pygame_powered.svg>`_
| `pygame_powered.png <_static/pygame_powered.png>`_ - 1617 x 640
.. image:: _static/pygame_tiny.png
| `pygame_tiny.png <_static/pygame_tiny.png>`_ - 214 x 60
.. image:: _static/pygame_powered_lowres.png
| `pygame_powered_lowres.png <_static/pygame_powered_lowres.png>`_ - 101 x 40
There is a higher resolution layered photoshop image
available `here <https://www.pygame.org/ftp/pygame_logo.psd>`_. *(1.3 MB)*
Legacy logos
------------
.. container:: fullwidth
`legacy_logos.zip <_static/legacy_logos.zip>`_ - 50.1 KB

View file

@ -0,0 +1,113 @@
.. include:: common.txt
.. default-domain:: py
:class:`pygame.BufferProxy`
===========================
.. currentmodule:: pygame
.. class:: BufferProxy
| :sl:`pygame object to export a surface buffer through an array protocol`
| :sg:`BufferProxy(<parent>) -> BufferProxy`
:class:`BufferProxy` is a pygame support type, designed as the return value
of the :meth:`Surface.get_buffer` and :meth:`Surface.get_view` methods.
For all Python versions a :class:`BufferProxy` object exports a C struct
and Python level array interface on behalf of its parent object's buffer.
A new buffer interface is also exported.
In pygame, :class:`BufferProxy` is key to implementing the
:mod:`pygame.surfarray` module.
:class:`BufferProxy` instances can be created directly from Python code,
either for a parent that exports an interface, or from a Python ``dict``
describing an object's buffer layout. The dict entries are based on the
Python level array interface mapping. The following keys are recognized:
``"shape"`` : tuple
The length of each array dimension as a tuple of integers. The
length of the tuple is the number of dimensions in the array.
``"typestr"`` : string
The array element type as a length 3 string. The first character
gives byteorder, '<' for little-endian, '>' for big-endian, and
'\|' for not applicable. The second character is the element type,
'i' for signed integer, 'u' for unsigned integer, 'f' for floating
point, and 'V' for an chunk of bytes. The third character gives the
bytesize of the element, from '1' to '9' bytes. So, for example,
"<u4" is an unsigned 4 byte little-endian integer, such as a
32 bit pixel on a PC, while "\|V3" would represent a 24 bit pixel,
which has no integer equivalent.
``"data"`` : tuple
The physical buffer start address and a read-only flag as a length
2 tuple. The address is an integer value, while the read-only flag
is a bool—``False`` for writable, ``True`` for read-only.
``"strides"`` : tuple : (optional)
Array stride information as a tuple of integers. It is required
only of non C-contiguous arrays. The tuple length must match
that of ``"shape"``.
``"parent"`` : object : (optional)
The exporting object. It can be used to keep the parent object
alive while its buffer is visible.
``"before"`` : callable : (optional)
Callback invoked when the :class:`BufferProxy` instance
exports the buffer. The callback is given one argument, the
``"parent"`` object if given, otherwise ``None``.
The callback is useful for setting a lock on the parent.
``"after"`` : callable : (optional)
Callback invoked when an exported buffer is released.
The callback is passed on argument, the ``"parent"`` object if given,
otherwise None. The callback is useful for releasing a lock on the
parent.
The BufferProxy class supports subclassing, instance variables, and weak
references.
.. versionadded:: 1.8.0
.. versionextended:: 1.9.2
.. attribute:: parent
| :sl:`Return wrapped exporting object.`
| :sg:`parent -> Surface`
| :sg:`parent -> <parent>`
The :class:`Surface` which returned the :class:`BufferProxy` object or
the object passed to a :class:`BufferProxy` call.
.. attribute:: length
| :sl:`The size, in bytes, of the exported buffer.`
| :sg:`length -> int`
The number of valid bytes of data exported. For discontinuous data,
that is data which is not a single block of memory, the bytes within
the gaps are excluded from the count. This property is equivalent to
the ``Py_buffer`` C struct ``len`` field.
.. attribute:: raw
| :sl:`A copy of the exported buffer as a single block of bytes.`
| :sg:`raw -> bytes`
The buffer data as a ``str``/``bytes`` object.
Any gaps in the exported data are removed.
.. method:: write
| :sl:`Write raw bytes to object buffer.`
| :sg:`write(buffer, offset=0)`
Overwrite bytes in the parent object's data. The data must be C or F
contiguous, otherwise a ValueError is raised. Argument `buffer` is a
``str``/``bytes`` object. An optional offset gives a
start position, in bytes, within the buffer where overwriting begins.
If the offset is negative or greater that or equal to the buffer proxy's
:attr:`length` value, an ``IndexException`` is raised.
If ``len(buffer) > proxy.length + offset``, a ``ValueError`` is raised.

View file

@ -0,0 +1,250 @@
.. include:: common.txt
:mod:`pygame.camera`
====================
.. module:: pygame.camera
:synopsis: pygame module for camera use
| :sl:`pygame module for camera use`
.. note::
Use import pygame.camera before using this module.
Pygame currently supports Linux (V4L2) and Windows (MSMF) cameras natively,
with wider platform support available via an integrated OpenCV backend.
.. versionadded:: 2.0.2 Windows native camera support
.. versionadded:: 2.0.3 New OpenCV backends
EXPERIMENTAL!: This API may change or disappear in later pygame releases. If
you use this, your code will very likely break with the next pygame release.
The Bayer to ``RGB`` function is based on:
::
Sonix SN9C101 based webcam basic I/F routines
Copyright (C) 2004 Takafumi Mizuno <taka-qce@ls-a.jp>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
New in pygame 1.9.0.
.. function:: init
| :sl:`Module init`
| :sg:`init(backend = None) -> None`
This function starts up the camera module, choosing the best webcam backend
it can find for your system. This is not guaranteed to succeed, and may even
attempt to import third party modules, like `OpenCV`. If you want to
override its backend choice, you can call pass the name of the backend you
want into this function. More about backends in
:func:`get_backends()`.
.. versionchanged:: 2.0.3 Option to explicitly select backend
.. ## pygame.camera.init ##
.. function:: get_backends
| :sl:`Get the backends supported on this system`
| :sg:`get_backends() -> [str]`
This function returns every backend it thinks has a possibility of working
on your system, in order of priority.
pygame.camera Backends:
::
Backend OS Description
---------------------------------------------------------------------------------
_camera (MSMF) Windows Builtin, works on Windows 8+ Python3
_camera (V4L2) Linux Builtin
OpenCV Any Uses `opencv-python` module, can't enumerate cameras
OpenCV-Mac Mac Same as OpenCV, but has camera enumeration
VideoCapture Windows Uses abandoned `VideoCapture` module, can't enumerate
cameras, may be removed in the future
There are two main differences among backends.
The _camera backends are built in to pygame itself, and require no third
party imports. All the other backends do. For the OpenCV and VideoCapture
backends, those modules need to be installed on your system.
The other big difference is "camera enumeration." Some backends don't have
a way to list out camera names, or even the number of cameras on the
system. In these cases, :func:`list_cameras()` will return
something like ``[0]``. If you know you have multiple cameras on the
system, these backend ports will pass through a "camera index number"
through if you use that as the ``device`` parameter.
.. versionadded:: 2.0.3
.. ## pygame.camera.get_backends ##
.. function:: colorspace
| :sl:`Surface colorspace conversion`
| :sg:`colorspace(Surface, format, DestSurface = None) -> Surface`
Allows for conversion from "RGB" to a destination colorspace of "HSV" or
"YUV". The source and destination surfaces must be the same size and pixel
depth. This is useful for computer vision on devices with limited processing
power. Capture as small of an image as possible, ``transform.scale()`` it
even smaller, and then convert the colorspace to ``YUV`` or ``HSV`` before
doing any processing on it.
.. ## pygame.camera.colorspace ##
.. function:: list_cameras
| :sl:`returns a list of available cameras`
| :sg:`list_cameras() -> [cameras]`
Checks the computer for available cameras and returns a list of strings of
camera names, ready to be fed into :class:`pygame.camera.Camera`.
If the camera backend doesn't support webcam enumeration, this will return
something like ``[0]``. See :func:`get_backends()` for much more
information.
.. ## pygame.camera.list_cameras ##
.. class:: Camera
| :sl:`load a camera`
| :sg:`Camera(device, (width, height), format) -> Camera`
Loads a camera. On Linux, the device is typically something like
"/dev/video0". Default width and height are 640 by 480.
Format is the desired colorspace of the output.
This is useful for computer vision purposes. The default is
``RGB``. The following are supported:
* ``RGB`` - Red, Green, Blue
* ``YUV`` - Luma, Blue Chrominance, Red Chrominance
* ``HSV`` - Hue, Saturation, Value
.. method:: start
| :sl:`opens, initializes, and starts capturing`
| :sg:`start() -> None`
Opens the camera device, attempts to initialize it, and begins recording
images to a buffer. The camera must be started before any of the below
functions can be used.
.. ## Camera.start ##
.. method:: stop
| :sl:`stops, uninitializes, and closes the camera`
| :sg:`stop() -> None`
Stops recording, uninitializes the camera, and closes it. Once a camera
is stopped, the below functions cannot be used until it is started again.
.. ## Camera.stop ##
.. method:: get_controls
| :sl:`gets current values of user controls`
| :sg:`get_controls() -> (hflip = bool, vflip = bool, brightness)`
If the camera supports it, get_controls will return the current settings
for horizontal and vertical image flip as bools and brightness as an int.
If unsupported, it will return the default values of (0, 0, 0). Note that
the return values here may be different than those returned by
set_controls, though these are more likely to be correct.
.. ## Camera.get_controls ##
.. method:: set_controls
| :sl:`changes camera settings if supported by the camera`
| :sg:`set_controls(hflip = bool, vflip = bool, brightness) -> (hflip = bool, vflip = bool, brightness)`
Allows you to change camera settings if the camera supports it. The
return values will be the input values if the camera claims it succeeded
or the values previously in use if not. Each argument is optional, and
the desired one can be chosen by supplying the keyword, like hflip. Note
that the actual settings being used by the camera may not be the same as
those returned by set_controls. On Windows, :code:`hflip` and :code:`vflip` are
implemented by pygame, not by the Camera, so they should always work, but
:code:`brightness` is unsupported.
.. ## Camera.set_controls ##
.. method:: get_size
| :sl:`returns the dimensions of the images being recorded`
| :sg:`get_size() -> (width, height)`
Returns the current dimensions of the images being captured by the
camera. This will return the actual size, which may be different than the
one specified during initialization if the camera did not support that
size.
.. ## Camera.get_size ##
.. method:: query_image
| :sl:`checks if a frame is ready`
| :sg:`query_image() -> bool`
If an image is ready to get, it returns true. Otherwise it returns false.
Note that some webcams will always return False and will only queue a
frame when called with a blocking function like :func:`get_image()`.
On Windows (MSMF), and the OpenCV backends, :func:`query_image()`
should be reliable, though. This is useful to separate the framerate of
the game from that of the camera without having to use threading.
.. ## Camera.query_image ##
.. method:: get_image
| :sl:`captures an image as a Surface`
| :sg:`get_image(Surface = None) -> Surface`
Pulls an image off of the buffer as an ``RGB`` Surface. It can optionally
reuse an existing Surface to save time. The bit-depth of the surface is
24 bits on Linux, 32 bits on Windows, or the same as the optionally
supplied Surface.
.. ## Camera.get_image ##
.. method:: get_raw
| :sl:`returns an unmodified image as bytes`
| :sg:`get_raw() -> bytes`
Gets an image from a camera as a string in the native pixelformat of the
camera. Useful for integration with other libraries. This returns a
bytes object
.. ## Camera.get_raw ##
.. ## pygame.camera.Camera ##
.. ## pygame.camera ##

View file

@ -0,0 +1,310 @@
.. include:: common.txt
:mod:`pygame.cdrom`
===================
.. module:: pygame.cdrom
:synopsis: pygame module for audio cdrom control
| :sl:`pygame module for audio cdrom control`
.. warning::
This module is non functional in pygame 2.0 and above, unless you have manually compiled pygame with SDL1.
This module will not be supported in the future.
One alternative for python cdrom functionality is `pycdio <https://pypi.org/project/pycdio/>`_.
The cdrom module manages the ``CD`` and ``DVD`` drives on a computer. It can
also control the playback of audio CDs. This module needs to be initialized
before it can do anything. Each ``CD`` object you create represents a cdrom
drive and must also be initialized individually before it can do most things.
.. function:: init
| :sl:`initialize the cdrom module`
| :sg:`init() -> None`
Initialize the cdrom module. This will scan the system for all ``CD``
devices. The module must be initialized before any other functions will
work. This automatically happens when you call ``pygame.init()``.
It is safe to call this function more than once.
.. ## pygame.cdrom.init ##
.. function:: quit
| :sl:`uninitialize the cdrom module`
| :sg:`quit() -> None`
Uninitialize the cdrom module. After you call this any existing ``CD``
objects will no longer work.
It is safe to call this function more than once.
.. ## pygame.cdrom.quit ##
.. function:: get_init
| :sl:`true if the cdrom module is initialized`
| :sg:`get_init() -> bool`
Test if the cdrom module is initialized or not. This is different than the
``CD.init()`` since each drive must also be initialized individually.
.. ## pygame.cdrom.get_init ##
.. function:: get_count
| :sl:`number of cd drives on the system`
| :sg:`get_count() -> count`
Return the number of cd drives on the system. When you create ``CD`` objects
you need to pass an integer id that must be lower than this count. The count
will be 0 if there are no drives on the system.
.. ## pygame.cdrom.get_count ##
.. class:: CD
| :sl:`class to manage a cdrom drive`
| :sg:`CD(id) -> CD`
You can create a ``CD`` object for each cdrom on the system. Use
``pygame.cdrom.get_count()`` to determine how many drives actually exist.
The id argument is an integer of the drive, starting at zero.
The ``CD`` object is not initialized, you can only call ``CD.get_id()`` and
``CD.get_name()`` on an uninitialized drive.
It is safe to create multiple ``CD`` objects for the same drive, they will
all cooperate normally.
.. method:: init
| :sl:`initialize a cdrom drive for use`
| :sg:`init() -> None`
Initialize the cdrom drive for use. The drive must be initialized for
most ``CD`` methods to work. Even if the rest of pygame has been
initialized.
There may be a brief pause while the drive is initialized. Avoid
``CD.init()`` if the program should not stop for a second or two.
.. ## CD.init ##
.. method:: quit
| :sl:`uninitialize a cdrom drive for use`
| :sg:`quit() -> None`
Uninitialize a drive for use. Call this when your program will not be
accessing the drive for awhile.
.. ## CD.quit ##
.. method:: get_init
| :sl:`true if this cd device initialized`
| :sg:`get_init() -> bool`
Test if this ``CDROM`` device is initialized. This is different than the
``pygame.cdrom.init()`` since each drive must also be initialized
individually.
.. ## CD.get_init ##
.. method:: play
| :sl:`start playing audio`
| :sg:`play(track, start=None, end=None) -> None`
Playback audio from an audio cdrom in the drive. Besides the track number
argument, you can also pass a starting and ending time for playback. The
start and end time are in seconds, and can limit the section of an audio
track played.
If you pass a start time but no end, the audio will play to the end of
the track. If you pass a start time and 'None' for the end time, the
audio will play to the end of the entire disc.
See the ``CD.get_numtracks()`` and ``CD.get_track_audio()`` to find
tracks to playback.
Note, track 0 is the first track on the ``CD``. Track numbers start at
zero.
.. ## CD.play ##
.. method:: stop
| :sl:`stop audio playback`
| :sg:`stop() -> None`
Stops playback of audio from the cdrom. This will also lose the current
playback position. This method does nothing if the drive isn't already
playing audio.
.. ## CD.stop ##
.. method:: pause
| :sl:`temporarily stop audio playback`
| :sg:`pause() -> None`
Temporarily stop audio playback on the ``CD``. The playback can be
resumed at the same point with the ``CD.resume()`` method. If the ``CD``
is not playing this method does nothing.
Note, track 0 is the first track on the ``CD``. Track numbers start at
zero.
.. ## CD.pause ##
.. method:: resume
| :sl:`unpause audio playback`
| :sg:`resume() -> None`
Unpause a paused ``CD``. If the ``CD`` is not paused or already playing,
this method does nothing.
.. ## CD.resume ##
.. method:: eject
| :sl:`eject or open the cdrom drive`
| :sg:`eject() -> None`
This will open the cdrom drive and eject the cdrom. If the drive is
playing or paused it will be stopped.
.. ## CD.eject ##
.. method:: get_id
| :sl:`the index of the cdrom drive`
| :sg:`get_id() -> id`
Returns the integer id that was used to create the ``CD`` instance. This
method can work on an uninitialized ``CD``.
.. ## CD.get_id ##
.. method:: get_name
| :sl:`the system name of the cdrom drive`
| :sg:`get_name() -> name`
Return the string name of the drive. This is the system name used to
represent the drive. It is often the drive letter or device name. This
method can work on an uninitialized ``CD``.
.. ## CD.get_name ##
.. method:: get_busy
| :sl:`true if the drive is playing audio`
| :sg:`get_busy() -> bool`
Returns True if the drive busy playing back audio.
.. ## CD.get_busy ##
.. method:: get_paused
| :sl:`true if the drive is paused`
| :sg:`get_paused() -> bool`
Returns True if the drive is currently paused.
.. ## CD.get_paused ##
.. method:: get_current
| :sl:`the current audio playback position`
| :sg:`get_current() -> track, seconds`
Returns both the current track and time of that track. This method works
when the drive is either playing or paused.
Note, track 0 is the first track on the ``CD``. Track numbers start at
zero.
.. ## CD.get_current ##
.. method:: get_empty
| :sl:`False if a cdrom is in the drive`
| :sg:`get_empty() -> bool`
Return False if there is a cdrom currently in the drive. If the drive is
empty this will return True.
.. ## CD.get_empty ##
.. method:: get_numtracks
| :sl:`the number of tracks on the cdrom`
| :sg:`get_numtracks() -> count`
Return the number of tracks on the cdrom in the drive. This will return
zero of the drive is empty or has no tracks.
.. ## CD.get_numtracks ##
.. method:: get_track_audio
| :sl:`true if the cdrom track has audio data`
| :sg:`get_track_audio(track) -> bool`
Determine if a track on a cdrom contains audio data. You can also call
``CD.num_tracks()`` and ``CD.get_all()`` to determine more information
about the cdrom.
Note, track 0 is the first track on the ``CD``. Track numbers start at
zero.
.. ## CD.get_track_audio ##
.. method:: get_all
| :sl:`get all track information`
| :sg:`get_all() -> [(audio, start, end, length), ...]`
Return a list with information for every track on the cdrom. The
information consists of a tuple with four values. The audio value is True
if the track contains audio data. The start, end, and length values are
floating point numbers in seconds. Start and end represent absolute times
on the entire disc.
.. ## CD.get_all ##
.. method:: get_track_start
| :sl:`start time of a cdrom track`
| :sg:`get_track_start(track) -> seconds`
Return the absolute time in seconds where at start of the cdrom track.
Note, track 0 is the first track on the ``CD``. Track numbers start at
zero.
.. ## CD.get_track_start ##
.. method:: get_track_length
| :sl:`length of a cdrom track`
| :sg:`get_track_length(track) -> seconds`
Return a floating point value in seconds of the length of the cdrom
track.
Note, track 0 is the first track on the ``CD``. Track numbers start at
zero.
.. ## CD.get_track_length ##
.. ## pygame.cdrom.CD ##
.. ## pygame.cdrom ##

View file

@ -0,0 +1,283 @@
.. include:: common.txt
:mod:`pygame.Color`
===================
.. currentmodule:: pygame
.. class:: Color
| :sl:`pygame object for color representations`
| :sg:`Color(r, g, b) -> Color`
| :sg:`Color(r, g, b, a=255) -> Color`
| :sg:`Color(color_value) -> Color`
The ``Color`` class represents ``RGBA`` color values using a value range of
0 to 255 inclusive. It allows basic arithmetic operationsbinary
operations ``+``, ``-``, ``*``, ``//``, ``%``, and unary operation ``~``to
create new colors, supports conversions to other color spaces such as ``HSV``
or ``HSL`` and lets you adjust single color channels.
Alpha defaults to 255 (fully opaque) when not given.
The arithmetic operations and ``correct_gamma()`` method preserve subclasses.
For the binary operators, the class of the returned color is that of the
left hand color object of the operator.
Color objects support equality comparison with other color objects and 3 or
4 element tuples of integers. There was a bug in pygame 1.8.1
where the default alpha was 0, not 255 like previously.
Color objects export the C level array interface. The interface exports a
read-only one dimensional unsigned byte array of the same assigned length
as the color. The new buffer interface is also exported, with the same
characteristics as the array interface.
The floor division, ``//``, and modulus, ``%``, operators do not raise
an exception for division by zero. Instead, if a color, or alpha, channel
in the right hand color is 0, then the result is 0. For example: ::
# These expressions are True
Color(255, 255, 255, 255) // Color(0, 64, 64, 64) == Color(0, 3, 3, 3)
Color(255, 255, 255, 255) % Color(64, 64, 64, 0) == Color(63, 63, 63, 0)
Use ``int(color)`` to return the immutable integer value of the color,
usable as a ``dict`` key. This integer value differs from the mapped
pixel values of :meth:`pygame.Surface.get_at_mapped`,
:meth:`pygame.Surface.map_rgb` and :meth:`pygame.Surface.unmap_rgb`.
It can be passed as a ``color_value`` argument to :class:`Color`
(useful with sets).
See :doc:`color_list` for samples of the available named colors.
:param int r: red value in the range of 0 to 255 inclusive
:param int g: green value in the range of 0 to 255 inclusive
:param int b: blue value in the range of 0 to 255 inclusive
:param int a: (optional) alpha value in the range of 0 to 255 inclusive,
default is 255
:param color_value: color value (see note below for the supported formats)
.. note::
Supported ``color_value`` formats:
| - **Color object:** clones the given :class:`Color` object
| - **Color name: str:** name of the color to use, e.g. ``'red'``
(all the supported name strings can be found in the
:doc:`color_list`, with sample swatches)
| - **HTML color format str:** ``'#rrggbbaa'`` or ``'#rrggbb'``,
where rr, gg, bb, and aa are 2-digit hex numbers in the range
of 0 to 0xFF inclusive, the aa (alpha) value defaults to 0xFF
if not provided
| - **hex number str:** ``'0xrrggbbaa'`` or ``'0xrrggbb'``, where
rr, gg, bb, and aa are 2-digit hex numbers in the range of 0x00
to 0xFF inclusive, the aa (alpha) value defaults to 0xFF if not
provided
| - **int:** int value of the color to use, using hex numbers can
make this parameter more readable, e.g. ``0xrrggbbaa``, where rr,
gg, bb, and aa are 2-digit hex numbers in the range of 0x00 to
0xFF inclusive, note that the aa (alpha) value is not optional for
the int format and must be provided
| - **tuple/list of int color values:** ``(R, G, B, A)`` or
``(R, G, B)``, where R, G, B, and A are int values in the range of
0 to 255 inclusive, the A (alpha) value defaults to 255 if not
provided
:type color_value: Color or str or int or tuple(int, int, int, [int]) or
list(int, int, int, [int])
:returns: a newly created :class:`Color` object
:rtype: Color
.. versionchanged:: 2.0.0
Support for tuples, lists, and :class:`Color` objects when creating
:class:`Color` objects.
.. versionchanged:: 1.9.2 Color objects export the C level array interface.
.. versionchanged:: 1.9.0 Color objects support 4-element tuples of integers.
.. versionchanged:: 1.8.1 New implementation of the class.
.. attribute:: r
| :sl:`Gets or sets the red value of the Color.`
| :sg:`r -> int`
The red value of the Color.
.. ## Color.r ##
.. attribute:: g
| :sl:`Gets or sets the green value of the Color.`
| :sg:`g -> int`
The green value of the Color.
.. ## Color.g ##
.. attribute:: b
| :sl:`Gets or sets the blue value of the Color.`
| :sg:`b -> int`
The blue value of the Color.
.. ## Color.b ##
.. attribute:: a
| :sl:`Gets or sets the alpha value of the Color.`
| :sg:`a -> int`
The alpha value of the Color.
.. ## Color.a ##
.. attribute:: cmy
| :sl:`Gets or sets the CMY representation of the Color.`
| :sg:`cmy -> tuple`
The ``CMY`` representation of the Color. The ``CMY`` components are in
the ranges ``C`` = [0, 1], ``M`` = [0, 1], ``Y`` = [0, 1]. Note that this
will not return the absolutely exact ``CMY`` values for the set ``RGB``
values in all cases. Due to the ``RGB`` mapping from 0-255 and the
``CMY`` mapping from 0-1 rounding errors may cause the ``CMY`` values to
differ slightly from what you might expect.
.. ## Color.cmy ##
.. attribute:: hsva
| :sl:`Gets or sets the HSVA representation of the Color.`
| :sg:`hsva -> tuple`
The ``HSVA`` representation of the Color. The ``HSVA`` components are in
the ranges ``H`` = [0, 360], ``S`` = [0, 100], ``V`` = [0, 100], A = [0,
100]. Note that this will not return the absolutely exact ``HSV`` values
for the set ``RGB`` values in all cases. Due to the ``RGB`` mapping from
0-255 and the ``HSV`` mapping from 0-100 and 0-360 rounding errors may
cause the ``HSV`` values to differ slightly from what you might expect.
.. ## Color.hsva ##
.. attribute:: hsla
| :sl:`Gets or sets the HSLA representation of the Color.`
| :sg:`hsla -> tuple`
The ``HSLA`` representation of the Color. The ``HSLA`` components are in
the ranges ``H`` = [0, 360], ``S`` = [0, 100], ``L`` = [0, 100], A = [0,
100]. Note that this will not return the absolutely exact ``HSL`` values
for the set ``RGB`` values in all cases. Due to the ``RGB`` mapping from
0-255 and the ``HSL`` mapping from 0-100 and 0-360 rounding errors may
cause the ``HSL`` values to differ slightly from what you might expect.
.. ## Color.hsla ##
.. attribute:: i1i2i3
| :sl:`Gets or sets the I1I2I3 representation of the Color.`
| :sg:`i1i2i3 -> tuple`
The ``I1I2I3`` representation of the Color. The ``I1I2I3`` components are
in the ranges ``I1`` = [0, 1], ``I2`` = [-0.5, 0.5], ``I3`` = [-0.5,
0.5]. Note that this will not return the absolutely exact ``I1I2I3``
values for the set ``RGB`` values in all cases. Due to the ``RGB``
mapping from 0-255 and the ``I1I2I3`` mapping from 0-1 rounding errors
may cause the ``I1I2I3`` values to differ slightly from what you might
expect.
.. ## Color.i1i2i3 ##
.. method:: normalize
| :sl:`Returns the normalized RGBA values of the Color.`
| :sg:`normalize() -> tuple`
Returns the normalized ``RGBA`` values of the Color as floating point
values.
.. ## Color.normalize ##
.. method:: correct_gamma
| :sl:`Applies a certain gamma value to the Color.`
| :sg:`correct_gamma (gamma) -> Color`
Applies a certain gamma value to the Color and returns a new Color with
the adjusted ``RGBA`` values.
.. ## Color.correct_gamma ##
.. method:: set_length
| :sl:`Set the number of elements in the Color to 1,2,3, or 4.`
| :sg:`set_length(len) -> None`
DEPRECATED: You may unpack the values you need like so,
``r, g, b, _ = pygame.Color(100, 100, 100)``
If you only want r, g and b
Or
``r, g, *_ = pygame.Color(100, 100, 100)``
if you only want r and g
The default Color length is 4. Colors can have lengths 1,2,3 or 4. This
is useful if you want to unpack to r,g,b and not r,g,b,a. If you want to
get the length of a Color do ``len(acolor)``.
.. deprecated:: 2.1.3
.. versionadded:: 1.9.0
.. ## Color.set_length ##
.. method:: grayscale
| :sl:`returns the grayscale of a Color`
| :sg:`grayscale() -> Color`
Returns a Color which represents the grayscaled version of self using the luminosity formula which weights red, green and blue according to their wavelengths..
.. ## Color.grayscale ##
.. method:: lerp
| :sl:`returns a linear interpolation to the given Color.`
| :sg:`lerp(Color, float) -> Color`
Returns a Color which is a linear interpolation between self and the
given Color in RGBA space. The second parameter determines how far
between self and other the result is going to be.
It must be a value between 0 and 1 where 0 means self and 1 means
other will be returned.
.. versionadded:: 2.0.1
.. ## Color.lerp ##
.. method:: premul_alpha
| :sl:`returns a Color where the r,g,b components have been multiplied by the alpha.`
| :sg:`premul_alpha() -> Color`
Returns a new Color where each of the red, green and blue colour
channels have been multiplied by the alpha channel of the original
color. The alpha channel remains unchanged.
This is useful when working with the ``BLEND_PREMULTIPLIED`` blending mode
flag for :meth:`pygame.Surface.blit()`, which assumes that all surfaces using
it are using pre-multiplied alpha colors.
.. versionadded:: 2.0.0
.. ## Color.premul_alpha ##
.. method:: update
| :sl:`Sets the elements of the color`
| :sg:`update(r, g, b) -> None`
| :sg:`update(r, g, b, a=255) -> None`
| :sg:`update(color_value) -> None`
Sets the elements of the color. See parameters for :meth:`pygame.Color` for the
parameters of this function. If the alpha value was not set it will not change.
.. versionadded:: 2.0.1
.. ## Color.update ##
.. ## pygame.Color ##

View file

@ -0,0 +1,88 @@
.. include:: common.txt
:mod:`pygame.context`
======================
.. module:: pygame.context
:synopsis: pygame module to provide additional context about the system
| :sl:`pygame module to provide additional context about the system`
**EXPERIMENTAL!** This API may change or disappear in later pygame releases.
If you use this, your code may break with the next pygame release.
This is a new module, so we are marking it experimental for now.
We probably won't have to change API, but we're keeping the possibility
open just in case something obvious comes up.
.. versionadded:: 2.1.3
.. function:: get_pref_path
| :sl:`get a writeable folder for your app`
| :sg:`get_pref_path(org, app) -> path`
When distributing apps, it's helpful to have a way to get a writeable path,
because it's what apps are expected to do, and because sometimes the local
space around the app isn't writeable to the app.
This function returns a platform specific path for your app to store
savegames, settings, and the like. This path is unique per user and
per app name.
It takes two strings, ``org`` and ``app``, referring to the "organization"
and "application name." For example, the organization could be "Valve,"
and the application name could be "Half Life 2." It then will figure out the
preferred path, **creating the folders referenced by the path if necessary**,
and return a string containing the absolute path.
For example::
On Windows, it would resemble
C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\
On macOS, it would resemble
/Users/bob/Library/Application Support/My Program Name/
And on Linux it would resemble
/home/bob/.local/share/My Program Name/
.. versionadded:: 2.1.3
.. function:: get_pref_locales
| :sl:`get preferred locales set on the system`
| :sg:`get_pref_locales() -> list[locale]`
Returns a list of "locale" dicts, sorted in descending order of preference
set on the host OS (the most preferred locale is the first element). May
also be an empty list if pygame could not find this information.
Each "locale" dict contains the language code which can be accessed by the
key ``"language"``. This language code is an ISO-639 language specifier
(such as "en" for English, "de" for German, etc).
A "locale" dict may also optionally contain a ``"country"`` field, whose
value is an ISO-3166 country code (such as "US" for the United States,
"CA" for Canada, etc). If this field is not set or undetermined, it is
``None``.
A "locale" dict which looks like ``{'language': 'en', 'country': 'US'}``
indicates the user prefers American English, while
``{'language': 'en', 'country': None}`` indicates that the user prefers
English, generically.
This might be a bit of an expensive call because it has to query the OS. So
this function must not be called in a game loop, instead it's best to ask
for this once and save the results. However, this list can change when the
user changes a system preference outside of your program. pygame will send
a ``LOCALECHANGED`` event in this case, if possible, and you can call this
function again to get an updated copy of preferred locales.
.. note::
Since the organization and app names can potentially be used as
a folder name, it is highly encouraged to avoid punctuation.
Instead stick to letters, numbers, and spaces.
.. note::
The ``appdirs`` library has similar functionality for this use case,
but has more "folder types" to choose from.
.. versionadded:: 2.1.3

View file

@ -0,0 +1,251 @@
.. include:: common.txt
:mod:`pygame.cursors`
=====================
.. module:: pygame.cursors
:synopsis: pygame module for cursor resources
| :sl:`pygame module for cursor resources`
Pygame offers control over the system hardware cursor. Pygame supports
black and white cursors (bitmap cursors), as well as system variant cursors and color cursors.
You control the cursor with functions inside :mod:`pygame.mouse`.
This cursors module contains functions for loading and decoding various
cursor formats. These allow you to easily store your cursors in external files
or directly as encoded python strings.
The module includes several standard cursors. The :func:`pygame.mouse.set_cursor()`
function takes several arguments. All those arguments have been stored in a
single tuple you can call like this:
::
>>> pygame.mouse.set_cursor(*pygame.cursors.arrow)
The following variables can be passed to ``pygame.mouse.set_cursor`` function:
* ``pygame.cursors.arrow``
* ``pygame.cursors.diamond``
* ``pygame.cursors.broken_x``
* ``pygame.cursors.tri_left``
* ``pygame.cursors.tri_right``
This module also contains a few cursors as formatted strings. You'll need to
pass these to ``pygame.cursors.compile()`` function before you can use them.
The example call would look like this:
::
>>> cursor = pygame.cursors.compile(pygame.cursors.textmarker_strings)
>>> pygame.mouse.set_cursor((8, 16), (0, 0), *cursor)
The following strings can be converted into cursor bitmaps with
``pygame.cursors.compile()`` :
* ``pygame.cursors.thickarrow_strings``
* ``pygame.cursors.sizer_x_strings``
* ``pygame.cursors.sizer_y_strings``
* ``pygame.cursors.sizer_xy_strings``
* ``pygame.cursor.textmarker_strings``
.. function:: compile
| :sl:`create binary cursor data from simple strings`
| :sg:`compile(strings, black='X', white='.', xor='o') -> data, mask`
A sequence of strings can be used to create binary cursor data for the
system cursor. This returns the binary data in the form of two tuples.
Those can be passed as the third and fourth arguments respectively of the
:func:`pygame.mouse.set_cursor()` function.
If you are creating your own cursor strings, you can use any value represent
the black and white pixels. Some system allow you to set a special toggle
color for the system color, this is also called the xor color. If the system
does not support xor cursors, that color will simply be black.
The height must be divisible by 8. The width of the strings must all be equal
and be divisible by 8. If these two conditions are not met, ``ValueError`` is
raised.
An example set of cursor strings looks like this
::
thickarrow_strings = ( #sized 24x24
"XX ",
"XXX ",
"XXXX ",
"XX.XX ",
"XX..XX ",
"XX...XX ",
"XX....XX ",
"XX.....XX ",
"XX......XX ",
"XX.......XX ",
"XX........XX ",
"XX........XXX ",
"XX......XXXXX ",
"XX.XXX..XX ",
"XXXX XX..XX ",
"XX XX..XX ",
" XX..XX ",
" XX..XX ",
" XX..XX ",
" XXXX ",
" XX ",
" ",
" ",
" ")
.. ## pygame.cursors.compile ##
.. function:: load_xbm
| :sl:`load cursor data from an XBM file`
| :sg:`load_xbm(cursorfile) -> cursor_args`
| :sg:`load_xbm(cursorfile, maskfile) -> cursor_args`
This loads cursors for a simple subset of ``XBM`` files. ``XBM`` files are
traditionally used to store cursors on UNIX systems, they are an ASCII
format used to represent simple images.
Sometimes the black and white color values will be split into two separate
``XBM`` files. You can pass a second maskfile argument to load the two
images into a single cursor.
The cursorfile and maskfile arguments can either be filenames or file-like
object with the readlines method.
The return value cursor_args can be passed directly to the
``pygame.mouse.set_cursor()`` function.
.. ## pygame.cursors.load_xbm ##
.. class:: Cursor
| :sl:`pygame object representing a cursor`
| :sg:`Cursor(size, hotspot, xormasks, andmasks) -> Cursor`
| :sg:`Cursor(hotspot, surface) -> Cursor`
| :sg:`Cursor(constant) -> Cursor`
| :sg:`Cursor(Cursor) -> Cursor`
| :sg:`Cursor() -> Cursor`
In pygame 2, there are 3 types of cursors you can create to give your
game that little bit of extra polish. There's **bitmap** type cursors,
which existed in pygame 1.x, and are compiled from a string or load from an xbm file.
Then there are **system** type cursors, where you choose a preset that will
convey the same meaning but look native across different operating systems.
Finally you can create a **color** cursor, which displays a pygame surface as the cursor.
**Creating a system cursor**
Choose a constant from this list, pass it into ``pygame.cursors.Cursor(constant)``,
and you're good to go. Be advised that not all systems support every system
cursor, and you may get a substitution instead. For example, on MacOS,
WAIT/WAITARROW should show up as an arrow, and SIZENWSE/SIZENESW/SIZEALL
should show up as a closed hand. And on Wayland, every SIZE cursor should
show up as a hand.
::
Pygame Cursor Constant Description
--------------------------------------------
pygame.SYSTEM_CURSOR_ARROW arrow
pygame.SYSTEM_CURSOR_IBEAM i-beam
pygame.SYSTEM_CURSOR_WAIT wait
pygame.SYSTEM_CURSOR_CROSSHAIR crosshair
pygame.SYSTEM_CURSOR_WAITARROW small wait cursor
(or wait if not available)
pygame.SYSTEM_CURSOR_SIZENWSE double arrow pointing
northwest and southeast
pygame.SYSTEM_CURSOR_SIZENESW double arrow pointing
northeast and southwest
pygame.SYSTEM_CURSOR_SIZEWE double arrow pointing
west and east
pygame.SYSTEM_CURSOR_SIZENS double arrow pointing
north and south
pygame.SYSTEM_CURSOR_SIZEALL four pointed arrow pointing
north, south, east, and west
pygame.SYSTEM_CURSOR_NO slashed circle or crossbones
pygame.SYSTEM_CURSOR_HAND hand
**Creating a cursor without passing arguments**
In addition to the cursor constants available and described above,
you can also call ``pygame.cursors.Cursor()``, and your cursor is ready (doing that is the same as
calling ``pygame.cursors.Cursor(pygame.SYSTEM_CURSOR_ARROW)``.
Doing one of those calls actually creates a system cursor using the default native image.
**Creating a color cursor**
To create a color cursor, create a ``Cursor`` from a ``hotspot`` and a ``surface``.
``hotspot`` is an (x,y) coordinate that determines where in the cursor the exact point is.
The hotspot position must be within the bounds of the ``surface``.
**Creating a bitmap cursor**
When the mouse cursor is visible, it will be displayed as a black and white
bitmap using the given bitmask arrays. The ``size`` is a sequence containing
the cursor width and height. ``hotspot`` is a sequence containing the cursor
hotspot position.
A cursor has a width and height, but a mouse position is represented by a
set of point coordinates. So the value passed into the cursor ``hotspot``
variable helps pygame to actually determine at what exact point the cursor
is at.
``xormasks`` is a sequence of bytes containing the cursor xor data masks.
Lastly ``andmasks``, a sequence of bytes containing the cursor bitmask data.
To create these variables, we can make use of the
:func:`pygame.cursors.compile()` function.
Width and height must be a multiple of 8, and the mask arrays must be the
correct size for the given width and height. Otherwise an exception is raised.
.. method:: copy
| :sl:`copy the current cursor`
| :sg:`copy() -> Cursor`
Returns a new Cursor object with the same data and hotspot as the original.
.. ## pygame.cursors.Cursor.copy ##
.. attribute:: type
| :sl:`Gets the cursor type`
| :sg:`type -> string`
The type will be ``"system"``, ``"bitmap"``, or ``"color"``.
.. ## pygame.cursors.Cursor.type ##
.. attribute:: data
| :sl:`Gets the cursor data`
| :sg:`data -> tuple`
Returns the data that was used to create this cursor object, wrapped up in a tuple.
.. ## pygame.cursors.Cursor.data ##
.. versionadded:: 2.0.1
.. ## pygame.cursors.Cursor ##
.. ## pygame.cursors ##
Example code for creating and settings cursors. (Click the mouse to switch cursor)
.. literalinclude:: code_examples/cursors_module_example.py

View file

@ -0,0 +1,737 @@
.. include:: common.txt
:mod:`pygame.display`
=====================
.. module:: pygame.display
:synopsis: pygame module to control the display window and screen
| :sl:`pygame module to control the display window and screen`
This module offers control over the pygame display. Pygame has a single display
Surface that is either contained in a window or runs full screen. Once you
create the display you treat it as a regular Surface. Changes are not
immediately visible onscreen; you must choose one of the two flipping functions
to update the actual display.
The origin of the display, where x = 0 and y = 0, is the top left of the
screen. Both axes increase positively towards the bottom right of the screen.
The pygame display can actually be initialized in one of several modes. By
default, the display is a basic software driven framebuffer. You can request
special modules like automatic scaling or OpenGL support. These are
controlled by flags passed to ``pygame.display.set_mode()``.
Pygame can only have a single display active at any time. Creating a new one
with ``pygame.display.set_mode()`` will close the previous display. To detect
the number and size of attached screens, you can use
``pygame.display.get_desktop_sizes`` and then select appropriate window size
and display index to pass to ``pygame.display.set_mode()``.
For backward compatibility ``pygame.display`` allows precise control over
the pixel format or display resolutions. This used to be necessary with old
graphics cards and CRT screens, but is usually not needed any more. Use the
functions ``pygame.display.mode_ok()``, ``pygame.display.list_modes()``, and
``pygame.display.Info()`` to query detailed information about the display.
Once the display Surface is created, the functions from this module affect the
single existing display. The Surface becomes invalid if the module is
uninitialized. If a new display mode is set, the existing Surface will
automatically switch to operate on the new display.
When the display mode is set, several events are placed on the pygame event
queue. ``pygame.QUIT`` is sent when the user has requested the program to
shut down. The window will receive ``pygame.ACTIVEEVENT`` events as the display
gains and loses input focus. If the display is set with the
``pygame.RESIZABLE`` flag, ``pygame.VIDEORESIZE`` events will be sent when the
user adjusts the window dimensions. Hardware displays that draw direct to the
screen will get ``pygame.VIDEOEXPOSE`` events when portions of the window must
be redrawn.
A new windowevent API was introduced in pygame 2.0.1. Check event module docs
for more information on that
Some display environments have an option for automatically stretching all
windows. When this option is enabled, this automatic stretching distorts the
appearance of the pygame window. In the pygame examples directory, there is
example code (prevent_display_stretching.py) which shows how to disable this
automatic stretching of the pygame display on Microsoft Windows (Vista or newer
required).
.. function:: init
| :sl:`Initialize the display module`
| :sg:`init() -> None`
Initializes the pygame display module. The display module cannot do anything
until it is initialized. This is usually handled for you automatically when
you call the higher level ``pygame.init()``.
Pygame will select from one of several internal display backends when it is
initialized. The display mode will be chosen depending on the platform and
permissions of current user. Before the display module is initialized the
environment variable ``SDL_VIDEODRIVER`` can be set to control which backend
is used. The systems with multiple choices are listed here.
::
Windows : windib, directx
Unix : x11, dga, fbcon, directfb, ggi, vgl, svgalib, aalib
On some platforms it is possible to embed the pygame display into an already
existing window. To do this, the environment variable ``SDL_WINDOWID`` must
be set to a string containing the window id or handle. The environment
variable is checked when the pygame display is initialized. Be aware that
there can be many strange side effects when running in an embedded display.
It is harmless to call this more than once, repeated calls have no effect.
.. ## pygame.display.init ##
.. function:: quit
| :sl:`Uninitialize the display module`
| :sg:`quit() -> None`
This will shut down the entire display module. This means any active
displays will be closed. This will also be handled automatically when the
program exits.
It is harmless to call this more than once, repeated calls have no effect.
.. ## pygame.display.quit ##
.. function:: get_init
| :sl:`Returns True if the display module has been initialized`
| :sg:`get_init() -> bool`
Returns True if the :mod:`pygame.display` module is currently initialized.
.. ## pygame.display.get_init ##
.. function:: set_mode
| :sl:`Initialize a window or screen for display`
| :sg:`set_mode(size=(0, 0), flags=0, depth=0, display=0, vsync=0) -> Surface`
This function will create a display Surface. The arguments passed in are
requests for a display type. The actual created display will be the best
possible match supported by the system.
Note that calling this function implicitly initializes ``pygame.display``, if
it was not initialized before.
The size argument is a pair of numbers representing the width and
height. The flags argument is a collection of additional options. The depth
argument represents the number of bits to use for color.
The Surface that gets returned can be drawn to like a regular Surface but
changes will eventually be seen on the monitor.
If no size is passed or is set to ``(0, 0)`` and pygame uses ``SDL``
version 1.2.10 or above, the created Surface will have the same size as the
current screen resolution. If only the width or height are set to ``0``, the
Surface will have the same width or height as the screen resolution. Using a
``SDL`` version prior to 1.2.10 will raise an exception.
It is usually best to not pass the depth argument. It will default to the
best and fastest color depth for the system. If your game requires a
specific color format you can control the depth with this argument. Pygame
will emulate an unavailable color depth which can be slow.
When requesting fullscreen display modes, sometimes an exact match for the
requested size cannot be made. In these situations pygame will select
the closest compatible match. The returned surface will still always match
the requested size.
On high resolution displays(4k, 1080p) and tiny graphics games (640x480)
show up very small so that they are unplayable. SCALED scales up the window
for you. The game thinks it's a 640x480 window, but really it can be bigger.
Mouse events are scaled for you, so your game doesn't need to do it. Note
that SCALED is considered an experimental API and may change in future
releases.
The flags argument controls which type of display you want. There are
several to choose from, and you can even combine multiple types using the
bitwise or operator, (the pipe "|" character). Here are the display
flags you will want to choose from:
::
pygame.FULLSCREEN create a fullscreen display
pygame.DOUBLEBUF only applicable with OPENGL
pygame.HWSURFACE (obsolete in pygame 2) hardware accelerated, only in FULLSCREEN
pygame.OPENGL create an OpenGL-renderable display
pygame.RESIZABLE display window should be resizeable
pygame.NOFRAME display window will have no border or controls
pygame.SCALED resolution depends on desktop size and scale graphics
pygame.SHOWN window is opened in visible mode (default)
pygame.HIDDEN window is opened in hidden mode
.. versionadded:: 2.0.0 ``SCALED``, ``SHOWN`` and ``HIDDEN``
By setting the ``vsync`` parameter to ``1``, it is possible to get a display
with vertical sync, but you are not guaranteed to get one. The request only
works at all for calls to ``set_mode()`` with the ``pygame.OPENGL`` or
``pygame.SCALED`` flags set, and is still not guaranteed even with one of
those set. What you get depends on the hardware and driver configuration
of the system pygame is running on. Here is an example usage of a call
to ``set_mode()`` that may give you a display with vsync:
::
flags = pygame.OPENGL | pygame.FULLSCREEN
window_surface = pygame.display.set_mode((1920, 1080), flags, vsync=1)
Vsync behaviour is considered experimental, and may change in future releases.
.. versionadded:: 2.0.0 ``vsync``
Basic example:
::
# Open a window on the screen
screen_width=700
screen_height=400
screen=pygame.display.set_mode([screen_width, screen_height])
The display index ``0`` means the default display is used. If no display
index argument is provided, the default display can be overridden with an
environment variable.
.. versionchanged:: 1.9.5 ``display`` argument added
.. versionchanged:: 2.1.3
pygame now ensures that subsequent calls to this function clears the
window to black. On older versions, this was an implementation detail
on the major platforms this function was tested with.
.. ## pygame.display.set_mode ##
.. function:: get_surface
| :sl:`Get a reference to the currently set display surface`
| :sg:`get_surface() -> Surface`
Return a reference to the currently set display Surface. If no display mode
has been set this will return None.
.. ## pygame.display.get_surface ##
.. function:: flip
| :sl:`Update the full display Surface to the screen`
| :sg:`flip() -> None`
This will update the contents of the entire display. If your display mode is
using the flags ``pygame.HWSURFACE`` and ``pygame.DOUBLEBUF`` on pygame 1,
this will wait for a vertical retrace and swap the surfaces.
When using an ``pygame.OPENGL`` display mode this will perform a gl buffer
swap.
.. ## pygame.display.flip ##
.. function:: update
| :sl:`Update portions of the screen for software displays`
| :sg:`update(rectangle=None) -> None`
| :sg:`update(rectangle_list) -> None`
This function is like an optimized version of ``pygame.display.flip()`` for
software displays. It allows only a portion of the screen to be updated,
instead of the entire area. If no argument is passed it updates the entire
Surface area like ``pygame.display.flip()``.
Note that calling ``display.update(None)`` means no part of the window is
updated. Whereas ``display.update()`` means the whole window is updated.
You can pass the function a single rectangle, or a sequence of rectangles.
It is more efficient to pass many rectangles at once than to call update
multiple times with single or a partial list of rectangles. If passing a
sequence of rectangles it is safe to include None values in the list, which
will be skipped.
This call cannot be used on ``pygame.OPENGL`` displays and will generate an
exception.
.. ## pygame.display.update ##
.. function:: get_driver
| :sl:`Get the name of the pygame display backend`
| :sg:`get_driver() -> name`
Pygame chooses one of many available display backends when it is
initialized. This returns the internal name used for the display backend.
This can be used to provide limited information about what display
capabilities might be accelerated. See the ``SDL_VIDEODRIVER`` flags in
``pygame.display.set_mode()`` to see some of the common options.
.. ## pygame.display.get_driver ##
.. function:: Info
| :sl:`Create a video display information object`
| :sg:`Info() -> VideoInfo`
Creates a simple object containing several attributes to describe the
current graphics environment. If this is called before
``pygame.display.set_mode()`` some platforms can provide information about
the default display mode. This can also be called after setting the display
mode to verify specific display options were satisfied. The VidInfo object
has several attributes:
::
hw: 1 if the display is hardware accelerated
wm: 1 if windowed display modes can be used
video_mem: The megabytes of video memory on the display. This is 0 if
unknown
bitsize: Number of bits used to store each pixel
bytesize: Number of bytes used to store each pixel
masks: Four values used to pack RGBA values into pixels
shifts: Four values used to pack RGBA values into pixels
losses: Four values used to pack RGBA values into pixels
blit_hw: 1 if hardware Surface blitting is accelerated
blit_hw_CC: 1 if hardware Surface colorkey blitting is accelerated
blit_hw_A: 1 if hardware Surface pixel alpha blitting is accelerated
blit_sw: 1 if software Surface blitting is accelerated
blit_sw_CC: 1 if software Surface colorkey blitting is accelerated
blit_sw_A: 1 if software Surface pixel alpha blitting is accelerated
current_h, current_w: Height and width of the current video mode, or
of the desktop mode if called before the display.set_mode
is called. (current_h, current_w are available since
SDL 1.2.10, and pygame 1.8.0). They are -1 on error, or if
an old SDL is being used.
.. ## pygame.display.Info ##
.. function:: get_wm_info
| :sl:`Get information about the current windowing system`
| :sg:`get_wm_info() -> dict`
Creates a dictionary filled with string keys. The strings and values are
arbitrarily created by the system. Some systems may have no information and
an empty dictionary will be returned. Most platforms will return a "window"
key with the value set to the system id for the current display.
.. versionadded:: 1.7.1
.. ## pygame.display.get_wm_info ##
.. function:: get_desktop_sizes
| :sl:`Get sizes of active desktops`
| :sg:`get_desktop_sizes() -> list`
This function returns the sizes of the currently configured
virtual desktops as a list of (x, y) tuples of integers.
The length of the list is not the same as the number of attached monitors,
as a desktop can be mirrored across multiple monitors. The desktop sizes
do not indicate the maximum monitor resolutions supported by the hardware,
but the desktop size configured in the operating system.
In order to fit windows into the desktop as it is currently configured, and
to respect the resolution configured by the operating system in fullscreen
mode, this function *should* be used to replace many use cases of
``pygame.display.list_modes()`` whenever applicable.
.. versionadded:: 2.0.0
.. function:: list_modes
| :sl:`Get list of available fullscreen modes`
| :sg:`list_modes(depth=0, flags=pygame.FULLSCREEN, display=0) -> list`
This function returns a list of possible sizes for a specified color
depth. The return value will be an empty list if no display modes are
available with the given arguments. A return value of ``-1`` means that
any requested size should work (this is likely the case for windowed
modes). Mode sizes are sorted from biggest to smallest.
If depth is ``0``, the current/best color depth for the display is used.
The flags defaults to ``pygame.FULLSCREEN``, but you may need to add
additional flags for specific fullscreen modes.
The display index ``0`` means the default display is used.
Since pygame 2.0, ``pygame.display.get_desktop_sizes()`` has taken over
some use cases from ``pygame.display.list_modes()``:
To find a suitable size for non-fullscreen windows, it is preferable to
use ``pygame.display.get_desktop_sizes()`` to get the size of the *current*
desktop, and to then choose a smaller window size. This way, the window is
guaranteed to fit, even when the monitor is configured to a lower resolution
than the maximum supported by the hardware.
To avoid changing the physical monitor resolution, it is also preferable to
use ``pygame.display.get_desktop_sizes()`` to determine the fullscreen
resolution. Developers are strongly advised to default to the current
physical monitor resolution unless the user explicitly requests a different
one (e.g. in an options menu or configuration file).
.. versionchanged:: 1.9.5 ``display`` argument added
.. ## pygame.display.list_modes ##
.. function:: mode_ok
| :sl:`Pick the best color depth for a display mode`
| :sg:`mode_ok(size, flags=0, depth=0, display=0) -> depth`
This function uses the same arguments as ``pygame.display.set_mode()``. It
is used to determine if a requested display mode is available. It will
return ``0`` if the display mode cannot be set. Otherwise it will return a
pixel depth that best matches the display asked for.
Usually the depth argument is not passed, but some platforms can support
multiple display depths. If passed it will hint to which depth is a better
match.
The function will return ``0`` if the passed display flags cannot be set.
The display index ``0`` means the default display is used.
.. versionchanged:: 1.9.5 ``display`` argument added
.. ## pygame.display.mode_ok ##
.. function:: gl_get_attribute
| :sl:`Get the value for an OpenGL flag for the current display`
| :sg:`gl_get_attribute(flag) -> value`
After calling ``pygame.display.set_mode()`` with the ``pygame.OPENGL`` flag,
it is a good idea to check the value of any requested OpenGL attributes. See
``pygame.display.gl_set_attribute()`` for a list of valid flags.
.. versionchanged:: 2.5.0 Added support for keyword arguments.
.. ## pygame.display.gl_get_attribute ##
.. function:: gl_set_attribute
| :sl:`Request an OpenGL display attribute for the display mode`
| :sg:`gl_set_attribute(flag, value) -> None`
When calling ``pygame.display.set_mode()`` with the ``pygame.OPENGL`` flag,
Pygame automatically handles setting the OpenGL attributes like color and
double-buffering. OpenGL offers several other attributes you may want control
over. Pass one of these attributes as the flag, and its appropriate value.
This must be called before ``pygame.display.set_mode()``.
Many settings are the requested minimum. Creating a window with an OpenGL context
will fail if OpenGL cannot provide the requested attribute, but it may for example
give you a stencil buffer even if you request none, or it may give you a larger
one than requested.
The ``OPENGL`` flags are:
::
GL_ALPHA_SIZE, GL_DEPTH_SIZE, GL_STENCIL_SIZE, GL_ACCUM_RED_SIZE,
GL_ACCUM_GREEN_SIZE, GL_ACCUM_BLUE_SIZE, GL_ACCUM_ALPHA_SIZE,
GL_MULTISAMPLEBUFFERS, GL_MULTISAMPLESAMPLES, GL_STEREO
:const:`GL_MULTISAMPLEBUFFERS`
Whether to enable multisampling anti-aliasing.
Defaults to 0 (disabled).
Set ``GL_MULTISAMPLESAMPLES`` to a value
above 0 to control the amount of anti-aliasing.
A typical value is 2 or 3.
:const:`GL_STENCIL_SIZE`
Minimum bit size of the stencil buffer. Defaults to 0.
:const:`GL_DEPTH_SIZE`
Minimum bit size of the depth buffer. Defaults to 16.
:const:`GL_STEREO`
1 enables stereo 3D. Defaults to 0.
:const:`GL_BUFFER_SIZE`
Minimum bit size of the frame buffer. Defaults to 0.
.. versionchanged:: 2.5.0 Added support for keyword arguments.
.. versionadded:: 2.0.0 Additional attributes:
::
GL_ACCELERATED_VISUAL,
GL_CONTEXT_MAJOR_VERSION, GL_CONTEXT_MINOR_VERSION,
GL_CONTEXT_FLAGS, GL_CONTEXT_PROFILE_MASK,
GL_SHARE_WITH_CURRENT_CONTEXT,
GL_CONTEXT_RELEASE_BEHAVIOR,
GL_FRAMEBUFFER_SRGB_CAPABLE
:const:`GL_CONTEXT_PROFILE_MASK`
Sets the OpenGL profile to one of these values:
::
GL_CONTEXT_PROFILE_CORE disable deprecated features
GL_CONTEXT_PROFILE_COMPATIBILITY allow deprecated features
GL_CONTEXT_PROFILE_ES allow only the ES feature
subset of OpenGL
:const:`GL_ACCELERATED_VISUAL`
Set to 1 to require hardware acceleration, or 0 to force software render.
By default, both are allowed.
.. ## pygame.display.gl_set_attribute ##
.. function:: get_active
| :sl:`Returns True when the display is active on the screen`
| :sg:`get_active() -> bool`
Returns True when the display Surface is considered actively
renderable on the screen and may be visible to the user. This is
the default state immediately after ``pygame.display.set_mode()``.
This method may return True even if the application is fully hidden
behind another application window.
This will return False if the display Surface has been iconified or
minimized (either via ``pygame.display.iconify()`` or via an OS
specific method such as the minimize-icon available on most
desktops).
The method can also return False for other reasons without the
application being explicitly iconified or minimized by the user. A
notable example being if the user has multiple virtual desktops and
the display Surface is not on the active virtual desktop.
.. note:: This function returning True is unrelated to whether the
application has input focus. Please see
``pygame.key.get_focused()`` and ``pygame.mouse.get_focused()``
for APIs related to input focus.
.. ## pygame.display.get_active ##
.. function:: iconify
| :sl:`Iconify the display surface`
| :sg:`iconify() -> bool`
Request the window for the display surface be iconified or hidden. Not all
systems and displays support an iconified display. The function will return
True if successful.
When the display is iconified ``pygame.display.get_active()`` will return
``False``. The event queue should receive an ``ACTIVEEVENT`` event when the
window has been iconified. Additionally, the event queue also receives a
``WINDOWEVENT_MINIMIZED`` event when the window has been iconified on pygame 2.
.. ## pygame.display.iconify ##
.. function:: toggle_fullscreen
| :sl:`Switch between fullscreen and windowed displays`
| :sg:`toggle_fullscreen() -> int`
Switches the display window between windowed and fullscreen modes.
Display driver support is not great when using pygame 1, but with
pygame 2 it is the most reliable method to switch to and from fullscreen.
Supported display drivers in pygame 1:
* x11 (Linux/Unix)
* wayland (Linux/Unix)
Supported display drivers in pygame 2:
* windows (Windows)
* x11 (Linux/Unix)
* wayland (Linux/Unix)
* cocoa (OSX/Mac)
.. Note:: :func:`toggle_fullscreen` doesn't work on Windows
unless the window size is in :func:`pygame.display.list_modes()` or
the window is created with the flag ``pygame.SCALED``.
See `issue #2380 <https://github.com/pygame/pygame/issues/2380>`_.
.. ## pygame.display.toggle_fullscreen ##
.. function:: set_gamma
| :sl:`Change the hardware gamma ramps`
| :sg:`set_gamma(red, green=None, blue=None) -> bool`
DEPRECATED: This functionality will go away in SDL3.
Set the red, green, and blue gamma values on the display hardware. If the
green and blue arguments are not passed, they will both be the same as red.
Not all systems and hardware support gamma ramps, if the function succeeds
it will return ``True``.
A gamma value of ``1.0`` creates a linear color table. Lower values will
darken the display and higher values will brighten.
.. deprecated:: 2.2.0
.. ## pygame.display.set_gamma ##
.. function:: set_gamma_ramp
| :sl:`Change the hardware gamma ramps with a custom lookup`
| :sg:`set_gamma_ramp(red, green, blue) -> bool`
DEPRECATED: This functionality will go away in SDL3.
Set the red, green, and blue gamma ramps with an explicit lookup table. Each
argument should be sequence of 256 integers. The integers should range
between ``0`` and ``0xffff``. Not all systems and hardware support gamma
ramps, if the function succeeds it will return ``True``.
.. deprecated:: 2.2.0
.. ## pygame.display.set_gamma_ramp ##
.. function:: set_icon
| :sl:`Change the system image for the display window`
| :sg:`set_icon(Surface) -> None`
Sets the runtime icon the system will use to represent the display window.
All windows default to a simple pygame logo for the window icon.
Note that calling this function implicitly initializes ``pygame.display``, if
it was not initialized before.
You can pass any surface, but most systems want a smaller image around
32x32. The image can have colorkey transparency which will be passed to the
system.
Some systems do not allow the window icon to change after it has been shown.
This function can be called before ``pygame.display.set_mode()`` to create
the icon before the display mode is set.
.. ## pygame.display.set_icon ##
.. function:: set_caption
| :sl:`Set the current window caption`
| :sg:`set_caption(title, icontitle=None) -> None`
If the display has a window title, this function will change the name on the
window. In pygame 1.x, some systems supported an alternate shorter title to
be used for minimized displays, but in pygame 2 ``icontitle`` does nothing.
.. versionchanged:: 2.5.0 Added support for keyword arguments.
.. ## pygame.display.set_caption ##
.. function:: get_caption
| :sl:`Get the current window caption`
| :sg:`get_caption() -> (title, icontitle)`
Returns the title and icontitle for the display window. In pygame 2.x
these will always be the same value.
.. ## pygame.display.get_caption ##
.. function:: set_palette
| :sl:`Set the display color palette for indexed displays`
| :sg:`set_palette(palette=None) -> None`
This will change the video display color palette for 8-bit displays. This
does not change the palette for the actual display Surface, only the palette
that is used to display the Surface. If no palette argument is passed, the
system default palette will be restored. The palette is a sequence of
``RGB`` triplets.
.. versionchanged:: 2.5.0 Added support for keyword arguments.
.. ## pygame.display.set_palette ##
.. function:: get_num_displays
| :sl:`Return the number of displays`
| :sg:`get_num_displays() -> int`
Returns the number of available displays. This is always 1 if
:func:`pygame.get_sdl_version()` returns a major version number below 2.
.. versionadded:: 1.9.5
.. ## pygame.display.get_num_displays ##
.. function:: get_window_size
| :sl:`Return the size of the window or screen`
| :sg:`get_window_size() -> tuple`
Returns the size of the window initialized with :func:`pygame.display.set_mode()`.
This may differ from the size of the display surface if ``SCALED`` is used.
.. versionadded:: 2.0.0
.. ## pygame.display.get_window_size ##
.. function:: get_allow_screensaver
| :sl:`Return whether the screensaver is allowed to run.`
| :sg:`get_allow_screensaver() -> bool`
Return whether screensaver is allowed to run whilst the app is running.
Default is ``False``.
By default pygame does not allow the screensaver during game play.
.. note:: Some platforms do not have a screensaver or support
disabling the screensaver. Please see
:func:`pygame.display.set_allow_screensaver()` for
caveats with screensaver support.
.. versionadded:: 2.0.0
.. ## pygame.display.get_allow_screensaver ##
.. function:: set_allow_screensaver
| :sl:`Set whether the screensaver may run`
| :sg:`set_allow_screensaver(bool) -> None`
Change whether screensavers should be allowed whilst the app is running.
The default value of the argument to the function is True.
By default pygame does not allow the screensaver during game play.
If the screensaver has been disallowed due to this function, it will automatically
be allowed to run when :func:`pygame.quit()` is called.
It is possible to influence the default value via the environment variable
``SDL_HINT_VIDEO_ALLOW_SCREENSAVER``, which can be set to either ``0`` (disable)
or ``1`` (enable).
.. note:: Disabling screensaver is subject to platform support.
When platform support is absent, this function will
silently appear to work even though the screensaver state
is unchanged. The lack of feedback is due to SDL not
providing any supported method for determining whether
it supports changing the screensaver state.
``SDL_HINT_VIDEO_ALLOW_SCREENSAVER`` is available in SDL 2.0.2 or later.
SDL1.2 does not implement this.
.. versionadded:: 2.0.0
.. ## pygame.display.set_allow_screensaver ##
.. ## pygame.display ##

View file

@ -0,0 +1,557 @@
.. include:: common.txt
:mod:`pygame.draw`
==================
.. module:: pygame.draw
:synopsis: pygame module for drawing shapes
| :sl:`pygame module for drawing shapes`
Draw several simple shapes to a surface. These functions will work for
rendering to any format of surface.
Most of the functions take a width argument to represent the size of stroke
(thickness) around the edge of the shape. If a width of 0 is passed the shape
will be filled (solid).
All the drawing functions respect the clip area for the surface and will be
constrained to that area. The functions return a rectangle representing the
bounding area of changed pixels. This bounding rectangle is the 'minimum'
bounding box that encloses the affected area.
All the drawing functions accept a color argument that can be one of the
following formats:
- a :mod:`pygame.Color` object
- an ``(RGB)`` triplet (tuple/list)
- an ``(RGBA)`` quadruplet (tuple/list)
- an integer value that has been mapped to the surface's pixel format
(see :func:`pygame.Surface.map_rgb` and :func:`pygame.Surface.unmap_rgb`)
A color's alpha value will be written directly into the surface (if the
surface contains pixel alphas), but the draw function will not draw
transparently.
These functions temporarily lock the surface they are operating on. Many
sequential drawing calls can be sped up by locking and unlocking the surface
object around the draw calls (see :func:`pygame.Surface.lock` and
:func:`pygame.Surface.unlock`).
.. note ::
See the :mod:`pygame.gfxdraw` module for alternative draw methods.
.. function:: rect
| :sl:`draw a rectangle`
| :sg:`rect(surface, color, rect) -> Rect`
| :sg:`rect(surface, color, rect, width=0, border_radius=0, border_top_left_radius=-1, border_top_right_radius=-1, border_bottom_left_radius=-1, border_bottom_right_radius=-1) -> Rect`
Draws a rectangle on the given surface.
:param Surface surface: surface to draw on
:param color: color to draw with, the alpha value is optional if using a
tuple ``(RGB[A])``
:type color: Color or int or tuple(int, int, int, [int])
:param Rect rect: rectangle to draw, position and dimensions
:param int width: (optional) used for line thickness or to indicate that
the rectangle is to be filled (not to be confused with the width value
of the ``rect`` parameter)
| if ``width == 0``, (default) fill the rectangle
| if ``width > 0``, used for line thickness
| if ``width < 0``, nothing will be drawn
|
.. versionchanged:: 2.1.1
Drawing rects with width now draws the width correctly inside the
rect's area, rather than using an internal call to draw.lines(),
which had half the width spill outside the rect area.
:param int border_radius: (optional) used for drawing rectangle with rounded corners.
The supported range is [0, min(height, width) / 2], with 0 representing a rectangle
without rounded corners.
:param int border_top_left_radius: (optional) used for setting the value of top left
border. If you don't set this value, it will use the border_radius value.
:param int border_top_right_radius: (optional) used for setting the value of top right
border. If you don't set this value, it will use the border_radius value.
:param int border_bottom_left_radius: (optional) used for setting the value of bottom left
border. If you don't set this value, it will use the border_radius value.
:param int border_bottom_right_radius: (optional) used for setting the value of bottom right
border. If you don't set this value, it will use the border_radius value.
| if ``border_radius < 1`` it will draw rectangle without rounded corners
| if any of border radii has the value ``< 0`` it will use value of the border_radius
| If sum of radii on the same side of the rectangle is greater than the rect size the radii
| will get scaled
:returns: a rect bounding the changed pixels, if nothing is drawn the
bounding rect's position will be the position of the given ``rect``
parameter and its width and height will be 0
:rtype: Rect
.. note::
The :func:`pygame.Surface.fill()` method works just as well for drawing
filled rectangles and can be hardware accelerated on some platforms.
.. versionchanged:: 2.0.0 Added support for keyword arguments.
.. versionchanged:: 2.0.0.dev8 Added support for border radius.
.. ## pygame.draw.rect ##
.. function:: polygon
| :sl:`draw a polygon`
| :sg:`polygon(surface, color, points) -> Rect`
| :sg:`polygon(surface, color, points, width=0) -> Rect`
Draws a polygon on the given surface.
:param Surface surface: surface to draw on
:param color: color to draw with, the alpha value is optional if using a
tuple ``(RGB[A])``
:type color: Color or int or tuple(int, int, int, [int])
:param points: a sequence of 3 or more (x, y) coordinates that make up the
vertices of the polygon, each *coordinate* in the sequence must be a
tuple/list/:class:`pygame.math.Vector2` of 2 ints/floats,
e.g. ``[(x1, y1), (x2, y2), (x3, y3)]``
:type points: tuple(coordinate) or list(coordinate)
:param int width: (optional) used for line thickness or to indicate that
the polygon is to be filled
| if width == 0, (default) fill the polygon
| if width > 0, used for line thickness
| if width < 0, nothing will be drawn
|
.. note::
When using ``width`` values ``> 1``, the edge lines will grow
outside the original boundary of the polygon. For more details on
how the thickness for edge lines grow, refer to the ``width`` notes
of the :func:`pygame.draw.line` function.
:returns: a rect bounding the changed pixels, if nothing is drawn the
bounding rect's position will be the position of the first point in the
``points`` parameter (float values will be truncated) and its width and
height will be 0
:rtype: Rect
:raises ValueError: if ``len(points) < 3`` (must have at least 3 points)
:raises TypeError: if ``points`` is not a sequence or ``points`` does not
contain number pairs
.. note::
For an aapolygon, use :func:`aalines()` with ``closed=True``.
.. versionchanged:: 2.0.0 Added support for keyword arguments.
.. ## pygame.draw.polygon ##
.. function:: circle
| :sl:`draw a circle`
| :sg:`circle(surface, color, center, radius) -> Rect`
| :sg:`circle(surface, color, center, radius, width=0, draw_top_right=None, draw_top_left=None, draw_bottom_left=None, draw_bottom_right=None) -> Rect`
Draws a circle on the given surface.
:param Surface surface: surface to draw on
:param color: color to draw with, the alpha value is optional if using a
tuple ``(RGB[A])``
:type color: Color or int or tuple(int, int, int, [int])
:param center: center point of the circle as a sequence of 2 ints/floats,
e.g. ``(x, y)``
:type center: tuple(int or float, int or float) or
list(int or float, int or float) or Vector2(int or float, int or float)
:param radius: radius of the circle, measured from the ``center`` parameter,
nothing will be drawn if the ``radius`` is less than 1
:type radius: int or float
:param int width: (optional) used for line thickness or to indicate that
the circle is to be filled
| if ``width == 0``, (default) fill the circle
| if ``width > 0``, used for line thickness
| if ``width < 0``, nothing will be drawn
|
.. note::
When using ``width`` values ``> 1``, the edge lines will only grow
inward.
:param bool draw_top_right: (optional) if this is set to True then the top right corner
of the circle will be drawn
:param bool draw_top_left: (optional) if this is set to True then the top left corner
of the circle will be drawn
:param bool draw_bottom_left: (optional) if this is set to True then the bottom left corner
of the circle will be drawn
:param bool draw_bottom_right: (optional) if this is set to True then the bottom right corner
of the circle will be drawn
| if any of the draw_circle_part is True then it will draw all circle parts that have the True
| value, otherwise it will draw the entire circle.
:returns: a rect bounding the changed pixels, if nothing is drawn the
bounding rect's position will be the ``center`` parameter value (float
values will be truncated) and its width and height will be 0
:rtype: Rect
:raises TypeError: if ``center`` is not a sequence of two numbers
:raises TypeError: if ``radius`` is not a number
.. versionchanged:: 2.0.0 Added support for keyword arguments.
Nothing is drawn when the radius is 0 (a pixel at the ``center`` coordinates
used to be drawn when the radius equaled 0).
Floats, and Vector2 are accepted for the ``center`` param.
The drawing algorithm was improved to look more like a circle.
.. versionchanged:: 2.0.0.dev8 Added support for drawing circle quadrants.
.. ## pygame.draw.circle ##
.. function:: ellipse
| :sl:`draw an ellipse`
| :sg:`ellipse(surface, color, rect) -> Rect`
| :sg:`ellipse(surface, color, rect, width=0) -> Rect`
Draws an ellipse on the given surface.
:param Surface surface: surface to draw on
:param color: color to draw with, the alpha value is optional if using a
tuple ``(RGB[A])``
:type color: Color or int or tuple(int, int, int, [int])
:param Rect rect: rectangle to indicate the position and dimensions of the
ellipse, the ellipse will be centered inside the rectangle and bounded
by it
:param int width: (optional) used for line thickness or to indicate that
the ellipse is to be filled (not to be confused with the width value
of the ``rect`` parameter)
| if ``width == 0``, (default) fill the ellipse
| if ``width > 0``, used for line thickness
| if ``width < 0``, nothing will be drawn
|
.. note::
When using ``width`` values ``> 1``, the edge lines will only grow
inward from the original boundary of the ``rect`` parameter.
:returns: a rect bounding the changed pixels, if nothing is drawn the
bounding rect's position will be the position of the given ``rect``
parameter and its width and height will be 0
:rtype: Rect
.. versionchanged:: 2.0.0 Added support for keyword arguments.
.. ## pygame.draw.ellipse ##
.. function:: arc
| :sl:`draw an elliptical arc`
| :sg:`arc(surface, color, rect, start_angle, stop_angle) -> Rect`
| :sg:`arc(surface, color, rect, start_angle, stop_angle, width=1) -> Rect`
Draws an elliptical arc on the given surface.
The two angle arguments are given in radians and indicate the start and stop
positions of the arc. The arc is drawn in a counterclockwise direction from
the ``start_angle`` to the ``stop_angle``.
:param Surface surface: surface to draw on
:param color: color to draw with, the alpha value is optional if using a
tuple ``(RGB[A])``
:type color: Color or int or tuple(int, int, int, [int])
:param Rect rect: rectangle to indicate the position and dimensions of the
ellipse which the arc will be based on, the ellipse will be centered
inside the rectangle
:param float start_angle: start angle of the arc in radians
:param float stop_angle: stop angle of the arc in
radians
| if ``start_angle < stop_angle``, the arc is drawn in a
counterclockwise direction from the ``start_angle`` to the
``stop_angle``
| if ``start_angle > stop_angle``, tau (tau == 2 * pi) will be added
to the ``stop_angle``, if the resulting stop angle value is greater
than the ``start_angle`` the above ``start_angle < stop_angle`` case
applies, otherwise nothing will be drawn
| if ``start_angle == stop_angle``, nothing will be drawn
|
:param int width: (optional) used for line thickness (not to be confused
with the width value of the ``rect`` parameter)
| if ``width == 0``, nothing will be drawn
| if ``width > 0``, (default is 1) used for line thickness
| if ``width < 0``, same as ``width == 0``
.. note::
When using ``width`` values ``> 1``, the edge lines will only grow
inward from the original boundary of the ``rect`` parameter.
:returns: a rect bounding the changed pixels, if nothing is drawn the
bounding rect's position will be the position of the given ``rect``
parameter and its width and height will be 0
:rtype: Rect
.. versionchanged:: 2.0.0 Added support for keyword arguments.
.. ## pygame.draw.arc ##
.. function:: line
| :sl:`draw a straight line`
| :sg:`line(surface, color, start_pos, end_pos) -> Rect`
| :sg:`line(surface, color, start_pos, end_pos, width=1) -> Rect`
Draws a straight line on the given surface. There are no endcaps. For thick
lines the ends are squared off.
:param Surface surface: surface to draw on
:param color: color to draw with, the alpha value is optional if using a
tuple ``(RGB[A])``
:type color: Color or int or tuple(int, int, int, [int])
:param start_pos: start position of the line, (x, y)
:type start_pos: tuple(int or float, int or float) or
list(int or float, int or float) or Vector2(int or float, int or float)
:param end_pos: end position of the line, (x, y)
:type end_pos: tuple(int or float, int or float) or
list(int or float, int or float) or Vector2(int or float, int or float)
:param int width: (optional) used for line thickness
| if width >= 1, used for line thickness (default is 1)
| if width < 1, nothing will be drawn
|
.. note::
When using ``width`` values ``> 1``, lines will grow as follows.
For odd ``width`` values, the thickness of each line grows with the
original line being in the center.
For even ``width`` values, the thickness of each line grows with the
original line being offset from the center (as there is no exact
center line drawn). As a result, lines with a slope < 1
(horizontal-ish) will have 1 more pixel of thickness below the
original line (in the y direction). Lines with a slope >= 1
(vertical-ish) will have 1 more pixel of thickness to the right of
the original line (in the x direction).
:returns: a rect bounding the changed pixels, if nothing is drawn the
bounding rect's position will be the ``start_pos`` parameter value (float
values will be truncated) and its width and height will be 0
:rtype: Rect
:raises TypeError: if ``start_pos`` or ``end_pos`` is not a sequence of
two numbers
.. versionchanged:: 2.0.0 Added support for keyword arguments.
.. ## pygame.draw.line ##
.. function:: lines
| :sl:`draw multiple contiguous straight line segments`
| :sg:`lines(surface, color, closed, points) -> Rect`
| :sg:`lines(surface, color, closed, points, width=1) -> Rect`
Draws a sequence of contiguous straight lines on the given surface. There are
no endcaps or miter joints. For thick lines the ends are squared off.
Drawing thick lines with sharp corners can have undesired looking results.
:param Surface surface: surface to draw on
:param color: color to draw with, the alpha value is optional if using a
tuple ``(RGB[A])``
:type color: Color or int or tuple(int, int, int, [int])
:param bool closed: if ``True`` an additional line segment is drawn between
the first and last points in the ``points`` sequence
:param points: a sequence of 2 or more (x, y) coordinates, where each
*coordinate* in the sequence must be a
tuple/list/:class:`pygame.math.Vector2` of 2 ints/floats and adjacent
coordinates will be connected by a line segment, e.g. for the
points ``[(x1, y1), (x2, y2), (x3, y3)]`` a line segment will be drawn
from ``(x1, y1)`` to ``(x2, y2)`` and from ``(x2, y2)`` to ``(x3, y3)``,
additionally if the ``closed`` parameter is ``True`` another line segment
will be drawn from ``(x3, y3)`` to ``(x1, y1)``
:type points: tuple(coordinate) or list(coordinate)
:param int width: (optional) used for line thickness
| if width >= 1, used for line thickness (default is 1)
| if width < 1, nothing will be drawn
|
.. note::
When using ``width`` values ``> 1`` refer to the ``width`` notes
of :func:`line` for details on how thick lines grow.
:returns: a rect bounding the changed pixels, if nothing is drawn the
bounding rect's position will be the position of the first point in the
``points`` parameter (float values will be truncated) and its width and
height will be 0
:rtype: Rect
:raises ValueError: if ``len(points) < 2`` (must have at least 2 points)
:raises TypeError: if ``points`` is not a sequence or ``points`` does not
contain number pairs
.. versionchanged:: 2.0.0 Added support for keyword arguments.
.. ## pygame.draw.lines ##
.. function:: aaline
| :sl:`draw a straight antialiased line`
| :sg:`aaline(surface, color, start_pos, end_pos) -> Rect`
| :sg:`aaline(surface, color, start_pos, end_pos, blend=1) -> Rect`
Draws a straight antialiased line on the given surface.
The line has a thickness of one pixel and the endpoints have a height and
width of one pixel each.
The way a line and its endpoints are drawn:
If both endpoints are equal, only a single pixel is drawn (after
rounding floats to nearest integer).
Otherwise if the line is not steep (i.e. if the length along the x-axis
is greater than the height along the y-axis):
For each endpoint:
If ``x``, the endpoint's x-coordinate, is a whole number find
which pixels would be covered by it and draw them.
Otherwise:
Calculate the position of the nearest point with a whole number
for its x-coordinate, when extending the line past the
endpoint.
Find which pixels would be covered and how much by that point.
If the endpoint is the left one, multiply the coverage by (1 -
the decimal part of ``x``).
Otherwise multiply the coverage by the decimal part of ``x``.
Then draw those pixels.
*e.g.:*
| The left endpoint of the line ``((1, 1.3), (5, 3))`` would
cover 70% of the pixel ``(1, 1)`` and 30% of the pixel
``(1, 2)`` while the right one would cover 100% of the
pixel ``(5, 3)``.
| The left endpoint of the line ``((1.2, 1.4), (4.6, 3.1))``
would cover 56% *(i.e. 0.8 * 70%)* of the pixel ``(1, 1)``
and 24% *(i.e. 0.8 * 30%)* of the pixel ``(1, 2)`` while
the right one would cover 42% *(i.e. 0.6 * 70%)* of the
pixel ``(5, 3)`` and 18% *(i.e. 0.6 * 30%)* of the pixel
``(5, 4)`` while the right
Then for each point between the endpoints, along the line, whose
x-coordinate is a whole number:
Find which pixels would be covered and how much by that point and
draw them.
*e.g.:*
| The points along the line ``((1, 1), (4, 2.5))`` would be
``(2, 1.5)`` and ``(3, 2)`` and would cover 50% of the pixel
``(2, 1)``, 50% of the pixel ``(2, 2)`` and 100% of the pixel
``(3, 2)``.
| The points along the line ``((1.2, 1.4), (4.6, 3.1))`` would
be ``(2, 1.8)`` (covering 20% of the pixel ``(2, 1)`` and 80%
of the pixel ``(2, 2)``), ``(3, 2.3)`` (covering 70% of the
pixel ``(3, 2)`` and 30% of the pixel ``(3, 3)``) and ``(4,
2.8)`` (covering 20% of the pixel ``(2, 1)`` and 80% of the
pixel ``(2, 2)``)
Otherwise do the same for steep lines as for non-steep lines except
along the y-axis instead of the x-axis (using ``y`` instead of ``x``,
top instead of left and bottom instead of right).
.. note::
Regarding float values for coordinates, a point with coordinate
consisting of two whole numbers is considered being right in the center
of said pixel (and having a height and width of 1 pixel would therefore
completely cover it), while a point with coordinate where one (or both)
of the numbers have non-zero decimal parts would be partially covering
two (or four if both numbers have decimal parts) adjacent pixels, *e.g.*
the point ``(1.4, 2)`` covers 60% of the pixel ``(1, 2)`` and 40% of the
pixel ``(2,2)``.
:param Surface surface: surface to draw on
:param color: color to draw with, the alpha value is optional if using a
tuple ``(RGB[A])``
:type color: Color or int or tuple(int, int, int, [int])
:param start_pos: start position of the line, (x, y)
:type start_pos: tuple(int or float, int or float) or
list(int or float, int or float) or Vector2(int or float, int or float)
:param end_pos: end position of the line, (x, y)
:type end_pos: tuple(int or float, int or float) or
list(int or float, int or float) or Vector2(int or float, int or float)
:param int blend: (optional) (deprecated) if non-zero (default) the line will be blended
with the surface's existing pixel shades, otherwise it will overwrite them
:returns: a rect bounding the changed pixels, if nothing is drawn the
bounding rect's position will be the ``start_pos`` parameter value (float
values will be truncated) and its width and height will be 0
:rtype: Rect
:raises TypeError: if ``start_pos`` or ``end_pos`` is not a sequence of
two numbers
.. versionchanged:: 2.0.0 Added support for keyword arguments.
.. ## pygame.draw.aaline ##
.. function:: aalines
| :sl:`draw multiple contiguous straight antialiased line segments`
| :sg:`aalines(surface, color, closed, points) -> Rect`
| :sg:`aalines(surface, color, closed, points, blend=1) -> Rect`
Draws a sequence of contiguous straight antialiased lines on the given
surface.
:param Surface surface: surface to draw on
:param color: color to draw with, the alpha value is optional if using a
tuple ``(RGB[A])``
:type color: Color or int or tuple(int, int, int, [int])
:param bool closed: if ``True`` an additional line segment is drawn between
the first and last points in the ``points`` sequence
:param points: a sequence of 2 or more (x, y) coordinates, where each
*coordinate* in the sequence must be a
tuple/list/:class:`pygame.math.Vector2` of 2 ints/floats and adjacent
coordinates will be connected by a line segment, e.g. for the
points ``[(x1, y1), (x2, y2), (x3, y3)]`` a line segment will be drawn
from ``(x1, y1)`` to ``(x2, y2)`` and from ``(x2, y2)`` to ``(x3, y3)``,
additionally if the ``closed`` parameter is ``True`` another line segment
will be drawn from ``(x3, y3)`` to ``(x1, y1)``
:type points: tuple(coordinate) or list(coordinate)
:param int blend: (optional) (deprecated) if non-zero (default) each line will be blended
with the surface's existing pixel shades, otherwise the pixels will be
overwritten
:returns: a rect bounding the changed pixels, if nothing is drawn the
bounding rect's position will be the position of the first point in the
``points`` parameter (float values will be truncated) and its width and
height will be 0
:rtype: Rect
:raises ValueError: if ``len(points) < 2`` (must have at least 2 points)
:raises TypeError: if ``points`` is not a sequence or ``points`` does not
contain number pairs
.. versionchanged:: 2.0.0 Added support for keyword arguments.
.. ## pygame.draw.aalines ##
.. ## pygame.draw ##
.. figure:: code_examples/draw_module_example.png
:alt: draw module example
Example code for draw module.
.. literalinclude:: code_examples/draw_module_example.py

View file

@ -0,0 +1,565 @@
.. include:: common.txt
:mod:`pygame.event`
===================
.. module:: pygame.event
:synopsis: pygame module for interacting with events and queues
| :sl:`pygame module for interacting with events and queues`
Pygame handles all its event messaging through an event queue. The routines in
this module help you manage that event queue. The input queue is heavily
dependent on the :mod:`pygame.display` module. If the display has not been
initialized and a video mode not set, the event queue may not work properly.
The event queue has an upper limit on the number of events it can hold. When
the queue becomes full new events are quietly dropped. To prevent lost events,
especially input events which signal a quit command, your program must handle
events every frame (with ``pygame.event.get()``, ``pygame.event.pump()``,
``pygame.event.wait()``, ``pygame.event.peek()`` or ``pygame.event.clear()``)
and process them. Not handling events may cause your system to decide your
program has locked up. To speed up queue processing use
:func:`pygame.event.set_blocked()` to limit which events get queued.
To get the state of various input devices, you can forego the event queue and
access the input devices directly with their appropriate modules:
:mod:`pygame.mouse`, :mod:`pygame.key`, and :mod:`pygame.joystick`. If you use
this method, remember that pygame requires some form of communication with the
system window manager and other parts of the platform. To keep pygame in sync
with the system, you will need to call :func:`pygame.event.pump()` to keep
everything current. Usually, this should be called once per game loop.
Note: Joysticks will not send any events until the device has been initialized.
The event queue contains :class:`pygame.event.Event` event objects.
There are a variety of ways to access the queued events, from simply
checking for the existence of events, to grabbing them directly off the stack.
The event queue also offers some simple filtering which can slightly help
performance by blocking certain event types from the queue. Use
:func:`pygame.event.set_allowed()` and :func:`pygame.event.set_blocked()` to
change this filtering. By default, all event types can be placed on the queue.
All :class:`pygame.event.Event` instances contain an event type identifier
and attributes specific to that event type. The event type identifier is
accessible as the :attr:`pygame.event.Event.type` property. Any of the
event specific attributes can be accessed through the
:attr:`pygame.event.Event.__dict__` attribute or directly as an attribute
of the event object (as member lookups are passed through to the object's
dictionary values). The event object has no method functions. Users can create
their own new events with the :func:`pygame.event.Event()` function.
The event type identifier is in between the values of ``NOEVENT`` and
``NUMEVENTS``. User defined events should have a value in the inclusive range
of ``USEREVENT`` to ``NUMEVENTS - 1``. User defined events can get a custom
event number with :func:`pygame.event.custom_type()`.
It is recommended all user events follow this system.
Events support equality and inequality comparisons. Two events are equal if
they are the same type and have identical attribute values.
While debugging and experimenting, you can print an event object for a quick
display of its type and members. The function :func:`pygame.event.event_name()`
can be used to get a string representing the name of the event type.
Events that come from the system will have a guaranteed set of member
attributes based on the type. The following is a list of event types with their
specific attributes.
::
QUIT none
ACTIVEEVENT gain, state
KEYDOWN key, mod, unicode, scancode
KEYUP key, mod, unicode, scancode
MOUSEMOTION pos, rel, buttons, touch
MOUSEBUTTONUP pos, button, touch
MOUSEBUTTONDOWN pos, button, touch
JOYAXISMOTION joy (deprecated), instance_id, axis, value
JOYBALLMOTION joy (deprecated), instance_id, ball, rel
JOYHATMOTION joy (deprecated), instance_id, hat, value
JOYBUTTONUP joy (deprecated), instance_id, button
JOYBUTTONDOWN joy (deprecated), instance_id, button
VIDEORESIZE size, w, h
VIDEOEXPOSE none
USEREVENT code
.. versionchanged:: 2.0.0 The ``joy`` attribute was deprecated, ``instance_id`` was added.
.. versionchanged:: 2.0.1 The ``unicode`` attribute was added to ``KEYUP`` event.
Note that ``ACTIVEEVENT``, ``VIDEORESIZE`` and ``VIDEOEXPOSE`` are considered
as "legacy" events, the use of pygame2 ``WINDOWEVENT`` API is recommended over
the use of this older API.
You can also find a list of constants for keyboard keys
:ref:`here <key-constants-label>`.
A keyboard event occurs when a key is pressed (``KEYDOWN``) and when a key is released (``KEYUP``)
The ``key`` attribute of keyboard events contains the value of what key was pressed or released.
The ``mod`` attribute contains information about the state of keyboard modifiers (SHIFT, CTRL, ALT, etc.).
The ``unicode`` attribute stores the 16-bit unicode value of the key that was pressed or released.
The ``scancode`` attribute represents the physical location of a key on the keyboard.
The ``ACTIVEEVENT`` contains information about the application gaining or losing focus. The ``gain`` attribute
will be 1 if the mouse enters the window, otherwise ``gain`` will be 0. The ``state`` attribute will have a
value of ``SDL_APPMOUSEFOCUS`` if mouse focus was gained/lost, ``SDL_APPINPUTFOCUS`` if the application loses
or gains keyboard focus, or ``SDL_APPACTIVE`` if the application is minimized (``gain`` will be 0) or restored.
|
When compiled with SDL2, pygame has these additional events and their
attributes.
::
AUDIODEVICEADDED which, iscapture (SDL backend >= 2.0.4)
AUDIODEVICEREMOVED which, iscapture (SDL backend >= 2.0.4)
FINGERMOTION touch_id, finger_id, x, y, dx, dy
FINGERDOWN touch_id, finger_id, x, y, dx, dy
FINGERUP touch_id, finger_id, x, y, dx, dy
MOUSEWHEEL which, flipped, x, y, touch, precise_x, precise_y
MULTIGESTURE touch_id, x, y, pinched, rotated, num_fingers
TEXTEDITING text, start, length
TEXTINPUT text
.. versionadded:: 1.9.5
.. versionchanged:: 2.0.2 Fixed amount horizontal scroll (x, positive to the right and negative to the left).
.. versionchanged:: 2.0.2 The ``touch`` attribute was added to all the ``MOUSE`` events.
The ``touch`` attribute of ``MOUSE`` events indicates whether or not the events were generated
by a touch input device, and not a real mouse. You might want to ignore such events, if your application
already handles ``FINGERMOTION``, ``FINGERDOWN`` and ``FINGERUP`` events.
.. versionadded:: 2.1.3 Added ``precise_x`` and ``precise_y`` to ``MOUSEWHEEL`` events
``MOUSEWHEEL`` event occurs whenever the mouse wheel is moved.
The ``which`` attribute determines if the event was generated from a touch input device vs an actual
mousewheel.
The ``preciseX`` attribute contains a float with the amount scrolled horizontally (positive to the right,
negative to the left).
The ``preciseY`` attribute contains a float with the amount scrolled vertically (positive away from user,
negative towards user).
The ``flipped`` attribute determines if the values in x and y will be opposite or not. If ``SDL_MOUSEWHEEL_FLIPPED``
is defined, the direction of x and y will be opposite.
``TEXTEDITING`` event is triggered when a user activates an input method via hotkey or selecting an
input method in a GUI and starts typing
The ``which`` attribute for ``AUDIODEVICE*`` events is an integer representing the index for new audio
devices that are added. ``AUDIODEVICE*`` events are used to update audio settings or device list.
|
Many new events were introduced in pygame 2.
pygame can recognize text or files dropped in its window. If a file
is dropped, ``DROPFILE`` event will be sent, ``file`` will be its path.
The ``DROPTEXT`` event is only supported on X11.
``MIDIIN`` and ``MIDIOUT`` are events reserved for :mod:`pygame.midi` use.
``MIDI*`` events differ from ``AUDIODEVICE*`` events in that AUDIODEVICE
events are triggered when there is a state change related to an audio
input/output device.
pygame 2 also supports controller hot-plugging
::
Event name Attributes and notes
DROPFILE file
DROPBEGIN (SDL backend >= 2.0.5)
DROPCOMPLETE (SDL backend >= 2.0.5)
DROPTEXT text (SDL backend >= 2.0.5)
MIDIIN
MIDIOUT
CONTROLLERDEVICEADDED device_index
JOYDEVICEADDED device_index
CONTROLLERDEVICEREMOVED instance_id
JOYDEVICEREMOVED instance_id
CONTROLLERDEVICEREMAPPED instance_id
KEYMAPCHANGED (SDL backend >= 2.0.4)
CLIPBOARDUPDATE
RENDER_TARGETS_RESET (SDL backend >= 2.0.2)
RENDER_DEVICE_RESET (SDL backend >= 2.0.4)
LOCALECHANGED (SDL backend >= 2.0.14)
Also in this version, ``instance_id`` attributes were added to joystick events,
and the ``joy`` attribute was deprecated.
``KEYMAPCHANGED`` is a type of an event sent when keymap changes due to a
system event such as an input language or keyboard layout change.
``CLIPBOARDUPDATE`` is an event sent when clipboard changes. This can still
be considered as an experimental feature, some kinds of clipboard changes might
not trigger this event.
``LOCALECHANGED`` is an event sent when user locale changes
.. versionadded:: 2.0.0
.. versionadded:: 2.1.3 ``KEYMAPCHANGED``, ``CLIPBOARDUPDATE``,
``RENDER_TARGETS_RESET``, ``RENDER_DEVICE_RESET`` and ``LOCALECHANGED``
|
Since pygame 2.0.1, there are a new set of events, called window events.
Here is a list of all window events, along with a short description
::
Event type Short description
WINDOWSHOWN Window became shown
WINDOWHIDDEN Window became hidden
WINDOWEXPOSED Window got updated by some external event
WINDOWMOVED Window got moved
WINDOWRESIZED Window got resized
WINDOWSIZECHANGED Window changed its size
WINDOWMINIMIZED Window was minimized
WINDOWMAXIMIZED Window was maximized
WINDOWRESTORED Window was restored
WINDOWENTER Mouse entered the window
WINDOWLEAVE Mouse left the window
WINDOWFOCUSGAINED Window gained focus
WINDOWFOCUSLOST Window lost focus
WINDOWCLOSE Window was closed
WINDOWTAKEFOCUS Window was offered focus (SDL backend >= 2.0.5)
WINDOWHITTEST Window has a special hit test (SDL backend >= 2.0.5)
WINDOWICCPROFCHANGED Window ICC profile changed (SDL backend >= 2.0.18)
WINDOWDISPLAYCHANGED Window moved on a new display (SDL backend >= 2.0.18)
``WINDOWMOVED``, ``WINDOWRESIZED`` and ``WINDOWSIZECHANGED`` have ``x`` and
``y`` attributes, ``WINDOWDISPLAYCHANGED`` has a ``display_index`` attribute.
All windowevents have a ``window`` attribute.
.. versionadded:: 2.0.1
.. versionadded:: 2.1.3 ``WINDOWICCPROFCHANGED`` and ``WINDOWDISPLAYCHANGED``
|
On Android, the following events can be generated
::
Event type Short description
APP_TERMINATING OS is terminating the application
APP_LOWMEMORY OS is low on memory, try to free memory if possible
APP_WILLENTERBACKGROUND Application is entering background
APP_DIDENTERBACKGROUND Application entered background
APP_WILLENTERFOREGROUND Application is entering foreground
APP_DIDENTERFOREGROUND Application entered foreground
.. versionadded:: 2.1.3
|
.. function:: pump
| :sl:`internally process pygame event handlers`
| :sg:`pump() -> None`
For each frame of your game, you will need to make some sort of call to the
event queue. This ensures your program can internally interact with the rest
of the operating system. If you are not using other event functions in your
game, you should call ``pygame.event.pump()`` to allow pygame to handle
internal actions.
This function is not necessary if your program is consistently processing
events on the queue through the other :mod:`pygame.event` functions.
There are important things that must be dealt with internally in the event
queue. The main window may need to be repainted or respond to the system. If
you fail to make a call to the event queue for too long, the system may
decide your program has locked up.
.. caution::
This function should only be called in the thread that initialized :mod:`pygame.display`.
.. ## pygame.event.pump ##
.. function:: get
| :sl:`get events from the queue`
| :sg:`get(eventtype=None) -> Eventlist`
| :sg:`get(eventtype=None, pump=True) -> Eventlist`
| :sg:`get(eventtype=None, pump=True, exclude=None) -> Eventlist`
This will get all the messages and remove them from the queue. If a type or
sequence of types is given only those messages will be removed from the
queue and returned.
If a type or sequence of types is passed in the ``exclude`` argument
instead, then all only *other* messages will be removed from the queue. If
an ``exclude`` parameter is passed, the ``eventtype`` parameter *must* be
None.
If you are only taking specific events from the queue, be aware that the
queue could eventually fill up with the events you are not interested.
If ``pump`` is ``True`` (the default), then :func:`pygame.event.pump()` will be called.
.. versionchanged:: 1.9.5 Added ``pump`` argument
.. versionchanged:: 2.0.2 Added ``exclude`` argument
.. ## pygame.event.get ##
.. function:: poll
| :sl:`get a single event from the queue`
| :sg:`poll() -> Event instance`
Returns a single event from the queue. If the event queue is empty an event
of type ``pygame.NOEVENT`` will be returned immediately. The returned event
is removed from the queue.
.. caution::
This function should only be called in the thread that initialized :mod:`pygame.display`.
.. ## pygame.event.poll ##
.. function:: wait
| :sl:`wait for a single event from the queue`
| :sg:`wait() -> Event instance`
| :sg:`wait(timeout) -> Event instance`
Returns a single event from the queue. If the queue is empty this function
will wait until one is created. From pygame 2.0.0, if a ``timeout`` argument
is given, the function will return an event of type ``pygame.NOEVENT``
if no events enter the queue in ``timeout`` milliseconds. The event is removed
from the queue once it has been returned. While the program is waiting it will
sleep in an idle state. This is important for programs that want to share the
system with other applications.
.. versionchanged:: 2.0.0.dev13 Added ``timeout`` argument
.. caution::
This function should only be called in the thread that initialized :mod:`pygame.display`.
.. ## pygame.event.wait ##
.. function:: peek
| :sl:`test if event types are waiting on the queue`
| :sg:`peek(eventtype=None) -> bool`
| :sg:`peek(eventtype=None, pump=True) -> bool`
Returns ``True`` if there are any events of the given type waiting on the
queue. If a sequence of event types is passed, this will return ``True`` if
any of those events are on the queue.
If ``pump`` is ``True`` (the default), then :func:`pygame.event.pump()` will be called.
.. versionchanged:: 1.9.5 Added ``pump`` argument
.. ## pygame.event.peek ##
.. function:: clear
| :sl:`remove all events from the queue`
| :sg:`clear(eventtype=None) -> None`
| :sg:`clear(eventtype=None, pump=True) -> None`
Removes all events from the queue. If ``eventtype`` is given, removes the given event
or sequence of events. This has the same effect as :func:`pygame.event.get()` except ``None``
is returned. It can be slightly more efficient when clearing a full event queue.
If ``pump`` is ``True`` (the default), then :func:`pygame.event.pump()` will be called.
.. versionchanged:: 1.9.5 Added ``pump`` argument
.. ## pygame.event.clear ##
.. function:: event_name
| :sl:`get the string name from an event id`
| :sg:`event_name(type) -> string`
Returns a string representing the name (in CapWords style) of the given
event type.
"UserEvent" is returned for all values in the user event id range.
"Unknown" is returned when the event type does not exist.
.. versionchanged:: 2.5.0 Added support for keyword arguments.
.. ## pygame.event.event_name ##
.. function:: set_blocked
| :sl:`control which events are allowed on the queue`
| :sg:`set_blocked(type) -> None`
| :sg:`set_blocked(typelist) -> None`
| :sg:`set_blocked(None) -> None`
The given event types are not allowed to appear on the event queue. By
default all events can be placed on the queue. It is safe to disable an
event type multiple times.
If ``None`` is passed as the argument, ALL of the event types are blocked
from being placed on the queue.
.. ## pygame.event.set_blocked ##
.. function:: set_allowed
| :sl:`control which events are allowed on the queue`
| :sg:`set_allowed(type) -> None`
| :sg:`set_allowed(typelist) -> None`
| :sg:`set_allowed(None) -> None`
The given event types are allowed to appear on the event queue. By default,
all event types can be placed on the queue. It is safe to enable an event
type multiple times.
If ``None`` is passed as the argument, ALL of the event types are allowed
to be placed on the queue.
.. ## pygame.event.set_allowed ##
.. function:: get_blocked
| :sl:`test if a type of event is blocked from the queue`
| :sg:`get_blocked(type) -> bool`
| :sg:`get_blocked(typelist) -> bool`
Returns ``True`` if the given event type is blocked from the queue. If a
sequence of event types is passed, this will return ``True`` if any of those
event types are blocked.
.. ## pygame.event.get_blocked ##
.. function:: set_grab
| :sl:`control the sharing of input devices with other applications`
| :sg:`set_grab(bool) -> None`
When your program runs in a windowed environment, it will share the mouse
and keyboard devices with other applications that have focus. If your
program sets the event grab to ``True``, it will lock all input into your
program.
It is best to not always grab the input, since it prevents the user from
doing other things on their system.
.. ## pygame.event.set_grab ##
.. function:: get_grab
| :sl:`test if the program is sharing input devices`
| :sg:`get_grab() -> bool`
Returns ``True`` when the input events are grabbed for this application.
.. ## pygame.event.get_grab ##
.. function:: set_keyboard_grab
| :sl:`grab enables capture of system keyboard shortcuts like Alt+Tab or the Meta/Super key.`
| :sg:`set_keyboard_grab(bool) -> None`
Keyboard grab enables capture of system keyboard shortcuts like Alt+Tab or the Meta/Super key.
Note that not all system keyboard shortcuts can be captured by applications (one example is Ctrl+Alt+Del on Windows).
This is primarily intended for specialized applications such as VNC clients or VM frontends. Normal games should not use keyboard grab.
.. versionadded:: 2.5.0
.. ## pygame.event.set_keyboard_grab ##
.. function:: get_keyboard_grab
| :sl:`get the current keyboard grab state`
| :sg:`get_keyboard_grab() -> bool`
Returns ``True`` when keyboard grab is enabled.
.. versionadded:: 2.5.0
.. ## pygame.event.get_keyboard_grab ##
.. function:: post
| :sl:`place a new event on the queue`
| :sg:`post(Event) -> bool`
Places the given event at the end of the event queue.
This is usually used for placing custom events on the event queue.
Any type of event can be posted, and the events posted can have any attributes.
This returns a boolean on whether the event was posted or not. Blocked events
cannot be posted, and this function returns ``False`` if you try to post them.
.. versionchanged:: 2.0.1 returns a boolean, previously returned ``None``
.. ## pygame.event.post ##
.. function:: custom_type
| :sl:`make custom user event type`
| :sg:`custom_type() -> int`
Reserves a ``pygame.USEREVENT`` for a custom use.
If too many events are made a :exc:`pygame.error` is raised.
.. versionadded:: 2.0.0.dev3
.. ## pygame.event.custom_type ##
.. class:: Event
| :sl:`pygame object for representing events`
| :sg:`Event(type, dict) -> Event`
| :sg:`Event(type, \**attributes) -> Event`
A pygame object used for representing an event. ``Event`` instances
support attribute assignment and deletion.
When creating the object, the attributes may come from a dictionary
argument with string keys or from keyword arguments.
.. note::
From version 2.1.3 ``EventType`` is an alias for ``Event``. Beforehand,
``Event`` was a function that returned ``EventType`` instances. Use of
``Event`` is preferred over ``EventType`` wherever it is possible, as
the latter could be deprecated in a future version.
.. attribute:: type
| :sl:`event type identifier.`
| :sg:`type -> int`
Read-only. The event type identifier. For user created event
objects, this is the ``type`` argument passed to
:func:`pygame.event.Event()`.
For example, some predefined event identifiers are ``QUIT`` and
``MOUSEMOTION``.
.. ## pygame.event.Event.type ##
.. attribute:: __dict__
| :sl:`event attribute dictionary`
| :sg:`__dict__ -> dict`
Read-only. The event type specific attributes of an event. The
``dict`` attribute is a synonym for backward compatibility.
For example, the attributes of a ``KEYDOWN`` event would be ``unicode``,
``key``, and ``mod``
.. ## pygame.event.Event.__dict__ ##
.. versionadded:: 1.9.2 Mutable attributes.
.. ## pygame.event.Event ##
.. ## pygame.event ##

View file

@ -0,0 +1,451 @@
.. include:: common.txt
:mod:`pygame.examples`
======================
.. module:: pygame.examples
:synopsis: module of example programs
| :sl:`module of example programs`
These examples should help get you started with pygame. Here is a brief rundown
of what you get. The source code for these examples is in the public domain.
Feel free to use for your own projects.
There are several ways to run the examples. First they can be run as
stand-alone programs. Second they can be imported and their ``main()`` methods
called (see below). Finally, the easiest way is to use the python -m option:
::
python -m pygame.examples.<example name> <example arguments>
eg:
::
python -m pygame.examples.scaletest someimage.png
Resources such as images and sounds for the examples are found in the
pygame/examples/data subdirectory.
You can find where the example files are installed by using the following
commands inside the python interpreter.
::
>>> import pygame.examples.scaletest
>>> pygame.examples.scaletest.__file__
'/usr/lib/python2.6/site-packages/pygame/examples/scaletest.py'
On each OS and version of Python the location will be slightly different.
For example on Windows it might be in 'C:/Python26/Lib/site-packages/pygame/examples/'
On Mac OS X it might be in '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pygame/examples/'
You can also run the examples in the python interpreter by calling each modules main() function.
::
>>> import pygame.examples.scaletest
>>> pygame.examples.scaletest.main()
We're always on the lookout for more examples and/or example requests. Code
like this is probably the best way to start getting involved with python
gaming.
examples as a package is new to pygame 1.9.0. But most of the examples came with
pygame much earlier.
.. function:: aliens.main
| :sl:`play the full aliens example`
| :sg:`aliens.main() -> None`
This started off as a port of the ``SDL`` demonstration, Aliens. Now it has
evolved into something sort of resembling fun. This demonstrates a lot of
different uses of sprites and optimized blitting. Also transparency,
colorkeys, fonts, sound, music, joystick, and more. (PS, my high score is
117! goodluck)
.. ## pygame.examples.aliens.main ##
.. function:: stars.main
| :sl:`run a simple starfield example`
| :sg:`stars.main() -> None`
A simple starfield example. You can change the center of perspective by
leftclicking the mouse on the screen.
.. ## pygame.examples.stars.main ##
.. function:: chimp.main
| :sl:`hit the moving chimp`
| :sg:`chimp.main() -> None`
This simple example is derived from the line-by-line tutorial that comes
with pygame. It is based on a 'popular' web banner. Note there are comments
here, but for the full explanation, follow along in the tutorial.
.. ## pygame.examples.chimp.main ##
.. function:: moveit.main
| :sl:`display animated objects on the screen`
| :sg:`moveit.main() -> None`
This is the full and final example from the Pygame Tutorial, "How Do I Make
It Move". It creates 10 objects and animates them on the screen.
Note it's a bit scant on error checking, but it's easy to read. :]
Fortunately, this is python, and we needn't wrestle with a pile of error
codes.
.. ## pygame.examples.moveit.main ##
.. function:: fonty.main
| :sl:`run a font rendering example`
| :sg:`fonty.main() -> None`
Super quick, super simple application demonstrating the different ways to
render fonts with the font module
.. ## pygame.examples.fonty.main ##
.. function:: freetype_misc.main
| :sl:`run a FreeType rendering example`
| :sg:`freetype_misc.main() -> None`
A showcase of rendering features the :class:`pygame.freetype.Font`
class provides in addition to those available with :class:`pygame.font.Font`.
It is a demonstration of direct to surface rendering, with vertical text
and rotated text, opaque text and semi transparent text, horizontally
stretched text and vertically stretched text.
.. ## pygame.examples.fonty.main ##
.. function:: vgrade.main
| :sl:`display a vertical gradient`
| :sg:`vgrade.main() -> None`
Demonstrates creating a vertical gradient with pixelcopy and NumPy python.
The app will create a new gradient every half second and report the time
needed to create and display the image. If you're not prepared to start
working with the NumPy arrays, don't worry about the source for this one :]
.. ## pygame.examples.vgrade.main ##
.. function:: eventlist.main
| :sl:`display pygame events`
| :sg:`eventlist.main() -> None`
Eventlist is a sloppy style of pygame, but is a handy tool for learning
about pygame events and input. At the top of the screen are the state of
several device values, and a scrolling list of events are displayed on the
bottom.
This is not quality 'ui' code at all, but you can see how to implement very
non-interactive status displays, or even a crude text output control.
.. ## pygame.examples.eventlist.main ##
.. function:: arraydemo.main
| :sl:`show various surfarray effects`
| :sg:`arraydemo.main(arraytype=None) -> None`
Another example filled with various surfarray effects. It requires the
surfarray and image modules to be installed. This little demo can also make
a good starting point for any of your own tests with surfarray
The ``arraytype`` parameter is deprecated; passing any value besides 'numpy'
will raise ValueError.
.. ## pygame.examples.arraydemo.main ##
.. function:: sound.main
| :sl:`load and play a sound`
| :sg:`sound.main(file_path=None) -> None`
Extremely basic testing of the mixer module. Load a sound and play it. All
from the command shell, no graphics.
If provided, use the audio file 'file_path', otherwise use a default file.
``sound.py`` optional command line argument: an audio file
.. ## pygame.examples.sound.main ##
.. function:: sound_array_demos.main
| :sl:`play various sndarray effects`
| :sg:`sound_array_demos.main(arraytype=None) -> None`
Uses sndarray and NumPy to create offset faded copies of the
original sound. Currently it just uses hardcoded values for the number of
echoes and the delay. Easy for you to recreate as needed.
The ``arraytype`` parameter is deprecated; passing any value besides 'numpy'
will raise ValueError.
.. ## pygame.examples.sound_array_demos.main ##
.. function:: liquid.main
| :sl:`display an animated liquid effect`
| :sg:`liquid.main() -> None`
This example was created in a quick comparison with the BlitzBasic gaming
language. Nonetheless, it demonstrates a quick 8-bit setup (with colormap).
.. ## pygame.examples.liquid.main ##
.. function:: glcube.main
| :sl:`display an animated 3D cube using OpenGL`
| :sg:`glcube.main() -> None`
Using PyOpenGL and pygame, this creates a spinning 3D multicolored cube.
.. ## pygame.examples.glcube.main ##
.. function:: scrap_clipboard.main
| :sl:`access the clipboard`
| :sg:`scrap_clipboard.main() -> None`
A simple demonstration example for the clipboard support.
.. ## pygame.examples.scrap_clipboard.main ##
.. function:: mask.main
| :sl:`display multiple images bounce off each other using collision detection`
| :sg:`mask.main(*args) -> None`
Positional arguments:
::
one or more image file names.
This ``pygame.masks`` demo will display multiple moving sprites bouncing off
each other. More than one sprite image can be provided.
If run as a program then ``mask.py`` takes one or more image files as
command line arguments.
.. ## pygame.examples.mask.main ##
.. function:: testsprite.main
| :sl:`show lots of sprites moving around`
| :sg:`testsprite.main(update_rects = True, use_static = False, use_FastRenderGroup = False, screen_dims = [640, 480], use_alpha = False, flags = 0) -> None`
Optional keyword arguments:
::
update_rects - use the RenderUpdate sprite group class
use_static - include non-moving images
use_FastRenderGroup - Use the FastRenderGroup sprite group
screen_dims - pygame window dimensions
use_alpha - use alpha blending
flags - additional display mode flags
Like the ``testsprite.c`` that comes with SDL, this pygame version shows
lots of sprites moving around.
If run as a stand-alone program then no command line arguments are taken.
.. ## pygame.examples.testsprite.main ##
.. function:: headless_no_windows_needed.main
| :sl:`write an image file that is smoothscaled copy of an input file`
| :sg:`headless_no_windows_needed.main(fin, fout, w, h) -> None`
arguments:
::
fin - name of an input image file
fout - name of the output file to create/overwrite
w, h - size of the rescaled image, as integer width and height
How to use pygame with no windowing system, like on headless servers.
Thumbnail generation with scaling is an example of what you can do with
pygame.
``NOTE``: the pygame scale function uses MMX/SSE if available, and can be
run in multiple threads.
If ``headless_no_windows_needed.py`` is run as a program it takes the
following command line arguments:
::
-scale inputimage outputimage new_width new_height
eg. -scale in.png outpng 50 50
.. ## pygame.examples.headless_no_windows_needed.main ##
.. function:: joystick.main
| :sl:`demonstrate joystick functionality`
| :sg:`joystick.main() -> None`
A demo showing full joystick support.
.. versionadded:: 2.0.2
.. ## pygame.examples.joystick.main ##
.. function:: blend_fill.main
| :sl:`demonstrate the various surface.fill method blend options`
| :sg:`blend_fill.main() -> None`
A interactive demo that lets one choose which BLEND_xxx option to apply to a
surface.
.. ## pygame.examples.blend_fill.main ##
.. function:: blit_blends.main
| :sl:`uses alternative additive fill to that of surface.fill`
| :sg:`blit_blends.main() -> None`
Fake additive blending. Using NumPy. it doesn't clamp. Press r,g,b Somewhat
like blend_fill.
.. ## pygame.examples.blit_blends.main ##
.. function:: cursors.main
| :sl:`display two different custom cursors`
| :sg:`cursors.main() -> None`
Display an arrow or circle with crossbar cursor.
.. ## pygame.examples.cursors.main ##
.. function:: pixelarray.main
| :sl:`display various pixelarray generated effects`
| :sg:`pixelarray.main() -> None`
Display various pixelarray generated effects.
.. ## pygame.examples.pixelarray.main ##
.. function:: scaletest.main
| :sl:`interactively scale an image using smoothscale`
| :sg:`scaletest.main(imagefile, convert_alpha=False, run_speed_test=True) -> None`
arguments:
::
imagefile - file name of source image (required)
convert_alpha - use convert_alpha() on the surf (default False)
run_speed_test - (default False)
A smoothscale example that resized an image on the screen. Vertical and
horizontal arrow keys are used to change the width and height of the
displayed image. If the convert_alpha option is True then the source image
is forced to have source alpha, whether or not the original images does. If
run_speed_test is True then a background timing test is performed instead of
the interactive scaler.
If ``scaletest.py`` is run as a program then the command line options are:
::
ImageFile [-t] [-convert_alpha]
[-t] = Run Speed Test
[-convert_alpha] = Use convert_alpha() on the surf.
.. ## pygame.examples.scaletest.main ##
.. function:: midi.main
| :sl:`run a midi example`
| :sg:`midi.main(mode='output', device_id=None) -> None`
Arguments:
::
mode - if 'output' run a midi keyboard output example
'input' run a midi event logger input example
'list' list available midi devices
(default 'output')
device_id - midi device number; if None then use the default midi input or
output device for the system
The output example shows how to translate mouse clicks or computer keyboard
events into midi notes. It implements a rudimentary button widget and state
machine.
The input example shows how to translate midi input to pygame events.
With the use of a virtual midi patch cord the output and input examples can
be run as separate processes and connected so the keyboard output is
displayed on a console.
new to pygame 1.9.0
.. ## pygame.examples.midi.main ##
.. function:: scroll.main
| :sl:`run a Surface.scroll example that shows a magnified image`
| :sg:`scroll.main(image_file=None) -> None`
This example shows a scrollable image that has a zoom factor of eight. It
uses the :meth:`Surface.scroll() <pygame.Surface.scroll>`
function to shift the image on the display surface.
A clip rectangle protects a margin area. If called as a function,
the example accepts an optional image file path. If run as a program it
takes an optional file path command line argument. If no file is provided a
default image file is used.
When running click on a black triangle to move one pixel in the direction
the triangle points. Or use the arrow keys. Close the window or press
``ESC`` to quit.
.. ## pygame.examples.scroll.main ##
.. function:: camera.main
| :sl:`display video captured live from an attached camera`
| :sg:`camera.main() -> None`
A simple live video player, it uses the first available camera it finds on
the system.
.. ## pygame.examples.camera.main ##
.. function:: playmus.main
| :sl:`play an audio file`
| :sg:`playmus.main(file_path) -> None`
A simple music player with window and keyboard playback control. Playback can
be paused and rewound to the beginning.
.. ## pygame.examples.playmus.main ##
.. ## pygame.examples ##

View file

@ -0,0 +1,109 @@
.. include:: common.txt
:mod:`pygame.fastevent`
=======================
.. module:: pygame.fastevent
:synopsis: pygame module for interacting with events and queues from multiple
threads.
| :sl:`pygame module for interacting with events and queues`
IMPORTANT NOTE: THIS MODULE IS DEPRECATED IN PYGAME 2.2
In older pygame versions before pygame 2, :mod:`pygame.event` was not well
suited for posting events from different threads. This module served as a
replacement (with less features) for multithreaded use. Now, the usage of this
module is highly discouraged in favour of use of the main :mod:`pygame.event`
module. This module will be removed in a future pygame version.
Below, the legacy docs of the module is provided
.. function:: init
| :sl:`initialize pygame.fastevent`
| :sg:`init() -> None`
Initialize the pygame.fastevent module.
.. ## pygame.fastevent.init ##
.. function:: get_init
| :sl:`returns True if the fastevent module is currently initialized`
| :sg:`get_init() -> bool`
Returns True if the pygame.fastevent module is currently initialized.
.. ## pygame.fastevent.get_init ##
.. function:: pump
| :sl:`internally process pygame event handlers`
| :sg:`pump() -> None`
For each frame of your game, you will need to make some sort of call to the
event queue. This ensures your program can internally interact with the rest
of the operating system.
This function is not necessary if your program is consistently processing
events on the queue through the other :mod:`pygame.fastevent` functions.
There are important things that must be dealt with internally in the event
queue. The main window may need to be repainted or respond to the system. If
you fail to make a call to the event queue for too long, the system may
decide your program has locked up.
.. ## pygame.fastevent.pump ##
.. function:: wait
| :sl:`wait for an event`
| :sg:`wait() -> Event`
Returns the current event on the queue. If there are no messages
waiting on the queue, this will not return until one is available.
Sometimes it is important to use this wait to get events from the queue,
it will allow your application to idle when the user isn't doing anything
with it.
.. ## pygame.fastevent.wait ##
.. function:: poll
| :sl:`get an available event`
| :sg:`poll() -> Event`
Returns next event on queue. If there is no event waiting on the queue,
this will return an event with type NOEVENT.
.. ## pygame.fastevent.poll ##
.. function:: get
| :sl:`get all events from the queue`
| :sg:`get() -> list of Events`
This will get all the messages and remove them from the queue.
.. ## pygame.fastevent.get ##
.. function:: post
| :sl:`place an event on the queue`
| :sg:`post(Event) -> None`
This will post your own event objects onto the event queue. You can post
any event type you want, but some care must be taken. For example, if you
post a MOUSEBUTTONDOWN event to the queue, it is likely any code receiving
the event will expect the standard MOUSEBUTTONDOWN attributes to be
available, like 'pos' and 'button'.
Because pygame.fastevent.post() may have to wait for the queue to empty,
you can get into a dead lock if you try to append an event on to a full
queue from the thread that processes events. For that reason I do not
recommend using this function in the main thread of an SDL program.
.. ## pygame.fastevent.post ##
.. ## pygame.fastevent ##

Some files were not shown because too many files have changed in this diff Show more