1
0
Fork 0
mirror of https://github.com/shlomif/PySolFC.git synced 2025-04-05 00:02:29 -04:00

Compare commits

...

19 commits

Author SHA1 Message Date
Shlomi Fish
961634e685 travis ci: fix #1 - failing tests 2019-04-08 20:03:53 +03:00
Shlomi Fish
3ce505826e add credits 2019-04-08 19:03:49 +03:00
Shlomi Fish
d082812426 convert to markdown 2019-04-08 18:53:24 +03:00
Shlomi Fish
d3561e0e77 merge differences between */toolbar.py.
Refactoring.
2019-04-08 18:34:27 +03:00
Shlomi Fish
a452aba812 update the logo url in the html. 2019-04-08 17:45:44 +03:00
ghostofiht
1477ee275e
logo updated 2019-04-08 16:28:17 +03:00
ghostofiht
a54b87c722
Delete logo_horizontal.svg 2019-04-08 16:28:03 +03:00
ghostofiht
dbba3af299
logo updated 2019-04-08 16:24:46 +03:00
ghostofiht
18b4171e7f
Delete logo_horizontal.png.svg 2019-04-08 16:24:33 +03:00
ghostofiht
24ff063652
logo updated 2019-04-08 16:23:40 +03:00
ghostofiht
f919ff690e
logo added 2019-04-08 15:52:58 +03:00
ghostofiht
4126d48c78
logo updated 2019-04-08 15:46:47 +03:00
Shlomi Fish
0696750457 bump version to 2.6.3 2019-04-07 13:40:31 +03:00
Shlomi Fish
7593aaed4c First version of the NEWS file.
Based on the site's front page - thanks to https://pandoc.org/ .
2019-04-06 21:48:38 +03:00
Shlomi Fish
1d3ffc4e1d Try fixing issue #108 - compat with pillow 6.0
See https://github.com/shlomif/PySolFC/issues/108 .
2019-04-05 17:37:04 +03:00
Shlomi Fish
2e67242e92 Fix the window size on startup.
See https://github.com/shlomif/PySolFC/issues/84 :

<<<

Yes, I can confirm that the "Save games geometry" option is present in
that build, and that it works! +1

The default startup window looks like this though (which is something
that should be addressed):

>>>
2019-04-05 16:26:55 +03:00
Shlomi Fish
48e24c2021 try fix save games geometry.
See https://github.com/shlomif/PySolFC/issues/84 .
2019-04-04 13:11:44 +03:00
Shlomi Fish
80252696c8 try restore Save game geometry on USE_PIL.
See https://github.com/shlomif/PySolFC/issues/84 .
2019-04-04 12:39:24 +03:00
Shlomi Fish
5438388789 ignore the cardset files.
See https://github.com/shlomif/PySolFC/issues/101 . Thanks to
@scottfurry .
2019-04-04 01:54:23 +03:00
24 changed files with 546 additions and 92 deletions

7
.gitignore vendored
View file

@ -15,3 +15,10 @@
/po/ru.po
/tests/individually-importing/*.py
/tests/unit-generated/*.py
# output of min card actions
# mask out folder/archives
PySolFC-Cardsets--Minimal-2.0/
PySolFC-Cardsets--Minimal-2.0.*
PySolFC-Cardsets-2.0/
PySolFC-Cardsets-2.0.*

View file

@ -37,6 +37,7 @@ before_install:
- if test "$TRAVIS_OS_NAME" = "osx" ; then export CPPFLAGS="$CPPFLAGS -I$(brew --prefix openssl)/include" PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig:$PKG_CONFIG_PATH" LDFLAGS="$LDFLAGS -L$(brew --prefix openssl)/lib" ;fi
- if test "$TRAVIS_OS_NAME" = "osx" ; then wget --content-disposition https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/minimal/PySolFC-Cardsets--Minimal-2.0.tar.xz/download && tar xJf PySolFC-Cardsets--Minimal-2.0.tar.xz && mv PySolFC-Cardsets--Minimal-2.0/cardset-* data ; fi
install:
- sudo cpanm --notest Capture::Tiny
- sudo cpanm Code::TidyAll::Plugin::Flake8 Perl::Tidy Test::Code::TidyAll Test::Differences Test::TrailingSpace
- export PY_MODS='pycotap random2 six'
- "`which python3` -m pip install --upgrade flake8 flake8-import-order $PY_MODS"

37
AUTHORS
View file

@ -1,37 +0,0 @@
Main Authors
============
Markus Franz Xaver Johannes Oberhumer <markus@oberhumer.com>
author of PySol
T. Kirk
author of Ultrasol
Skomoroh <skomoroh@users.sourceforge.net>
author of PySolFC
Brian Lenihan <brianl@users.sourceforge.net>
macOS package maintainer
Shlomi Fish ( http://www.shlomifish.org/ )
Continued PySolFC maintenance, port to python 3, test suite
(Note: he places all his changes under the MIT/Expat licence).
https://github.com/lufebe16
Added the Kivy toolkit
Roderik Ploszek ( https://github.com/Programator2 )
Fixes and enhancements
Games contributors
==================
Mark Andrews
Galen Brooks <galen@nine.com>
Andrew Csillag <drew_csillag@geocities.com>
Michael Foord
Matthew Hohlfeld <hohlfeld@cs.ucsd.edu>
Nicola Larosa
John Stoneham <obijohn99@aol.com>
David Svoboda <svoboda@users.sourceforge.net>
Translations
============
Holger Schäkel <Holger@Schaekel-row.de> (de)
Jerzy Trzeciak <artusek@wp.pl> (pl)

42
AUTHORS.md Normal file
View file

@ -0,0 +1,42 @@
Main Authors
============
* Markus Franz Xaver Johannes Oberhumer https://www.oberhumer.com/
* Author of PySol
* T. Kirk
* Author of Ultrasol
* [Skomoroh](https://sourceforge.net/u/skomoroh/profile/)
* Author of PySolFC
* [Brian Lenihan](https://sourceforge.net/u/brianl/profile/)
* macOS package maintainer
* [Shlomi Fish](https://www.shlomifish.org/)
* Continued PySolFC maintenance, port to python 3, test suite (Note: he places all his changes under the Expat licence).
* https://github.com/lufebe16
* Added the Kivy toolkit
* [Roderik Ploszek](https://github.com/Programator2)
* Fixes and enhancements
Games contributors
==================
* Mark Andrews
* Galen Brooks <galen@nine.com>
* Andrew Csillag <drew_csillag@geocities.com>
* Michael Foord
* Matthew Hohlfeld <hohlfeld@cs.ucsd.edu>
* Nicola Larosa
* John Stoneham <obijohn99@aol.com>
* David Svoboda <svoboda@users.sourceforge.net>
Enhancements
============
* [ghostofiht](https://github.com/ghostofiht) - Contributed a new logo design.
* [Trueno font](https://fontlibrary.org/en/font/trueno) under the [OFL](https://en.wikipedia.org/wiki/SIL_Open_Font_License) by [Julieta Ulanovsky](http://www.zkysky.com.ar/) - used in the logo.
Translations
============
* Holger Schäkel <Holger@Schaekel-row.de> (de)
* Jerzy Trzeciak <artusek@wp.pl> (pl)

111
NEWS.asciidoc Normal file
View file

@ -0,0 +1,111 @@
[[news]]
=== News
* _7 April, 2019:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.6.3/[PySolFC
v2.6.3]. New in this release:
** Compatibility with Pillow 6.x - https://github.com/shlomif/PySolFC/issues/108
** Restore the "Save games geometry" feature - https://github.com/shlomif/PySolFC/issues/84
** Added a NEWS.asciidoc file.
* _4 March, 2019:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.6.2/[PySolFC
v2.6.2]. New in this release:
** Fixes for the Windows and macOS packages.
** Forbid illegal moves in Spider and some other variants.
* _14 February, 2019:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.6.0/[PySolFC
v2.6.0]. New in this release:
** Support for solving
https://en.wikipedia.org/wiki/Golf_(patience)[Golf] using
https://github.com/shlomif/black-hole-solitaire[a solver]
** An untested macOS package (we need testers)
** A https://sourceforge.net/p/pysolfc/bugs/31/[bug] fix
** Ability to run the test suite without python 2.x and/or pygtk
** Code cleanups.
* _23 June, 2018:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.4.0/[PySolFC
v2.4.0]. New in this release:
** The Windows installer now includes the revitalised PySol-music
package. For more info, see
https://github.com/shlomif/PySolFC/issues/82[this bug].
** Many improvements to the test suite and the board import
functionality.
** Some bug fixes.
* _16 April, 2018:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.2.0/[PySolFC
v2.2.0]. New in this release:
** The Microsoft Windows binary installer now contains and supports the
solver for Freecell and other games.
** Many bug fixes.
* _31 March, 2018:_ There is a new beta release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.1/[PySolFC
v2.1.4]. New in this release:
** We now provide a Microsoft Windows binary installer again, thanks to
the great work of https://github.com/Programator2[Roderik Ploszek]. Note
that the solvers (for FreeCell/etc.) are not installed as part of it
yet, but they are available separately.
** https://github.com/shlomif/pysol-sound-server[pysol-sound-server] was
updated to support Python 3.x.
** Fixes for the board export / solver input, and for redealing upon
restart of the "ms*" deals.
** Various cleanups.
* _5 March, 2018:_ There is a new beta source release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.1/[PySolFC
v2.1.3]. New in this release:
** Support for the https://kivy.org/[kivy] toolkit for running under
Android-based devices (currently python 2.7-only)
** Fixed the help system and removed the need for the sgmllib module.
** Other fixes and cleanups.
** Currently there is no Microsoft Windows binary package. Help or
insights will be appreciated.
* _19 November, 2017:_ There is a new beta source release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.1/[PySolFC
v2.1.0], the first one in almost 8 years. New in this release:
** The code is now compatible with both Python 2.7.x and Python 3.x
** One can deal all
https://fc-solve.shlomifish.org/faq.html#what_are_ms_deals[MS
FreeCell/FC-pro deals] by specifying e.g: "ms100000" as the seed.
** Support for Black Hole and All in a Row solver was added.
** Test suite and CI were added to the repository.
** The code now passes flake8 validation.
** Some improvements to the solver dialog.
* _15 November, 2017:_ Development of the Python sources has recently
resumed using a https://github.com/shlomif/PySolFC[a GitHub project] and
other resources and Shlomi Fish (@shlomif) has received an admin status
on the SourceForge project and this site. A new source release which
adds compatibility with Python version 3.x and some other improvements
is expected soon.
* _04 December, 2009:_
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.0/[PySolFC
v.2.0] (1061 games) and
https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-2.0/[PySolFC-Cardsets
v.2.0] (153 cardsets)
** The license was changed to the GPLv3 or newer.
** 13 new games.
** Migration to new
https://code.google.com/archive/p/python-ttk/[python-ttk] module.
** Improved the look of the deck (required
http://effbot.org/downloads/#pil[python-imaging v.1.1.7]).
** Fixed Hanafuda games
(https://sourceforge.net/p/pysolfc/bugs/9/[ticket]).
** New config-file option: sound_sample_buffer_size
(https://sourceforge.net/p/pysolfc/bugs/10/[ticket]).
** Portable version for windows
(https://sourceforge.net/p/pysolfc/patches/3/[ticket]).
** Many other bugfixes.
* _06 September, 2007:_
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-1.1/[PySolFC
v.1.1] (1048 games)
** 48 new games (one game was removed)
** Solitaire Wizard
** improved Mahjongg games
** human readable config file (options.cfg)
** stack becomes compact when a card goes off screen
** Clearlooks theme for Tile widget set
** a huge number of other improvements
* _30 August, 2007:_
https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-1.1/[PySolFC-Cardsets
v.1.1] (152 cardsets)
* _21 February, 2007:_
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-1.0/[PySolFC
v.1.0] (1001 games)

View file

@ -1,3 +1,5 @@
<p align="center"><img src="html-src/images/high_res/logo_horizontal.png" alt="StretchView" height="180px"></p>
# PySol Fan Club edition
This is an open source and portable (Windows, Linux and Mac OS X) collection

View file

@ -30,6 +30,13 @@ try:
except Exception:
pass
def merge_dicts(x, y):
ret = x.copy()
ret.update(y)
return ret
pysollib_path = os.path.join(sys.path[0], pysollib_dir)
sys.path[0] = os.path.normpath(pysollib_path)
# print sys.path
@ -67,6 +74,12 @@ wikipedia_files = [
('fourseasons.html', 'PySol - Rules for Four Seasons'),
]
def _fmt(fmt, params):
return fmt % merge_dicts(params, {'logo_url': "images/pysollogo03.png",
'logo_alt': "PySol FC Logo"})
main_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
@ -76,7 +89,7 @@ main_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
</head>
<body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099"
alink="#FF0000">
<img src="images/pysollogo03.gif" alt="">
<img src="%(logo_url)s" alt="%(logo_alt)s">
<br>
'''
main_footer = '''
@ -95,7 +108,7 @@ rules_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
</head>
<body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099"
link="#FF0000">
<img src="../images/pysollogo03.gif" alt="">
<img src="../%(logo_url)s" alt="%(logo_alt)s">
<br>
'''
rules_footer = '''
@ -120,7 +133,7 @@ wikipedia_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
</head>
<body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099"
alink="#FF0000">
<img src="../images/pysollogo03.gif" alt="">
<img src="../%(logo_url)s" alt="%(logo_alt)s">
<br>
'''
@ -134,13 +147,13 @@ def getGameRulesFilename(n):
def gen_main_html():
for infile, title in files:
outfile = open(os.path.join('html', infile), 'w')
print(main_header % {'title': title}, file=outfile)
print(_fmt(main_header, {'title': title}), file=outfile)
with open(infile, 'r') as file:
print(file.read(), file=outfile)
s = '<a href="index.html">Back to the index</a>'
if infile == 'index.html':
s = ''
print(main_footer % {'back_to_index_link': s}, file=outfile)
print(_fmt(main_footer, {'back_to_index_link': s}), file=outfile)
outfile.close()
@ -164,7 +177,7 @@ def gen_rules_html():
# open file of list of all rules
out_rules = open(os.path.join('html', 'rules.html'), 'w')
print(main_header % {'title': 'PySol - a Solitaire Game Collection'},
print(_fmt(main_header, {'title': 'PySol - a Solitaire Game Collection'}),
file=out_rules)
with open('rules.html', 'r') as file:
print(file.read(), file=out_rules)
@ -212,15 +225,16 @@ def gen_rules_html():
for n in gi.altnames:
altnames.append((n, rules_fn))
print('</ul>\n' + main_footer %
{'back_to_index_link': '<a href="index.html">Back to the index</a>'},
print('</ul>\n' + _fmt(main_footer,
{'back_to_index_link':
'<a href="index.html">Back to the index</a>'}),
file=out_rules)
out_rules.close()
# create file of altnames
out_rules_alt = open(os.path.join('html', 'rules_alternate.html'), 'w')
print(main_header % {'title': 'PySol - a Solitaire Game Collection'},
print(_fmt(main_header, {'title': 'PySol - a Solitaire Game Collection'}),
file=out_rules_alt)
with open('rules_alternate.html', 'r') as file:
print(file.read(), file=out_rules_alt)
@ -228,8 +242,9 @@ def gen_rules_html():
for name, fn in altnames:
print('<li> <a href="rules/%s">%s</a>'
% (fn, name), file=out_rules_alt)
print('</ul>\n' + main_footer %
{'back_to_index_link': '<a href="index.html">Back to the index</a>'},
print('</ul>\n' + _fmt(main_footer,
{'back_to_index_link':
'<a href="index.html">Back to the index</a>'}),
file=out_rules_alt)
out_rules_alt.close()
@ -238,12 +253,12 @@ def gen_rules_html():
outfile = open(
os.path.join('html', 'rules', filename), 'w', encoding='utf-8')
if dir == 'rules':
print(rules_header % {'title': title}, file=outfile)
print(_fmt(rules_header, {'title': title}), file=outfile)
else: # d == 'wikipedia'
print(wikipedia_header % {'title': title}, file=outfile)
print(_fmt(wikipedia_header, {'title': title}), file=outfile)
with open(os.path.join(dir, filename), 'r', encoding='utf-8') as file:
print(file.read(), file=outfile)
print(rules_footer % {'footer': footer}, file=outfile)
print(_fmt(rules_footer, {'footer': footer}), file=outfile)
outfile.close()

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

View file

@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="2606px" height="2606px" viewBox="0 0 2606 2606" enable-background="new 0 0 2606 2606" xml:space="preserve">
<g>
<g>
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="13.7116" stroke-miterlimit="10" points="1799.729,2089.245
583.065,1957.834 794.449,0.563 2011.048,131.975 "/>
<g>
<path fill="#231F20" d="M1440.643,817.287c-17.163-1.871-33.905-0.238-49.461,4.503c35.863-18.687,62.059-54.354,66.766-97.676
c7.389-68.683-42.32-130.448-111.076-137.882c-68.666-7.401-130.465,42.337-137.864,111.02
c-4.529,42.056,12.268,81.514,41.892,107.477c-13.007-6.564-27.432-10.897-42.794-12.563
c-68.78-7.428-130.437,42.213-137.873,110.941c-7.436,68.718,42.231,130.456,111.021,137.917
c27.229,2.89,53.295-3.091,75.371-15.734v-0.044l-44.371,143.001l141.975,15.315l-12.991-150.927l0,0
c19.151,18.214,44.195,30.456,72.554,33.468c68.729,7.391,130.403-42.293,137.84-110.984
C1559.009,886.311,1509.396,824.681,1440.643,817.287z"/>
<g>
<path fill="#231F20" d="M1783.469,330.98c-7.347-0.76-14.551-0.035-21.175,1.952c15.327-7.997,26.506-23.27,28.538-41.742
c3.129-29.365-18.089-55.773-47.472-58.957c-29.376-3.164-55.774,18.09-58.903,47.431c-1.996,18.017,5.207,34.849,17.873,46.003
c-5.57-2.836-11.749-4.698-18.31-5.386c-29.367-3.174-55.723,18.045-58.941,47.421c-3.173,29.374,18.046,55.765,47.485,58.966
c11.617,1.257,22.761-1.331,32.2-6.731v-0.035l-18.954,61.121l60.642,6.571l-5.519-64.492l0,0
c8.239,7.755,18.927,12.952,31.001,14.273c29.392,3.191,55.762-18.08,58.955-47.448
C1834.028,360.552,1812.828,334.19,1783.469,330.98z"/>
<text transform="matrix(0.9942 0.1074 -0.1074 0.9942 844.9541 360.7891)" font-family="'MyriadPro-Regular'" font-size="332.039">A</text>
</g>
</g>
</g>
<g>
<g>
<polygon fill="#6A8F5D" points="1302.954,2605.438 537.385,2250.539 537.385,1083.158 2068.615,1083.158 2068.615,2250.539
"/>
<g>
<g>
<g>
<g>
<g>
<rect x="653.389" y="1206.402" fill="#F3F4F4" width="27.958" height="96.717"/>
<rect x="653.389" y="1350.439" fill="#F3F4F4" width="27.958" height="96.717"/>
<rect x="653.389" y="1494.466" fill="#F3F4F4" width="27.958" height="96.718"/>
<rect x="653.389" y="1638.534" fill="#F3F4F4" width="27.958" height="96.696"/>
<rect x="653.389" y="1782.55" fill="#F3F4F4" width="27.958" height="96.718"/>
<rect x="653.389" y="1926.618" fill="#F3F4F4" width="27.958" height="96.707"/>
<rect x="653.389" y="2070.635" fill="#F3F4F4" width="27.958" height="96.696"/>
</g>
</g>
</g>
</g>
<g>
<g>
<g>
<g>
<rect x="684.09" y="2194.777" transform="matrix(-0.3868 0.9222 -0.9222 -0.3868 3022.4868 2445.8411)" fill="#F3F4F4" width="27.958" height="66.074"/>
<rect x="774.831" y="2232.839" transform="matrix(-0.3868 0.9222 -0.9222 -0.3868 3183.427 2414.9478)" fill="#F3F4F4" width="27.958" height="66.074"/>
<rect x="865.566" y="2270.897" transform="matrix(-0.3868 0.9222 -0.9222 -0.3868 3344.3577 2383.9763)" fill="#F3F4F4" width="27.957" height="66.073"/>
<rect x="956.32" y="2308.971" transform="matrix(-0.3868 0.9222 -0.9222 -0.3868 3505.3181 2353.1235)" fill="#F3F4F4" width="27.958" height="66.059"/>
<rect x="1047.055" y="2347.021" transform="matrix(-0.3868 0.9222 -0.9222 -0.3868 3666.2454 2322.2651)" fill="#F3F4F4" width="27.958" height="66.074"/>
<rect x="1137.813" y="2385.093" transform="matrix(-0.3868 0.9222 -0.9222 -0.3868 3827.2104 2291.2793)" fill="#F3F4F4" width="27.957" height="66.066"/>
<rect x="1228.538" y="2423.151" transform="matrix(-0.3868 0.9222 -0.9222 -0.3868 3988.1191 2260.3887)" fill="#F3F4F4" width="27.957" height="66.059"/>
</g>
</g>
</g>
</g>
<g>
<g>
<g>
<g>
<rect x="1320.306" y="2434.99" transform="matrix(0.3792 0.9253 -0.9253 0.3792 3112.7236 297.998)" fill="#F3F4F4" width="27.958" height="67.403"/>
<rect x="1413.191" y="2396.929" transform="matrix(0.3792 0.9253 -0.9253 0.3792 3135.2007 188.4419)" fill="#F3F4F4" width="27.959" height="67.403"/>
<rect x="1506.069" y="2358.87" transform="matrix(0.3792 0.9253 -0.9253 0.3792 3157.6162 78.8484)" fill="#F3F4F4" width="27.958" height="67.403"/>
<rect x="1598.968" y="2320.811" transform="matrix(0.3792 0.9253 -0.9253 0.3792 3179.958 -30.8184)" fill="#F3F4F4" width="27.957" height="67.388"/>
<rect x="1691.846" y="2282.746" transform="matrix(0.3792 0.9253 -0.9253 0.3792 3202.5132 -140.3174)" fill="#F3F4F4" width="27.958" height="67.403"/>
<rect x="1784.748" y="2244.681" transform="matrix(0.3792 0.9253 -0.9253 0.3792 3224.9641 -249.9165)" fill="#F3F4F4" width="27.958" height="67.396"/>
<rect x="1877.616" y="2206.63" transform="matrix(0.3792 0.9253 -0.9253 0.3792 3247.4077 -359.4751)" fill="#F3F4F4" width="27.958" height="67.389"/>
</g>
</g>
</g>
</g>
<g>
<g>
<g>
<g>
<rect x="1939.568" y="2117.965" fill="#F3F4F4" width="27.957" height="96.717"/>
<rect x="1939.568" y="1973.928" fill="#F3F4F4" width="27.957" height="96.717"/>
<rect x="1939.568" y="1829.9" fill="#F3F4F4" width="27.957" height="96.718"/>
<rect x="1939.568" y="1685.854" fill="#F3F4F4" width="27.957" height="96.696"/>
<rect x="1939.568" y="1541.816" fill="#F3F4F4" width="27.957" height="96.718"/>
<rect x="1939.568" y="1397.759" fill="#F3F4F4" width="27.957" height="96.707"/>
<rect x="1939.568" y="1253.753" fill="#F3F4F4" width="27.957" height="96.696"/>
</g>
</g>
</g>
</g>
<g>
<g>
<g>
<g>
<g>
<rect x="667.752" y="1192.808" fill="#F3F4F4" width="61.65" height="27.958"/>
<rect x="759.565" y="1192.808" fill="#F3F4F4" width="61.65" height="27.958"/>
<rect x="851.372" y="1192.808" fill="#F3F4F4" width="61.65" height="27.958"/>
<rect x="943.205" y="1192.808" fill="#F3F4F4" width="61.637" height="27.958"/>
<rect x="1035.005" y="1192.808" fill="#F3F4F4" width="61.65" height="27.958"/>
<rect x="1126.838" y="1192.808" fill="#F3F4F4" width="61.644" height="27.958"/>
<rect x="1218.638" y="1192.808" fill="#F3F4F4" width="61.637" height="27.958"/>
</g>
</g>
<g>
<g>
<rect x="1310.457" y="1192.808" fill="#F3F4F4" width="61.65" height="27.958"/>
<rect x="1402.271" y="1192.808" fill="#F3F4F4" width="61.65" height="27.958"/>
<rect x="1494.077" y="1192.808" fill="#F3F4F4" width="61.65" height="27.958"/>
<rect x="1585.91" y="1192.808" fill="#F3F4F4" width="61.638" height="27.958"/>
<rect x="1677.71" y="1192.808" fill="#F3F4F4" width="61.65" height="27.958"/>
<rect x="1769.543" y="1192.808" fill="#F3F4F4" width="61.645" height="27.958"/>
<rect x="1861.344" y="1192.808" fill="#F3F4F4" width="61.637" height="27.958"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<path fill="#BCBEC0" d="M711.365,1206.402c0,22.902-19.471,41.554-43.613,41.554c-24.026,0-43.612-18.651-43.612-41.554
c0-23.009,19.586-41.563,43.612-41.563C691.895,1164.84,711.365,1183.394,711.365,1206.402z"/>
<path fill="#BCBEC0" d="M1996.83,1206.402c0,22.902-19.563,41.554-43.667,41.554c-24.108,0-43.606-18.651-43.606-41.554
c0-23.009,19.498-41.563,43.606-41.563C1977.268,1164.84,1996.83,1183.394,1996.83,1206.402z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

View file

@ -0,0 +1,181 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="2156.379px" height="822.798px" viewBox="209.538 -382.29 2156.379 822.798"
enable-background="new 209.538 -382.29 2156.379 822.798" xml:space="preserve">
<g>
<g>
<g>
<polygon fill="#FFFFFF" stroke="#231F20" stroke-width="4.331" stroke-miterlimit="10" points="608.268,277.454 223.963,235.948
290.73,-382.29 675.028,-340.787 "/>
<g>
<path fill="#231F20" d="M494.843-124.318c-5.413-0.586-10.703-0.064-15.633,1.428c11.347-5.904,19.611-17.167,21.097-30.849
c2.34-21.699-13.371-41.208-35.077-43.557c-21.695-2.337-41.213,13.366-43.553,35.066c-1.438,13.28,3.884,25.749,13.234,33.945
c-4.111-2.069-8.664-3.444-13.519-3.961c-21.728-2.349-41.2,13.334-43.551,35.041c-2.34,21.705,13.345,41.202,35.07,43.561
c8.598,0.922,16.832-0.982,23.807-4.972v-0.016l-14.012,45.173l44.837,4.843l-4.098-47.67l0,0
c6.057,5.748,13.965,9.607,22.908,10.567c21.713,2.338,41.2-13.359,43.548-35.061
C532.242-102.5,516.561-121.976,494.843-124.318z"/>
<g>
<path fill="#231F20" d="M603.129-277.919c-2.317-0.246-4.589-0.021-6.69,0.619c4.854-2.526,8.382-7.345,9.021-13.188
c0.992-9.281-5.721-17.618-14.995-18.621c-9.276-1.011-17.618,5.709-18.611,14.985c-0.625,5.679,1.654,11.007,5.653,14.515
c-1.76-0.886-3.707-1.476-5.781-1.694c-9.284-0.999-17.607,5.697-18.621,14.978c-1.001,9.28,5.702,17.625,14.998,18.615
c3.675,0.405,7.192-0.408,10.177-2.119v-0.005l-5.991,19.309l19.162,2.074l-1.752-20.371l0,0
c2.597,2.453,5.977,4.094,9.798,4.509c9.276,1.009,17.617-5.708,18.611-14.983
C619.106-268.585,612.406-276.912,603.129-277.919z"/>
<text transform="matrix(0.9942 0.1074 -0.1074 0.9942 306.6931 -268.5012)" font-family="'MyriadPro-Regular'" font-size="104.8801">A</text>
</g>
</g>
</g>
<g>
<g>
<polygon fill="#6A8F5D" points="451.363,440.508 209.538,328.401 209.538,-40.33 693.198,-40.33 693.198,328.401 "/>
<g>
<g>
<g>
<g>
<g>
<rect x="246.183" y="-1.408" fill="#F3F4F4" width="8.831" height="30.55"/>
<rect x="246.183" y="44.087" fill="#F3F4F4" width="8.831" height="30.551"/>
<rect x="246.183" y="89.58" fill="#F3F4F4" width="8.831" height="30.55"/>
<rect x="246.183" y="135.086" fill="#F3F4F4" width="8.831" height="30.543"/>
<rect x="246.183" y="180.576" fill="#F3F4F4" width="8.831" height="30.549"/>
<rect x="246.183" y="226.082" fill="#F3F4F4" width="8.831" height="30.546"/>
<rect x="246.183" y="271.573" fill="#F3F4F4" width="8.831" height="30.544"/>
</g>
</g>
</g>
</g>
<g>
<g>
<g>
<g>
<rect x="255.881" y="310.753" transform="matrix(0.3868 -0.9222 0.9222 0.3868 -136.572 436.9975)" fill="#F3F4F4" width="8.832" height="20.871"/>
<rect x="284.544" y="322.777" transform="matrix(0.3868 -0.9222 0.9222 0.3868 -130.0825 470.8089)" fill="#F3F4F4" width="8.83" height="20.871"/>
<rect x="313.203" y="334.799" transform="matrix(0.3869 -0.9221 0.9221 0.3869 -123.6096 504.5652)" fill="#F3F4F4" width="8.83" height="20.871"/>
<rect x="341.832" y="346.845" transform="matrix(0.3868 -0.9222 0.9222 0.3868 -117.1465 538.3897)" fill="#F3F4F4" width="8.832" height="20.867"/>
<rect x="370.492" y="358.867" transform="matrix(0.3868 -0.9222 0.9222 0.3868 -110.6598 572.1934)" fill="#F3F4F4" width="8.832" height="20.872"/>
<rect x="399.161" y="370.894" transform="matrix(0.3869 -0.9221 0.9221 0.3869 -104.1888 605.9609)" fill="#F3F4F4" width="8.83" height="20.869"/>
<rect x="427.852" y="382.896" transform="matrix(0.3868 -0.9222 0.9222 0.3868 -97.6421 639.8224)" fill="#F3F4F4" width="8.832" height="20.867"/>
</g>
</g>
</g>
</g>
<g>
<g>
<g>
<g>
<rect x="456.85" y="386.691" transform="matrix(-0.3792 -0.9253 0.9253 -0.3792 268.5023 974.8157)" fill="#F3F4F4" width="8.831" height="21.289"/>
<rect x="486.193" y="374.636" transform="matrix(-0.3792 -0.9253 0.9253 -0.3792 320.1125 985.3372)" fill="#F3F4F4" width="8.829" height="21.29"/>
<rect x="515.523" y="362.644" transform="matrix(-0.3792 -0.9253 0.9253 -0.3792 371.6727 995.9436)" fill="#F3F4F4" width="8.831" height="21.29"/>
<rect x="544.868" y="350.59" transform="matrix(-0.3792 -0.9253 0.9253 -0.3792 423.3006 1006.4688)" fill="#F3F4F4" width="8.831" height="21.285"/>
<rect x="574.201" y="338.595" transform="matrix(-0.3792 -0.9253 0.9253 -0.3792 474.8542 1017.0711)" fill="#F3F4F4" width="8.831" height="21.288"/>
<rect x="603.545" y="326.571" transform="matrix(-0.3792 -0.9253 0.9253 -0.3792 526.4511 1027.6381)" fill="#F3F4F4" width="8.831" height="21.287"/>
<rect x="632.877" y="314.518" transform="matrix(-0.3791 -0.9253 0.9253 -0.3791 578.03 1038.1528)" fill="#F3F4F4" width="8.832" height="21.284"/>
</g>
</g>
</g>
</g>
<g>
<g>
<g>
<g>
<rect x="652.436" y="286.523" fill="#F3F4F4" width="8.831" height="30.549"/>
<rect x="652.436" y="241.027" fill="#F3F4F4" width="8.831" height="30.55"/>
<rect x="652.436" y="195.533" fill="#F3F4F4" width="8.831" height="30.55"/>
<rect x="652.436" y="150.033" fill="#F3F4F4" width="8.831" height="30.544"/>
<rect x="652.436" y="104.536" fill="#F3F4F4" width="8.831" height="30.55"/>
<rect x="652.436" y="59.033" fill="#F3F4F4" width="8.831" height="30.547"/>
<rect x="652.436" y="13.548" fill="#F3F4F4" width="8.831" height="30.542"/>
</g>
</g>
</g>
</g>
<g>
<g>
<g>
<g>
<g>
<rect x="250.72" y="-5.702" fill="#F3F4F4" width="19.473" height="8.831"/>
<rect x="279.72" y="-5.702" fill="#F3F4F4" width="19.473" height="8.831"/>
<rect x="308.719" y="-5.702" fill="#F3F4F4" width="19.473" height="8.831"/>
<rect x="337.724" y="-5.702" fill="#F3F4F4" width="19.469" height="8.831"/>
<rect x="366.72" y="-5.702" fill="#F3F4F4" width="19.473" height="8.831"/>
<rect x="395.727" y="-5.702" fill="#F3F4F4" width="19.471" height="8.831"/>
<rect x="424.722" y="-5.702" fill="#F3F4F4" width="19.469" height="8.831"/>
</g>
</g>
<g>
<g>
<rect x="453.725" y="-5.702" fill="#F3F4F4" width="19.473" height="8.831"/>
<rect x="482.725" y="-5.702" fill="#F3F4F4" width="19.473" height="8.831"/>
<rect x="511.723" y="-5.702" fill="#F3F4F4" width="19.473" height="8.831"/>
<rect x="540.729" y="-5.702" fill="#F3F4F4" width="19.469" height="8.831"/>
<rect x="569.725" y="-5.702" fill="#F3F4F4" width="19.473" height="8.831"/>
<rect x="598.732" y="-5.702" fill="#F3F4F4" width="19.471" height="8.831"/>
<rect x="627.727" y="-5.702" fill="#F3F4F4" width="19.469" height="8.831"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<path fill="#BCBEC0" d="M264.497-1.408c0,7.243-6.161,13.125-13.776,13.125c-7.607,0-13.777-5.882-13.777-13.125
c0-7.255,6.17-13.126,13.777-13.126C258.336-14.535,264.497-8.665,264.497-1.408z"/>
<path fill="#BCBEC0" d="M670.525-1.408c0,7.243-6.179,13.125-13.795,13.125c-7.604,0-13.774-5.882-13.774-13.125
c0-7.255,6.17-13.126,13.774-13.126C664.346-14.535,670.525-8.665,670.525-1.408z"/>
</g>
</g>
<g>
<path d="M751.673-62.138h65.913c38.682,0,60.94,19.015,60.94,52.729c0,35.439-22.259,55.971-60.94,55.971h-27.447v42.571h-38.466
V-62.138z M815.639,16.307c16.856,0,26.581-8.429,26.581-24.42c0-15.775-9.725-23.772-26.581-23.772h-25.501v48.192H815.639z"/>
<path d="M919.364-27.347l28.525,77.365l25.284-77.365h37.17l-50.352,128.584c-8.645,21.179-23.34,31.551-44.949,31.551
c-12.967,0-23.558-3.889-33.931-11.886l15.562-25.5c5.402,4.321,9.939,6.268,15.342,6.268c6.699,0,11.454-3.024,14.479-9.293
l2.809-5.836L880.897-27.347H919.364z"/>
<path d="M1027.41,36.62c15.56,13.614,38.899,22.69,54.675,22.69c12.103,0,19.665-4.54,19.665-13.184
c0-26.796-79.958-10.806-79.958-64.398c0-27.876,23.987-45.6,60.293-45.6c21.826,0,44.086,6.7,59.646,16.856l-14.479,30.04
c-15.992-9.294-36.09-15.776-48.408-15.776c-9.94,0-16.641,3.675-16.641,11.022c0,26.146,79.958,11.236,79.958,65.911
c0,30.253-26.796,46.244-60.509,46.244c-25.284,0-51.217-9.507-69.154-24.201L1027.41,36.62z"/>
<path d="M1216.929-28.642c38.035,0,63.535,23.555,63.535,59.427c0,35.876-25.5,59.646-63.535,59.646
c-38.25,0-63.751-23.771-63.751-59.646C1153.178-5.088,1178.679-28.642,1216.929-28.642z M1216.929,61.474
c15.345,0,25.934-12.104,25.934-30.257c0-17.938-10.589-30.254-25.934-30.254c-15.56,0-26.147,12.316-26.147,30.254
C1190.782,49.369,1201.371,61.474,1216.929,61.474z"/>
<path d="M1301.637-71.216h37.388V89.133h-37.388V-71.216z"/>
<path d="M1420.275-62.138h112.158v30.253h-73.688V3.123h67.854v30.255h-67.854v55.756h-38.47V-62.138z"/>
<path d="M1586.236,19.115h30.689v-1.728c0-11.452-7.564-18.367-22.691-18.367c-9.725,0-22.474,3.456-34.793,9.724l-10.591-24.635
c18.153-8.428,34.581-13.183,54.028-13.183c31.982,0,50.568,15.773,50.786,42.14v76.068h-36.524V75.738
c-7.563,9.939-19.879,15.126-35.654,15.126c-24.854,0-39.982-15.126-39.982-36.521
C1541.504,32.297,1557.281,19.332,1586.236,19.115z M1592.938,65.579c11.669,0,21.61-6.482,23.987-15.992V39.213h-23.556
c-11.237,0-16.857,3.89-16.857,12.535C1576.512,60.176,1582.565,65.579,1592.938,65.579z"/>
<path d="M1680.236-27.347h37.389v19.019c8.211-13.616,21.61-20.531,38.897-20.746c25.716,0,42.573,17.505,42.573,44.733v73.475
h-37.17V26.031c0-13.613-7.997-22.041-20.53-22.041c-13.614,0-22.259,9.725-23.771,23.555v61.59h-37.389V-27.347z"/>
<path d="M1946.902-63.437c22.477,0,45.815,9.942,60.944,25.501l-22.26,26.366c-9.943-12.104-24.638-19.666-38.035-19.666
c-23.988,0-42.142,19.015-42.142,43.869c0,25.284,18.152,44.518,42.142,44.518c12.75,0,27.447-6.915,38.035-17.72l22.476,23.771
c-16.209,16.642-40.198,27.661-62.455,27.661c-45.601,0-79.528-33.495-79.528-77.798
C1866.079-30.589,1900.873-63.437,1946.902-63.437z"/>
<path d="M2026.422-71.216h37.39V89.133h-37.39V-71.216z"/>
<path d="M2091.253-27.347h37.386v62.887c0,13.831,7.563,22.259,19.448,22.259c14.266-0.215,22.692-11.884,22.692-27.66v-57.485
h37.386v116.48h-37.386V69.902c-7.998,13.83-20.965,20.746-37.82,20.746c-25.283,0-41.706-17.291-41.706-44.52V-27.347z"/>
<path d="M2239.061-71.216h37.386v59.212c8.215-10.589,20.1-16.64,34.797-16.64c32.848,0,54.673,23.987,54.673,60.078
c0,35.438-21.182,58.993-53.809,58.993c-15.13,0-27.446-6.051-35.661-16.854v15.559h-37.386V-71.216z M2302.165,60.824
c15.561,0,26.15-12.534,26.15-30.469c0-17.722-10.591-30.255-26.15-30.255c-15.126,0-25.718,12.533-25.718,30.255
C2276.447,48.506,2287.039,60.824,2302.165,60.824z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

View file

@ -202,13 +202,13 @@ class Game(object):
# update display properties
self.canvas.busy = True
# geometry
mycond = (not USE_PIL and self.app.opt.save_games_geometry and
mycond = (self.app.opt.save_games_geometry and
self.id in self.app.opt.games_geometry)
if mycond:
# restore game geometry
w, h = self.app.opt.games_geometry[self.id]
self.canvas.config(width=w, height=h)
if USE_PIL:
if True and USE_PIL:
if self.app.opt.auto_scale:
w, h = self.app.opt.game_geometry
self.canvas.setInitialSize(w, h, margins=False,
@ -217,9 +217,10 @@ class Game(object):
# dx, dy = self.canvas.xmargin, self.canvas.ymargin
# self.canvas.config(scrollregion=(-dx, -dy, dx, dy))
else:
w = int(round(self.width * self.app.opt.scale_x))
h = int(round(self.height * self.app.opt.scale_y))
self.canvas.setInitialSize(w, h)
if not mycond:
w = int(round(self.width * self.app.opt.scale_x))
h = int(round(self.height * self.app.opt.scale_y))
self.canvas.setInitialSize(w, h)
self.top.wm_geometry("") # cancel user-specified geometry
# preserve texts positions
for t in ('info', 'help', 'misc', 'score', 'base_rank'):
@ -1124,7 +1125,7 @@ class Game(object):
def _configureHandler(self, event=None):
# print 'configureHandler'
if not USE_PIL:
if False: # if not USE_PIL:
return
if not self.app:
return

View file

@ -51,7 +51,7 @@ if TOOLKIT == 'tk':
from PIL import PpmImagePlugin # noqa: F401
Image._initialized = 2
USE_PIL = False
if TOOLKIT == 'tk' and Image and Image.VERSION >= '1.1.7':
if TOOLKIT == 'tk' and Image:
USE_PIL = True
# debug

View file

@ -32,7 +32,7 @@ PACKAGE = 'PySolFC'
TITLE = 'PySol'
PACKAGE_URL = 'http://pysolfc.sourceforge.net/'
VERSION_TUPLE = (2, 6, 2)
VERSION_TUPLE = (2, 6, 3)
VERSION = '.'.join(map(str, VERSION_TUPLE))
# Tk windowing system (auto set up in init.py)

View file

@ -73,16 +73,16 @@ class ToolbarCheckbutton(AbstractToolbarButton, ttk.Checkbutton):
def __init__(self, parent, toolbar, toolbar_name, position, **kwargs):
kwargs['style'] = 'Toolbutton'
ttk.Checkbutton.__init__(self, parent, **kwargs)
AbstractToolbarButton.__init__(self, parent, toolbar,
toolbar_name, position)
AbstractToolbarButton.__init__(
self, parent, toolbar, toolbar_name, position)
class ToolbarButton(AbstractToolbarButton, ttk.Button):
def __init__(self, parent, toolbar, toolbar_name, position, **kwargs):
kwargs['style'] = 'Toolbutton'
ttk.Button.__init__(self, parent, **kwargs)
AbstractToolbarButton.__init__(self, parent, toolbar,
toolbar_name, position)
AbstractToolbarButton.__init__(
self, parent, toolbar, toolbar_name, position)
class ToolbarSeparator(ttk.Separator):
@ -453,8 +453,6 @@ class PysolToolbarTk:
if self._busy():
return EVENT_HANDLED
if self.popup:
# print event.x, event.y, \
# event.x_root, event.y_root, event.__dict__
self.popup.tk_popup(event.x_root, event.y_root)
return EVENT_HANDLED

View file

@ -36,10 +36,6 @@ from six.moves import tkinter
from .tkwidget import MfxTooltip
# ************************************************************************
# *
# ************************************************************************
class AbstractToolbarButton:
def __init__(self, parent, toolbar, toolbar_name, position):
self.toolbar = toolbar
@ -125,7 +121,7 @@ class ToolbarFlatSeparator(ToolbarSeparator):
class ToolbarLabel(tkinter.Message):
def __init__(self, parent, toolbar, toolbar_name, position, **kwargs):
tkinter.Message.__init__(self, parent, kwargs)
tkinter.Message.__init__(self, parent, **kwargs)
self.toolbar = toolbar
self.toolbar_name = toolbar_name
self.position = position
@ -164,7 +160,6 @@ class PysolToolbarTk:
size=0, relief='flat', compound='none'):
self.top = top
self.menubar = menubar
# self._setRelief(relief)
self.side = -1
self._tooltips = []
self._widgets = []
@ -238,14 +233,14 @@ class PysolToolbarTk:
prev_visible = None
last_visible = None
for w in self._widgets:
if w.__class__ is ToolbarSeparator:
if prev_visible is None or \
prev_visible.__class__ is ToolbarSeparator:
if isinstance(w, ToolbarSeparator):
if prev_visible is None or isinstance(prev_visible,
ToolbarSeparator):
w.hide()
else:
w.show(orient=self.orient)
elif w.__class__ is ToolbarFlatSeparator:
if prev_visible.__class__ is ToolbarSeparator:
elif isinstance(w, ToolbarFlatSeparator):
if isinstance(prev_visible, ToolbarSeparator):
prev_visible.hide()
if w.visible:
prev_visible = w
@ -416,7 +411,7 @@ class PysolToolbarTk:
self.frame.update_idletasks()
def updateText(self, **kw):
for name in list(kw.keys()):
for name in kw.keys():
label = getattr(self, name + "_label")
label["text"] = kw[name]
@ -483,8 +478,6 @@ class PysolToolbarTk:
if self._busy():
return EVENT_HANDLED
if self.popup:
# print event.x, event.y, event.x_root, \
# event.y_root, event.__dict__
self.popup.tk_popup(event.x_root, event.y_root)
return EVENT_HANDLED

View file

@ -628,11 +628,11 @@ class PysolMenubarTkCommon:
submenu.add_checkbutton(
label=n_("Show &help bar"), variable=self.tkopt.helpbar,
command=self.mOptHelpbar)
if not USE_PIL:
menu.add_checkbutton(
label=n_("Save games &geometry"),
variable=self.tkopt.save_games_geometry,
command=self.mOptSaveGamesGeometry)
# if not USE_PIL:
menu.add_checkbutton(
label=n_("Save games &geometry"),
variable=self.tkopt.save_games_geometry,
command=self.mOptSaveGamesGeometry)
menu.add_checkbutton(
label=n_("&Demo logo"), variable=self.tkopt.demo_logo,
command=self.mOptDemoLogo)

View file

@ -353,15 +353,10 @@ def shadowImage(image, color='#3896f8', factor=0.3):
if not hasattr(image, '_pil_image'):
return None
im = image._pil_image
if Image.VERSION >= '1.1.7':
# use an alpha image
sh = Image.new('RGBA', im.size, color)
sh.putalpha(100)
out = Image.composite(sh, im, im)
return PIL_Image(image=out)
# use an alpha image
sh = Image.new('RGBA', im.size, color)
tmp = Image.blend(im, sh, factor)
out = Image.composite(tmp, im, im)
sh.putalpha(100)
out = Image.composite(sh, im, im)
return PIL_Image(image=out)