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 /po/ru.po
/tests/individually-importing/*.py /tests/individually-importing/*.py
/tests/unit-generated/*.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 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 - 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: install:
- sudo cpanm --notest Capture::Tiny
- sudo cpanm Code::TidyAll::Plugin::Flake8 Perl::Tidy Test::Code::TidyAll Test::Differences Test::TrailingSpace - sudo cpanm Code::TidyAll::Plugin::Flake8 Perl::Tidy Test::Code::TidyAll Test::Differences Test::TrailingSpace
- export PY_MODS='pycotap random2 six' - export PY_MODS='pycotap random2 six'
- "`which python3` -m pip install --upgrade flake8 flake8-import-order $PY_MODS" - "`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 # PySol Fan Club edition
This is an open source and portable (Windows, Linux and Mac OS X) collection This is an open source and portable (Windows, Linux and Mac OS X) collection

View file

@ -30,6 +30,13 @@ try:
except Exception: except Exception:
pass pass
def merge_dicts(x, y):
ret = x.copy()
ret.update(y)
return ret
pysollib_path = os.path.join(sys.path[0], pysollib_dir) pysollib_path = os.path.join(sys.path[0], pysollib_dir)
sys.path[0] = os.path.normpath(pysollib_path) sys.path[0] = os.path.normpath(pysollib_path)
# print sys.path # print sys.path
@ -67,6 +74,12 @@ wikipedia_files = [
('fourseasons.html', 'PySol - Rules for Four Seasons'), ('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"> main_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html> <html>
<head> <head>
@ -76,7 +89,7 @@ main_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
</head> </head>
<body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099" <body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099"
alink="#FF0000"> alink="#FF0000">
<img src="images/pysollogo03.gif" alt=""> <img src="%(logo_url)s" alt="%(logo_alt)s">
<br> <br>
''' '''
main_footer = ''' main_footer = '''
@ -95,7 +108,7 @@ rules_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
</head> </head>
<body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099" <body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099"
link="#FF0000"> link="#FF0000">
<img src="../images/pysollogo03.gif" alt=""> <img src="../%(logo_url)s" alt="%(logo_alt)s">
<br> <br>
''' '''
rules_footer = ''' rules_footer = '''
@ -120,7 +133,7 @@ wikipedia_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
</head> </head>
<body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099" <body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099"
alink="#FF0000"> alink="#FF0000">
<img src="../images/pysollogo03.gif" alt=""> <img src="../%(logo_url)s" alt="%(logo_alt)s">
<br> <br>
''' '''
@ -134,13 +147,13 @@ def getGameRulesFilename(n):
def gen_main_html(): def gen_main_html():
for infile, title in files: for infile, title in files:
outfile = open(os.path.join('html', infile), 'w') 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: with open(infile, 'r') as file:
print(file.read(), file=outfile) print(file.read(), file=outfile)
s = '<a href="index.html">Back to the index</a>' s = '<a href="index.html">Back to the index</a>'
if infile == 'index.html': if infile == 'index.html':
s = '' s = ''
print(main_footer % {'back_to_index_link': s}, file=outfile) print(_fmt(main_footer, {'back_to_index_link': s}), file=outfile)
outfile.close() outfile.close()
@ -164,7 +177,7 @@ def gen_rules_html():
# open file of list of all rules # open file of list of all rules
out_rules = open(os.path.join('html', 'rules.html'), 'w') 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) file=out_rules)
with open('rules.html', 'r') as file: with open('rules.html', 'r') as file:
print(file.read(), file=out_rules) print(file.read(), file=out_rules)
@ -212,15 +225,16 @@ def gen_rules_html():
for n in gi.altnames: for n in gi.altnames:
altnames.append((n, rules_fn)) altnames.append((n, rules_fn))
print('</ul>\n' + main_footer % print('</ul>\n' + _fmt(main_footer,
{'back_to_index_link': '<a href="index.html">Back to the index</a>'}, {'back_to_index_link':
'<a href="index.html">Back to the index</a>'}),
file=out_rules) file=out_rules)
out_rules.close() out_rules.close()
# create file of altnames # create file of altnames
out_rules_alt = open(os.path.join('html', 'rules_alternate.html'), 'w') 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) file=out_rules_alt)
with open('rules_alternate.html', 'r') as file: with open('rules_alternate.html', 'r') as file:
print(file.read(), file=out_rules_alt) print(file.read(), file=out_rules_alt)
@ -228,8 +242,9 @@ def gen_rules_html():
for name, fn in altnames: for name, fn in altnames:
print('<li> <a href="rules/%s">%s</a>' print('<li> <a href="rules/%s">%s</a>'
% (fn, name), file=out_rules_alt) % (fn, name), file=out_rules_alt)
print('</ul>\n' + main_footer % print('</ul>\n' + _fmt(main_footer,
{'back_to_index_link': '<a href="index.html">Back to the index</a>'}, {'back_to_index_link':
'<a href="index.html">Back to the index</a>'}),
file=out_rules_alt) file=out_rules_alt)
out_rules_alt.close() out_rules_alt.close()
@ -238,12 +253,12 @@ def gen_rules_html():
outfile = open( outfile = open(
os.path.join('html', 'rules', filename), 'w', encoding='utf-8') os.path.join('html', 'rules', filename), 'w', encoding='utf-8')
if dir == 'rules': if dir == 'rules':
print(rules_header % {'title': title}, file=outfile) print(_fmt(rules_header, {'title': title}), file=outfile)
else: # d == 'wikipedia' 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: with open(os.path.join(dir, filename), 'r', encoding='utf-8') as file:
print(file.read(), file=outfile) print(file.read(), file=outfile)
print(rules_footer % {'footer': footer}, file=outfile) print(_fmt(rules_footer, {'footer': footer}), file=outfile)
outfile.close() 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 # update display properties
self.canvas.busy = True self.canvas.busy = True
# geometry # 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) self.id in self.app.opt.games_geometry)
if mycond: if mycond:
# restore game geometry # restore game geometry
w, h = self.app.opt.games_geometry[self.id] w, h = self.app.opt.games_geometry[self.id]
self.canvas.config(width=w, height=h) self.canvas.config(width=w, height=h)
if USE_PIL: if True and USE_PIL:
if self.app.opt.auto_scale: if self.app.opt.auto_scale:
w, h = self.app.opt.game_geometry w, h = self.app.opt.game_geometry
self.canvas.setInitialSize(w, h, margins=False, self.canvas.setInitialSize(w, h, margins=False,
@ -217,6 +217,7 @@ class Game(object):
# dx, dy = self.canvas.xmargin, self.canvas.ymargin # dx, dy = self.canvas.xmargin, self.canvas.ymargin
# self.canvas.config(scrollregion=(-dx, -dy, dx, dy)) # self.canvas.config(scrollregion=(-dx, -dy, dx, dy))
else: else:
if not mycond:
w = int(round(self.width * self.app.opt.scale_x)) w = int(round(self.width * self.app.opt.scale_x))
h = int(round(self.height * self.app.opt.scale_y)) h = int(round(self.height * self.app.opt.scale_y))
self.canvas.setInitialSize(w, h) self.canvas.setInitialSize(w, h)
@ -1124,7 +1125,7 @@ class Game(object):
def _configureHandler(self, event=None): def _configureHandler(self, event=None):
# print 'configureHandler' # print 'configureHandler'
if not USE_PIL: if False: # if not USE_PIL:
return return
if not self.app: if not self.app:
return return

View file

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

View file

@ -32,7 +32,7 @@ PACKAGE = 'PySolFC'
TITLE = 'PySol' TITLE = 'PySol'
PACKAGE_URL = 'http://pysolfc.sourceforge.net/' PACKAGE_URL = 'http://pysolfc.sourceforge.net/'
VERSION_TUPLE = (2, 6, 2) VERSION_TUPLE = (2, 6, 3)
VERSION = '.'.join(map(str, VERSION_TUPLE)) VERSION = '.'.join(map(str, VERSION_TUPLE))
# Tk windowing system (auto set up in init.py) # 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): def __init__(self, parent, toolbar, toolbar_name, position, **kwargs):
kwargs['style'] = 'Toolbutton' kwargs['style'] = 'Toolbutton'
ttk.Checkbutton.__init__(self, parent, **kwargs) ttk.Checkbutton.__init__(self, parent, **kwargs)
AbstractToolbarButton.__init__(self, parent, toolbar, AbstractToolbarButton.__init__(
toolbar_name, position) self, parent, toolbar, toolbar_name, position)
class ToolbarButton(AbstractToolbarButton, ttk.Button): class ToolbarButton(AbstractToolbarButton, ttk.Button):
def __init__(self, parent, toolbar, toolbar_name, position, **kwargs): def __init__(self, parent, toolbar, toolbar_name, position, **kwargs):
kwargs['style'] = 'Toolbutton' kwargs['style'] = 'Toolbutton'
ttk.Button.__init__(self, parent, **kwargs) ttk.Button.__init__(self, parent, **kwargs)
AbstractToolbarButton.__init__(self, parent, toolbar, AbstractToolbarButton.__init__(
toolbar_name, position) self, parent, toolbar, toolbar_name, position)
class ToolbarSeparator(ttk.Separator): class ToolbarSeparator(ttk.Separator):
@ -453,8 +453,6 @@ class PysolToolbarTk:
if self._busy(): if self._busy():
return EVENT_HANDLED return EVENT_HANDLED
if self.popup: 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) self.popup.tk_popup(event.x_root, event.y_root)
return EVENT_HANDLED return EVENT_HANDLED

View file

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

View file

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

View file

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