Merge pull request #1 from daleclack/macUI_Gtkmm3

Update branch to ready for merge to Gtkmm 4
This commit is contained in:
daleclack 2023-01-09 15:51:04 +08:00 committed by GitHub
commit f11a555f8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 3284 additions and 378 deletions

View File

@ -1,6 +1,6 @@
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
cmake_minimum_required(VERSION 3.0.0) cmake_minimum_required(VERSION 3.0.0)
project(My_GtkUI VERSION 5.4.0) project(My_GtkUI VERSION 5.6.0)
#Add GCR_CMake #Add GCR_CMake
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../GCR_CMake/macros) list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../GCR_CMake/macros)
@ -16,7 +16,7 @@ include(CPack)
include_directories(.) include_directories(.)
include_directories(..) include_directories(..)
include_directories(src/core src/ui src/apps src/panels src/image_app include_directories(src/core src/ui src/apps src/panels src/image_app
src/game24_app src/calc_app) src/game24_app src/calc_app src/mine_app)
find_package (PkgConfig REQUIRED) find_package (PkgConfig REQUIRED)
pkg_check_modules (GTKMM3 REQUIRED gtkmm-3.0) pkg_check_modules (GTKMM3 REQUIRED gtkmm-3.0)
@ -29,7 +29,8 @@ set(SOURCES src/core/main.cc src/core/MyWin.cc src/core/MyStack.cc src/cfgfile/c
src/game24_app/Game24.cc src/game24_app/Game24Win.cc src/game24_app/Game24.cc src/game24_app/Game24Win.cc
src/image_app/ImageApp.cc src/image_app/MyImage.cc src/image_app/ImageApp.cc src/image_app/MyImage.cc
src/run_app/Runner.cc src/text_app/TextEditor.cc src/run_app/Runner.cc src/text_app/TextEditor.cc
src/calc_app/calc.cc src/calc_app/CalcApp.cc) src/calc_app/calc.cc src/calc_app/CalcApp.cc
src/mine_app/InputBox.cc src/mine_app/MineSweeper.cc src/mine_app/ScoresWin.cc)
#Compile resources with GCR_CMake #Compile resources with GCR_CMake
@ -45,6 +46,9 @@ set(RESOURCE_LIST
STRIPBLANKS calcapp.ui STRIPBLANKS calcapp.ui
STRIPBLANKS text_menu.xml STRIPBLANKS text_menu.xml
STRIPBLANKS expender.ui STRIPBLANKS expender.ui
STRIPBLANKS win_input.ui
STRIPBLANKS scoreswin.ui
STRIPBLANKS mine_menu.xml
style.css style.css
reset.css reset.css
dock_style.css dock_style.css
@ -65,6 +69,19 @@ set(RESOURCE_LIST
icons/48x48/actions/game_running.png icons/48x48/actions/game_running.png
icons/48x48/actions/btnabout.png icons/48x48/actions/btnabout.png
icons/48x48/actions/My_GtkUI.png icons/48x48/actions/My_GtkUI.png
icons/scalable/status/1mines.svg
icons/scalable/status/2mines.svg
icons/scalable/status/3mines.svg
icons/scalable/status/4mines.svg
icons/scalable/status/5mines.svg
icons/scalable/status/6mines.svg
icons/scalable/status/7mines.svg
icons/scalable/status/8mines.svg
icons/scalable/status/exploded.svg
icons/scalable/status/flag.svg
icons/scalable/status/incorrect.svg
icons/scalable/status/maybe.svg
icons/scalable/status/mine.svg
icons/scalable/status/24game.svg icons/scalable/status/24game.svg
icons/scalable/status/24game_running.svg icons/scalable/status/24game_running.svg
icons/scalable/status/audacious_whitesur.svg icons/scalable/status/audacious_whitesur.svg
@ -88,7 +105,9 @@ set(RESOURCE_LIST
icons/scalable/status/line.svg icons/scalable/status/line.svg
icons/scalable/status/rectangle.svg icons/scalable/status/rectangle.svg
icons/scalable/status/calcapp.svg icons/scalable/status/calcapp.svg
icons/scalable/status/calcapp_running.svg) icons/scalable/status/calcapp_running.svg
icons/scalable/status/mines_app.svg
icons/scalable/status/mines_app_running.svg)
compile_gresources(RESOURCE_FILE compile_gresources(RESOURCE_FILE
XML_OUT XML_OUT

View File

@ -8,15 +8,16 @@
@import url("resource://org/gtk/daleclack/reset.css"); @import url("resource://org/gtk/daleclack/reset.css");
box{ box{
background-color:alpha(white,0.3); background-color:alpha(gray,0.3);
color:white;
} }
separator{ separator{
background-color:alpha(white,0.3); background-color:alpha(gray,0.3);
} }
button{ button{
color:white; color:gray;
} }
grid{ grid{

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg3767"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="New document 3">
<defs
id="defs3769" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6"
inkscape:cx="33.68578"
inkscape:cy="31.76782"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1120"
inkscape:window-height="647"
inkscape:window-x="0"
inkscape:window-y="66"
inkscape:window-maximized="0" />
<metadata
id="metadata3772">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-988.36218)">
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="28.284271"
y="32.685272"
id="text4299"
sodipodi:linespacing="125%"
transform="translate(0,988.36218)"><tspan
sodipodi:role="line"
id="tspan4301"
x="28.284271"
y="32.685272" /></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2e3436;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="8.7441406"
y="1046.6063"
id="text4303"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4305"
x="8.7441406"
y="1046.6063"
style="font-size:72px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#2e3436;font-family:Monospace;-inkscape-font-specification:Monospace Bold">1</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg3767"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="2mines.svg">
<defs
id="defs3769" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6"
inkscape:cx="33.68578"
inkscape:cy="31.76782"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1120"
inkscape:window-height="647"
inkscape:window-x="0"
inkscape:window-y="66"
inkscape:window-maximized="0" />
<metadata
id="metadata3772">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-988.36218)">
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="28.284271"
y="32.685272"
id="text4299"
sodipodi:linespacing="125%"
transform="translate(0,988.36218)"><tspan
sodipodi:role="line"
id="tspan4301"
x="28.284271"
y="32.685272" /></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2e3436;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="11.292969"
y="1047.0809"
id="text4303"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4305"
x="11.292969"
y="1047.0809"
style="font-size:72px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#2e3436;font-family:Monospace;-inkscape-font-specification:Monospace Bold">2</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg3767"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="3mines.svg">
<defs
id="defs3769" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6"
inkscape:cx="33.68578"
inkscape:cy="31.76782"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1120"
inkscape:window-height="647"
inkscape:window-x="0"
inkscape:window-y="66"
inkscape:window-maximized="0" />
<metadata
id="metadata3772">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-988.36218)">
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="28.284271"
y="32.685272"
id="text4299"
sodipodi:linespacing="125%"
transform="translate(0,988.36218)"><tspan
sodipodi:role="line"
id="tspan4301"
x="28.284271"
y="32.685272" /></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2e3436;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="10.466797"
y="1046.5712"
id="text4303"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4305"
x="10.466797"
y="1046.5712"
style="font-size:72px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#2e3436;font-family:Monospace;-inkscape-font-specification:Monospace Bold">3</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg3767"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="4mines.svg">
<defs
id="defs3769" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6"
inkscape:cx="33.68578"
inkscape:cy="32.791013"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1120"
inkscape:window-height="647"
inkscape:window-x="0"
inkscape:window-y="66"
inkscape:window-maximized="0" />
<metadata
id="metadata3772">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-988.36218)">
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="28.284271"
y="32.685272"
id="text4299"
sodipodi:linespacing="125%"
transform="translate(0,988.36218)"><tspan
sodipodi:role="line"
id="tspan4301"
x="28.284271"
y="32.685272" /></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2e3436;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="10.150391"
y="1046.6063"
id="text4303"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4305"
x="10.150391"
y="1046.6063"
style="font-size:72px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#2e3436;font-family:Monospace;-inkscape-font-specification:Monospace Bold">4</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg3767"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="5mines.svg">
<defs
id="defs3769" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6"
inkscape:cx="33.68578"
inkscape:cy="32.791013"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1120"
inkscape:window-height="647"
inkscape:window-x="0"
inkscape:window-y="66"
inkscape:window-maximized="0" />
<metadata
id="metadata3772">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-988.36218)">
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="28.284271"
y="32.685272"
id="text4299"
sodipodi:linespacing="125%"
transform="translate(0,988.36218)"><tspan
sodipodi:role="line"
id="tspan4301"
x="28.284271"
y="32.685272" /></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2e3436;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="10.255859"
y="1046.0966"
id="text4303"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4305"
x="10.255859"
y="1046.0966"
style="font-size:72px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#2e3436;font-family:Monospace;-inkscape-font-specification:Monospace Bold">5</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg3767"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="6mines.svg">
<defs
id="defs3769" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6"
inkscape:cx="33.68578"
inkscape:cy="33.265622"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1120"
inkscape:window-height="647"
inkscape:window-x="0"
inkscape:window-y="66"
inkscape:window-maximized="0" />
<metadata
id="metadata3772">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-988.36218)">
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="28.284271"
y="32.685272"
id="text4299"
sodipodi:linespacing="125%"
transform="translate(0,988.36218)"><tspan
sodipodi:role="line"
id="tspan4301"
x="28.284271"
y="32.685272" /></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2e3436;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="9.9746094"
y="1046.5009"
id="text4303"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4305"
x="9.9746094"
y="1046.5009"
style="font-size:72px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#2e3436;font-family:Monospace;-inkscape-font-specification:Monospace Bold">6</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg3767"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="7mines.svg">
<defs
id="defs3769" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6"
inkscape:cx="33.68578"
inkscape:cy="33.265622"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1120"
inkscape:window-height="647"
inkscape:window-x="0"
inkscape:window-y="66"
inkscape:window-maximized="0" />
<metadata
id="metadata3772">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-988.36218)">
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="28.284271"
y="32.685272"
id="text4299"
sodipodi:linespacing="125%"
transform="translate(0,988.36218)"><tspan
sodipodi:role="line"
id="tspan4301"
x="28.284271"
y="32.685272" /></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2e3436;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="10.660156"
y="1046.6063"
id="text4303"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4305"
x="10.660156"
y="1046.6063"
style="font-size:72px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#2e3436;font-family:Monospace;-inkscape-font-specification:Monospace Bold">7</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg3767"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="8mines.svg">
<defs
id="defs3769" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6"
inkscape:cx="33.68578"
inkscape:cy="33.265622"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1120"
inkscape:window-height="647"
inkscape:window-x="0"
inkscape:window-y="66"
inkscape:window-maximized="0" />
<metadata
id="metadata3772">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-988.36218)">
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="28.284271"
y="32.685272"
id="text4299"
sodipodi:linespacing="125%"
transform="translate(0,988.36218)"><tspan
sodipodi:role="line"
id="tspan4301"
x="28.284271"
y="32.685272" /></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#2e3436;fill-opacity:1;stroke:none;font-family:Cantarell;-inkscape-font-specification:Cantarell"
x="10.326172"
y="1046.5712"
id="text4303"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4305"
x="10.326172"
y="1046.5712"
style="font-size:72px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#2e3436;font-family:Monospace;-inkscape-font-specification:Monospace Bold">8</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="64"
height="64"
id="svg1"
sodipodi:version="0.32"
inkscape:version="0.48.4 r9939"
sodipodi:docname="bang.svg">
<defs
id="defs24" />
<metadata
id="metadata23">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8284271"
inkscape:cx="48.730753"
inkscape:cy="40.238815"
inkscape:window-width="1600"
inkscape:window-height="834"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:current-layer="svg1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-maximized="1"
inkscape:snap-nodes="true"
inkscape:snap-bbox="false">
<inkscape:grid
type="xygrid"
id="grid3007"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<linearGradient
id="paint"
gradientUnits="userSpaceOnUse"
x1="14.5"
y1="99"
x2="119.5"
y2="99">
<stop
offset="0"
style="stop-color:#DA1800"
id="stop17" />
<stop
offset="0.33"
style="stop-color:#B42D2D"
id="stop18" />
<stop
offset="0.66"
style="stop-color:#FA1818"
id="stop19" />
<stop
offset="1"
style="stop-color:#B42D2D"
id="stop20" />
</linearGradient>
<path
transform="matrix(1.4,0,0,1.4,-1074,-577)"
d="m 805,435 a 15,15 0 1 1 -30,0 15,15 0 1 1 30,0 z"
sodipodi:ry="15"
sodipodi:rx="15"
sodipodi:cy="435"
sodipodi:cx="790"
id="path2999"
style="fill:#cc0000;fill-opacity:1;stroke:none"
sodipodi:type="arc" />
<rect
style="fill:#cc0000;fill-opacity:1;stroke:none"
id="rect3001"
width="8"
height="64"
x="28"
y="0"
rx="4.5999999"
ry="4.5999999" />
<rect
ry="4.5999999"
rx="4.5999999"
y="-43.712814"
x="39.712811"
height="64"
width="8"
id="rect3013"
style="fill:#cc0000;fill-opacity:1;stroke:none"
transform="matrix(0.5,0.8660254,-0.8660254,0.5,0,0)" />
<rect
transform="matrix(-0.5,0.8660254,-0.8660254,-0.5,0,0)"
style="fill:#cc0000;fill-opacity:1;stroke:none"
id="rect3015"
width="8"
height="64"
x="7.7128115"
y="-75.712807"
rx="4.5999999"
ry="4.5999999" />
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="64"
height="64"
id="svg9373"
inkscape:version="0.48.4 r9939"
sodipodi:docname="flag.svg">
<metadata
id="metadata9418">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs9416" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="834"
id="namedview9414"
showgrid="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:zoom="1"
inkscape:cx="37.101481"
inkscape:cy="14.748665"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg9373">
<inkscape:grid
type="xygrid"
id="grid9641"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<linearGradient
id="paint"
gradientUnits="userSpaceOnUse"
x1="14.5"
y1="99"
x2="119.5"
y2="99">
<stop
offset="0"
style="stop-color:#DA1800"
id="stop9404" />
<stop
offset="0.33"
style="stop-color:#B42D2D"
id="stop9406" />
<stop
offset="0.66"
style="stop-color:#FA1818"
id="stop9408" />
<stop
offset="1"
style="stop-color:#B42D2D"
id="stop9410" />
</linearGradient>
<path
style="fill:#2e3436;fill-opacity:1;stroke-width:1;stroke-miterlimit:4"
d="M 8.086319,0.175024 17.084785,0 l 0,3.104056 L 58.104384,20.741065 17.040446,38.378074 16.99727,64 8,64 z"
id="path9621"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="64"
height="64"
id="svg9373"
inkscape:version="0.48.4 r9939"
sodipodi:docname="flag.svg">
<metadata
id="metadata9418">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs9416" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="834"
id="namedview9414"
showgrid="false"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:zoom="1"
inkscape:cx="37.101481"
inkscape:cy="14.748665"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg9373">
<inkscape:grid
type="xygrid"
id="grid9641"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<linearGradient
id="paint"
gradientUnits="userSpaceOnUse"
x1="14.5"
y1="99"
x2="119.5"
y2="99">
<stop
offset="0"
style="stop-color:#DA1800"
id="stop9404" />
<stop
offset="0.33"
style="stop-color:#B42D2D"
id="stop9406" />
<stop
offset="0.66"
style="stop-color:#FA1818"
id="stop9408" />
<stop
offset="1"
style="stop-color:#B42D2D"
id="stop9410" />
</linearGradient>
<path
style="fill:#2e3436;fill-opacity:1;stroke-width:1;stroke-miterlimit:4"
d="M 8.086319,0.175024 17.084785,0 l 0,3.104056 L 58.104384,20.741065 17.040446,38.378074 16.99727,64 8,64 z"
id="path9621"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="64"
height="64"
id="svg9373"
inkscape:version="0.48.4 r9939"
sodipodi:docname="flag-question.svg">
<metadata
id="metadata9418">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs9416" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="834"
id="namedview9414"
showgrid="true"
inkscape:snap-nodes="false"
inkscape:snap-bbox="true"
inkscape:zoom="1"
inkscape:cx="47.542826"
inkscape:cy="16.424223"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg9373">
<inkscape:grid
type="xygrid"
id="grid9641"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<linearGradient
id="paint"
gradientUnits="userSpaceOnUse"
x1="14.5"
y1="99"
x2="119.5"
y2="99">
<stop
offset="0"
style="stop-color:#DA1800"
id="stop9404" />
<stop
offset="0.33"
style="stop-color:#B42D2D"
id="stop9406" />
<stop
offset="0.66"
style="stop-color:#FA1818"
id="stop9408" />
<stop
offset="1"
style="stop-color:#B42D2D"
id="stop9410" />
</linearGradient>
<path
style="fill:#2e3436;fill-opacity:1;stroke-width:1;stroke-miterlimit:4"
d="M 8.086319,0.175024 17.084785,0 l 0,3.104056 L 58.104384,20.741065 17.040446,38.378074 16.99727,64 8,64 z"
id="path9621"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<g
style="fill:#2e3436;fill-opacity:1"
transform="matrix(2.7979138,0,0,2.7979138,-223.48821,-253.48342)"
id="g15007">
<path
style="color:#bebebe;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible"
d="m 97.348014,103.46875 c 1.64243,-0.092 3.095496,1.17008 3.187496,2.8125 -1e-4,1.40136 -0.37771,1.92177 -1.593746,2.84375 -0.19093,0.14364 -0.3256,0.2506 -0.375,0.3125 -0.0494,0.0621 -0.0312,0.0332 -0.0312,0.0312 0.007,0.52831 -0.47163,1 -1,1 -0.52837,0 -1.007,-0.47169 -1,-1 0,-0.50239 0.22424,-0.94342 0.46875,-1.25 0.24451,-0.30663 0.4913,-0.51638 0.71875,-0.6875 0.20405,-0.16056 0.46083,-0.38454 0.6875,-0.65625 0.0935,-0.1121 0.129,-0.30766 0.125,-0.4375 l 0,-0.0312 c -0.0316,-0.56324 -0.49926,-0.9691 -1.0625,-0.9375 -0.56324,0.0316 -0.9691,0.43676 -0.9375,1 l -2,0 c -0.092,-1.64243 1.17007,-2.9079 2.8125,-3 z m 0.1875,8 c 0.55228,0 1,0.44772 1,1 0,0.55228 -0.44772,1 -1,1 -0.55228,0 -1,-0.44772 -1,-1 0,-0.55228 0.44772,-1 1,-1 z"
id="path15009"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccsccccccsccccsssss" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="64"
height="64"
id="svg1"
sodipodi:version="0.32"
inkscape:version="0.48.4 r9939"
sodipodi:docname="mine.svg">
<defs
id="defs24" />
<metadata
id="metadata23">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8284271"
inkscape:cx="48.730753"
inkscape:cy="40.238815"
inkscape:window-width="1600"
inkscape:window-height="834"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:current-layer="svg1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-maximized="1"
inkscape:snap-nodes="true"
inkscape:snap-bbox="false">
<inkscape:grid
type="xygrid"
id="grid3007"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true" />
</sodipodi:namedview>
<linearGradient
id="paint"
gradientUnits="userSpaceOnUse"
x1="14.5"
y1="99"
x2="119.5"
y2="99">
<stop
offset="0"
style="stop-color:#DA1800"
id="stop17" />
<stop
offset="0.33"
style="stop-color:#B42D2D"
id="stop18" />
<stop
offset="0.66"
style="stop-color:#FA1818"
id="stop19" />
<stop
offset="1"
style="stop-color:#B42D2D"
id="stop20" />
</linearGradient>
<path
transform="matrix(1.4,0,0,1.4,-1074,-577)"
d="m 805,435 a 15,15 0 1 1 -30,0 15,15 0 1 1 30,0 z"
sodipodi:ry="15"
sodipodi:rx="15"
sodipodi:cy="435"
sodipodi:cx="790"
id="path2999"
style="fill:#2e3436;fill-opacity:1;stroke:none"
sodipodi:type="arc" />
<rect
style="fill:#2e3436;fill-opacity:1;stroke:none"
id="rect3001"
width="8"
height="64"
x="28"
y="0"
rx="4.5999999"
ry="4.5999999" />
<rect
ry="4.5999999"
rx="4.5999999"
y="-43.712814"
x="39.712811"
height="64"
width="8"
id="rect3013"
style="fill:#2e3436;fill-opacity:1;stroke:none"
transform="matrix(0.5,0.8660254,-0.8660254,0.5,0,0)" />
<rect
transform="matrix(-0.5,0.8660254,-0.8660254,-0.5,0,0)"
style="fill:#2e3436;fill-opacity:1;stroke:none"
id="rect3015"
width="8"
height="64"
x="7.7128115"
y="-75.712807"
rx="4.5999999"
ry="4.5999999" />
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128" version="1.0"><defs><linearGradient id="a"><stop offset="0" stop-color="#68676b"/><stop offset=".8" stop-color="#424048"/><stop offset="1" stop-color="#241f31"/></linearGradient><radialGradient xlink:href="#a" id="d" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.34416 .0006 -.00062 1.38763 -121.22 -718.103)" cx="279.422" cy="446.483" fx="279.422" fy="446.483" r="224"/><linearGradient xlink:href="#b" id="e" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.0015 0 0 .99993 72.09 56.015)" x1="43.844" y1="234" x2="-60" y2="234"/><linearGradient id="b"><stop offset="0" stop-color="#d5d3cf"/><stop offset=".038" stop-color="#e3e2df"/><stop offset=".077" stop-color="#c0bfbc"/><stop offset=".923" stop-color="#c0bfbc"/><stop offset=".962" stop-color="#e3e2df"/><stop offset="1" stop-color="#d5d3cf"/></linearGradient></defs><g transform="translate(0 -172)"><g transform="matrix(1.34135 0 0 1.34135 -87.385 -639.02)"><rect ry="32" rx="32" y="-100" x="112" height="288" width="288" id="c" style="marker:none" display="inline" opacity="1" vector-effect="none" fill="#241f31" fill-opacity="1" stroke="none" stroke-width="32" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="4" stroke-dasharray="none" stroke-dashoffset="0" stroke-opacity="1" marker-start="none" marker-mid="none" marker-end="none" paint-order="normal"/><use transform="rotate(45 256 44)" xlink:href="#c" width="100%" height="100%" style="marker:none" fill="#241f31" stroke-width="32"/><circle r="168" cy="44" cx="256" style="marker:none" fill="url(#d)"/></g><rect ry="8" rx="8" height="48" width="104" x="12" y="240" fill="url(#e)"/><path d="M62 218v66h46c4.432 0 8-3.568 8-8v-50c0-4.432-3.568-8-8-8H62z" fill="#deddda"/><path d="M20 182c-4.432 0-8 3.568-8 8v84c0 4.432 3.568 8 8 8h44v-50h52v-42c0-4.432-3.568-8-8-8H66v2h-4v-2z" fill="#f6f5f4"/><path d="M12 232h104" fill="none" stroke="#deddda" stroke-width="4"/><path d="M12 231h104" fill="none" stroke="#c0bfbc" stroke-width="2"/><path d="M64 184v100" fill="none" stroke="#deddda" stroke-width="4"/><path d="M28 189.57v32.454h4.103V209.72L50 200.943z" fill="#2dc0af"/><path style="line-height:1000%;-inkscape-font-specification:'Cantarell Ultra-Bold'" d="M28 270h18v-6h-6v-20h-3.196l-10.069 5.225 2.193 5.206L34 252l-.02 12H28z" font-weight="800" font-family="Cantarell" letter-spacing="0" word-spacing="0" fill="#1a5fb4"/><g transform="translate(-2 1)" fill="#a51d2d"><circle style="marker:none" cx="91" cy="257" r="15"/><rect style="marker:none" width="6" height="38" x="88" y="238" rx="2" ry="2"/><rect ry="2" rx="2" y="-110" x="254" height="38" width="6" style="marker:none" transform="rotate(90)"/><rect ry="2" rx="2" y="98.38" x="243.073" height="38" width="6" style="marker:none" transform="rotate(45)"/><rect transform="rotate(135)" style="marker:none" width="6" height="38" x="114.38" y="-265.073" rx="2" ry="2"/></g><g transform="translate(-2 -1)" fill="#ed333b"><circle r="15" cy="257" cx="91" style="marker:none"/><rect ry="2" rx="2" y="238" x="88" height="38" width="6" style="marker:none"/><rect transform="rotate(90)" style="marker:none" width="6" height="38" x="254" y="-110" rx="2" ry="2"/><rect transform="rotate(45)" style="marker:none" width="6" height="38" x="243.073" y="98.38" rx="2" ry="2"/><rect ry="2" rx="2" y="-265.073" x="114.38" height="38" width="6" style="marker:none" transform="rotate(135)"/></g></g></svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1,302 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="128"
height="128"
version="1.0"
id="svg75"
sodipodi:docname="mines_app_running.svg"
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview77"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="6.609375"
inkscape:cx="64.07565"
inkscape:cy="64"
inkscape:window-width="1856"
inkscape:window-height="1048"
inkscape:window-x="64"
inkscape:window-y="32"
inkscape:window-maximized="1"
inkscape:current-layer="svg75" />
<defs
id="defs24">
<linearGradient
id="a">
<stop
offset="0"
stop-color="#68676b"
id="stop2" />
<stop
offset=".8"
stop-color="#424048"
id="stop4" />
<stop
offset="1"
stop-color="#241f31"
id="stop6" />
</linearGradient>
<radialGradient
xlink:href="#a"
id="d"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.34416 .0006 -.00062 1.38763 -121.22 -718.103)"
cx="279.422"
cy="446.483"
fx="279.422"
fy="446.483"
r="224" />
<linearGradient
xlink:href="#b"
id="e"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0015 0 0 .99993 72.09 56.015)"
x1="43.844"
y1="234"
x2="-60"
y2="234" />
<linearGradient
id="b">
<stop
offset="0"
stop-color="#d5d3cf"
id="stop11" />
<stop
offset=".038"
stop-color="#e3e2df"
id="stop13" />
<stop
offset=".077"
stop-color="#c0bfbc"
id="stop15" />
<stop
offset=".923"
stop-color="#c0bfbc"
id="stop17" />
<stop
offset=".962"
stop-color="#e3e2df"
id="stop19" />
<stop
offset="1"
stop-color="#d5d3cf"
id="stop21" />
</linearGradient>
</defs>
<g
transform="translate(0 -172)"
id="g73">
<g
transform="matrix(1.34135 0 0 1.34135 -87.385 -639.02)"
id="g31">
<rect
ry="32"
rx="32"
y="-100"
x="112"
height="288"
width="288"
id="c"
style="marker:none"
display="inline"
opacity="1"
vector-effect="none"
fill="#241f31"
fill-opacity="1"
stroke="none"
stroke-width="32"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke-miterlimit="4"
stroke-dasharray="none"
stroke-dashoffset="0"
stroke-opacity="1"
marker-start="none"
marker-mid="none"
marker-end="none"
paint-order="normal" />
<use
transform="rotate(45 256 44)"
xlink:href="#c"
width="100%"
height="100%"
style="marker:none"
fill="#241f31"
stroke-width="32"
id="use27" />
<circle
r="168"
cy="44"
cx="256"
style="marker:none"
fill="url(#d)"
id="circle29" />
</g>
<rect
ry="8"
rx="8"
height="48"
width="104"
x="12"
y="240"
fill="url(#e)"
id="rect33" />
<path
d="M62 218v66h46c4.432 0 8-3.568 8-8v-50c0-4.432-3.568-8-8-8H62z"
fill="#deddda"
id="path35" />
<path
d="M20 182c-4.432 0-8 3.568-8 8v84c0 4.432 3.568 8 8 8h44v-50h52v-42c0-4.432-3.568-8-8-8H66v2h-4v-2z"
fill="#f6f5f4"
id="path37" />
<path
d="M12 232h104"
fill="none"
stroke="#deddda"
stroke-width="4"
id="path39" />
<path
d="M12 231h104"
fill="none"
stroke="#c0bfbc"
stroke-width="2"
id="path41" />
<path
d="M64 184v100"
fill="none"
stroke="#deddda"
stroke-width="4"
id="path43" />
<path
d="M28 189.57v32.454h4.103V209.72L50 200.943z"
fill="#2dc0af"
id="path45" />
<path
style="line-height:1000%;-inkscape-font-specification:'Cantarell Ultra-Bold'"
d="M28 270h18v-6h-6v-20h-3.196l-10.069 5.225 2.193 5.206L34 252l-.02 12H28z"
font-weight="800"
font-family="Cantarell"
letter-spacing="0"
word-spacing="0"
fill="#1a5fb4"
id="path47" />
<g
transform="translate(-2 1)"
fill="#a51d2d"
id="g59">
<circle
style="marker:none"
cx="91"
cy="257"
r="15"
id="circle49" />
<rect
style="marker:none"
width="6"
height="38"
x="88"
y="238"
rx="2"
ry="2"
id="rect51" />
<rect
ry="2"
rx="2"
y="-110"
x="254"
height="38"
width="6"
style="marker:none"
transform="rotate(90)"
id="rect53" />
<rect
ry="2"
rx="2"
y="98.38"
x="243.073"
height="38"
width="6"
style="marker:none"
transform="rotate(45)"
id="rect55" />
<rect
transform="rotate(135)"
style="marker:none"
width="6"
height="38"
x="114.38"
y="-265.073"
rx="2"
ry="2"
id="rect57" />
</g>
<g
transform="translate(-2 -1)"
fill="#ed333b"
id="g71">
<circle
r="15"
cy="257"
cx="91"
style="marker:none"
id="circle61" />
<rect
ry="2"
rx="2"
y="238"
x="88"
height="38"
width="6"
style="marker:none"
id="rect63" />
<rect
transform="rotate(90)"
style="marker:none"
width="6"
height="38"
x="254"
y="-110"
rx="2"
ry="2"
id="rect65" />
<rect
transform="rotate(45)"
style="marker:none"
width="6"
height="38"
x="243.073"
y="98.38"
rx="2"
ry="2"
id="rect67" />
<rect
ry="2"
rx="2"
y="-265.073"
x="114.38"
height="38"
width="6"
style="marker:none"
transform="rotate(135)"
id="rect69" />
</g>
</g>
<rect
style="fill:#0000ff"
id="rect235"
width="5.3330002"
height="128"
x="0.36789855"
y="0.029102948" />
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<menu id = "mine_menu">
<section>
<item>
<attribute name="label">New Game</attribute>
<attribute name="action">win.new_game</attribute>
</item>
<item>
<attribute name="label">Custom Game</attribute>
<attribute name="action">win.custom_game</attribute>
</item>
<item>
<attribute name="label">Show Scores</attribute>
<attribute name="action">win.scores</attribute>
</item>
<item>
<attribute name="label">Show all mines</attribute>
<attribute name="action">win.show_mines</attribute>
</item>
<item>
<attribute name="label">Quit</attribute>
<attribute name="action">win.quit</attribute>
</item>
</section>
</menu>
</interface>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 --> <!-- Generated with glade 3.40.0 -->
<interface> <interface>
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<object class="GtkImage" id="image1"> <object class="GtkImage" id="image1">
@ -116,6 +116,18 @@
<property name="pixel-size">48</property> <property name="pixel-size">48</property>
<property name="icon-name">calcapp</property> <property name="icon-name">calcapp</property>
</object> </object>
<object class="GtkImage" id="image26">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">mines_app</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image27">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">mines_app</property>
<property name="icon_size">6</property>
</object>
<object class="GtkImage" id="image3"> <object class="GtkImage" id="image3">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@ -146,6 +158,283 @@
<property name="pixel-size">48</property> <property name="pixel-size">48</property>
<property name="icon-name">my_prefs</property> <property name="icon-name">my_prefs</property>
</object> </object>
<object class="GtkBox" id="dock_box">
<property name="width-request">54</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkSeparator" id="separator_start">
<property name="height-request">5</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnlaunch">
<property name="width-request">54</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image1</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkSeparator" id="separator_2">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="icons_sw">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox" id="icons_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkButton" id="btnfiles">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image3</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btndraw">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btncalc">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image25</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btngame">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image4</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnedit">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image5</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnimage">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image6</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnset">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image7</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btngame24">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image23</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">7</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnmine">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image26</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">8</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<object class="GtkSeparator" id="separator_3">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">11</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btntrash">
<property name="width-request">54</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image21</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">12</property>
</packing>
</child>
<child>
<object class="GtkSeparator" id="separator_end">
<property name="height-request">5</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">end</property>
<style>
<class name="separator1"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">13</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
<object class="GtkImage" id="image8"> <object class="GtkImage" id="image8">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@ -187,203 +476,10 @@
<property name="hexpand">True</property> <property name="hexpand">True</property>
<property name="vexpand">True</property> <property name="vexpand">True</property>
<child> <child>
<object class="GtkBox" id="dock_box"> <object class="GtkBox" id="dock_left">
<property name="width-request">54</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child>
<object class="GtkSeparator" id="separator_start">
<property name="height-request">5</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnlaunch">
<property name="width-request">54</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image1</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="width-request">52</property>
<property name="height-request">340</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hscrollbar-policy">never</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkButton" id="btnfiles">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image3</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btndraw">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btncalc">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image25</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btngame">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image4</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnedit">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image5</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnimage">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image6</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnset">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image7</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btngame24">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image23</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">7</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child> <child>
<placeholder/> <placeholder/>
</child> </child>
@ -393,63 +489,6 @@
<child> <child>
<placeholder/> <placeholder/>
</child> </child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">11</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btntrash">
<property name="width-request">54</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image21</property>
<property name="relief">none</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">12</property>
</packing>
</child>
<child>
<object class="GtkSeparator" id="separator_end">
<property name="height-request">5</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<style>
<class name="separator1"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">13</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -760,7 +799,20 @@
</packing> </packing>
</child> </child>
<child> <child>
<placeholder/> <object class="GtkButton" id="padmine">
<property name="label" translatable="yes">MineSweeper</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image27</property>
<property name="relief">none</property>
<property name="image-position">top</property>
<property name="always-show-image">True</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">2</property>
</packing>
</child> </child>
<child> <child>
<placeholder/> <placeholder/>
@ -928,7 +980,25 @@
</packing> </packing>
</child> </child>
<child> <child>
<placeholder/> <object class="GtkBox" id="dock_right">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child> </child>
</object> </object>
<packing> <packing>
@ -938,7 +1008,24 @@
</packing> </packing>
</child> </child>
<child> <child>
<placeholder/> <object class="GtkBox" id="dock_bottom">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child> </child>
</object> </object>
</interface> </interface>

View File

@ -284,6 +284,205 @@
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkBox" id="dock_page">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">128</property>
<property name="icon-name">display_prefs</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<!-- n-columns=4 n-rows=5 -->
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="row-spacing">5</property>
<property name="column-spacing">5</property>
<child>
<object class="GtkCheckButton" id="mode_check">
<property name="label" translatable="yes">Use panel mode:expand the dock</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
<property name="width">3</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Position:</property>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="radio_left">
<property name="label" translatable="yes">Left</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="active">True</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="radio_right">
<property name="label" translatable="yes">Right</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
<property name="group">radio_left</property>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkRadioButton" id="radio_bottom">
<property name="label" translatable="yes">Bottom</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
<property name="group">radio_left</property>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">4</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child>
<object class="GtkButton" id="btnapply1">
<property name="label" translatable="yes">Apply</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="halign">end</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="name">dock_prefs</property>
<property name="title" translatable="yes">Dock Preferences</property>
<property name="position">2</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>

View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<!-- Created with Cambalache 0.11.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkWindow" id="scores_win">
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkTreeView" id="scores_view">
<property name="width-request">400</property>
<property name="height-request">300</property>
<property name="can-focus">False</property>
<property name="valign">start</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="btn_box">
<property name="height-request">3</property>
<property name="can-focus">False</property>
<child>
<object class="GtkLabel">
<property name="can-focus">False</property>
<property name="hexpand">True</property>
<property name="label"> </property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btnclose">
<property name="label">Close</property>
<property name="can-focus">False</property>
<property name="receives-default">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

View File

@ -8,5 +8,10 @@
@import url("resource://org/gtk/daleclack/reset.css"); @import url("resource://org/gtk/daleclack/reset.css");
box{ box{
background-color:alpha(white,0.7); background-color:alpha(gray,0.7);
color:white;
}
label{
color:black;
} }

136
Gtkmm3_Mac/res/win_input.ui Normal file
View File

@ -0,0 +1,136 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<!-- Created with Cambalache 0.11.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkDialog" id="dialog">
<property name="width-request">300</property>
<property name="height-request">150</property>
<property name="can-focus">False</property>
<property name="type-hint">dialog</property>
<child internal-child="vbox">
<object class="GtkBox">
<property name="can-focus">False</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="margin-top">10</property>
<property name="margin-bottom">10</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child internal-child="action_area">
<object class="GtkButtonBox">
<property name="can-focus">False</property>
<property name="layout-style">end</property>
<child>
<object class="GtkButton" id="btn_ok">
<property name="label" translatable="yes">OK</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_cancel">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="main_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Input Name:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry_name">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="check_scores">
<property name="label" translatable="yes">Show Scores Window</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<action-widgets>
<action-widget response="-5">btn_ok</action-widget>
<action-widget response="-6">btn_cancel</action-widget>
</action-widgets>
</object>
</interface>

View File

@ -0,0 +1,68 @@
#pragma once
#include <gtkmm.h>
#include "InputBox.hh"
#include "ScoresWin.hh"
class MineCell : public Gtk::Button
{
public:
bool has_mine = false; // Whether the grid has mine
bool cleared = false; // Whether the mine is cleared
int mines_around; // The number near the grid
int x, y; // The Position of the grid
MineCell()
{
// Set button style
set_relief(Gtk::RELIEF_NONE);
mines_around = 0;
}
};
class MineSweeper : public Gtk::ApplicationWindow
{
public:
MineSweeper();
~MineSweeper();
private:
// HeaderBar
Gtk::HeaderBar header;
Gtk::MenuButton menu_btn;
Gtk::Popover popover1;
// Child widgets
Gtk::Grid mine_grid;
Gtk::Label status_label;
Gtk::Box main_box, btn_box;
Gtk::Button btnstart, btnshow, btnexit;
// The cell to place mines
MineCell *cell;
bool winned, game_ended; // The status of game(win/end)
int mines_clear, mine_count; // Whether the mine is cleared
// Menu
Glib::RefPtr<Gtk::Builder> menu_builder;
// Timer
int timer_count;
sigc::connection mytimer;
// Input dialog
InputBox *input_dialog;
// Scores Window
ScoresWin *scores_win;
// Signal Handlers
void new_game(); // "New Game" handler
void reset_game(int width = 7, int height = 7, int mines = 9); // Reset all mines
void calc_mines(); // Get the mines around
void show_mines(); // Show all mines
void show_scores(); // Show all scores
void game_lost(int explode_index); // You lost the game
void cell_clicked(MineCell *cell1); // Open a cell
bool timer_func(); // Timer
void check_mines(int pos_x, int pos_y); // Check if there is a mine
};

View File

@ -1,39 +1,57 @@
#include "MyStack.hh" #include "MyStack.hh"
#include <iostream>
MyStack::MyStack(){ MyStack::MyStack()
{
// Get Widgets // Get Widgets
stackbuilder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/stack.ui"); stackbuilder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/stack.ui");
stackbuilder->get_widget("main_stack",stack); stackbuilder->get_widget("main_stack", stack);
stackbuilder->get_widget("login_page",login_page); stackbuilder->get_widget("login_page", login_page);
stackbuilder->get_widget("main_page",main_page); stackbuilder->get_widget("main_page", main_page);
stackbuilder->get_widget("btnlogin",btnlogin); stackbuilder->get_widget("btnlogin", btnlogin);
// Link Signals // Link Signals
btnlogin->signal_clicked().connect(sigc::mem_fun(*this,&MyStack::btnlogin_clicked)); btnlogin->signal_clicked().connect(sigc::mem_fun(*this, &MyStack::btnlogin_clicked));
}
//Add Widget void MyStack::mystack_init(Gtk::Window *window, Gtk::Image *m_back)
main_dock = MyDock::create(); {
main_dock->mydock_init(window, m_back);
}
void MyStack::show_prefs()
{
main_dock->btnset_clicked();
}
void MyStack::logout()
{
stack->set_visible_child(*login_page);
}
void MyStack::btnlogin_clicked()
{
stack->set_visible_child(*main_page);
}
void MyStack::set_mydock_mode(DockMode mode)
{
// main_dock->set_dock_mode(mode);
// switch (mode)
// {
// case DockMode::MODE_DOCK:
// std::cout << "dock mode" << std::endl;
// break;
// case DockMode::MODE_PANEL:
// std::cout << "panel mode" << std::endl;
// break;
// default:
// std::cout << "undefined" << std::endl;
// break;
// }
// Add Widget
main_dock = MyDock::create(mode);
main_dock->set_hexpand(); main_dock->set_hexpand();
main_dock->set_vexpand(); main_dock->set_vexpand();
main_page->pack_start(*main_dock); main_page->pack_start(*main_dock);
} }
void MyStack::mystack_init(Gtk::Window *window, Gtk::Image *m_back){
main_dock->mydock_init(window,m_back);
}
void MyStack::show_prefs(){
main_dock->btnset_clicked();
}
void MyStack::logout(){
stack->set_visible_child(*login_page);
}
void MyStack::btnlogin_clicked(){
stack->set_visible_child(*main_page);
}
void MyStack::set_mydock_mode(DockMode mode){
main_dock->set_dock_mode(mode);
}

View File

@ -9,7 +9,14 @@ MyWin::MyWin()
// Initalize window // Initalize window
set_icon_name("My_GtkUI"); set_icon_name("My_GtkUI");
set_title("My GtkUI macOS Version"); set_title("My GtkUI macOS Version");
get_size_config(width, height); get_size_config(width, height, panel_mode);
// Set the display mode of dock
if(panel_mode){
main_stack.set_mydock_mode(DockMode::MODE_PANEL);
}else{
main_stack.set_mydock_mode(DockMode::MODE_DOCK);
}
// Add background // Add background
auto pixbuf = Gdk::Pixbuf::create_from_xpm_data(winpe); auto pixbuf = Gdk::Pixbuf::create_from_xpm_data(winpe);
@ -80,7 +87,7 @@ void MyWin::about_activated()
// Version information // Version information
char *version; char *version;
version = g_strdup_printf("5.4\nRunning Against: Gtkmm %d.%d.%d", version = g_strdup_printf("5.6\nRunning Against: Gtkmm %d.%d.%d",
GTKMM_MAJOR_VERSION, GTKMM_MAJOR_VERSION,
GTKMM_MINOR_VERSION, GTKMM_MINOR_VERSION,
GTKMM_MICRO_VERSION); GTKMM_MICRO_VERSION);

View File

@ -20,6 +20,7 @@ private:
//Main Stack //Main Stack
MyStack main_stack; MyStack main_stack;
int width, height; int width, height;
bool panel_mode;
//Signal Handlers //Signal Handlers
void logout_activated(); void logout_activated();

View File

@ -0,0 +1,99 @@
#include "InputBox.hh"
InputBox::InputBox(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade)
: Gtk::Dialog(cobject),
ref_builder(ref_Glade)
{
// Get Widgets
ref_builder->get_widget("entry_name", entry_name);
ref_builder->get_widget("check_scores", check_scores);
entry_name->signal_activate().connect(sigc::mem_fun(*this, &InputBox::entry_activated));
}
void InputBox::on_response(int response_id)
{
// Open a file to save json data
std::fstream outfile;
outfile.open("scores.json", std::ios_base::out);
if (outfile.is_open())
{
// Insert data to json
std::string name = std::string((entry_name->get_text()).c_str());
names.push_back(name);
times.push_back(game_time);
data["name"] = names;
data["time"] = times;
// Output data
outfile << data;
}
outfile.close();
if (response_id == Gtk::RESPONSE_OK)
{
read_scores(check_scores->get_active());
}
hide();
}
void InputBox::read_scores(bool show_scores_win)
{
// If show scores checkbutton is checked, show scores window
if (show_scores_win)
{
scores_win1->update_and_show();
}
}
void InputBox::set_game_time(int time)
{
// Try to open json file
std::fstream jsonfile;
jsonfile.open("scores.json", std::ios_base::in);
// If json file opened, read the data
if (jsonfile.is_open())
{
data = json::parse(jsonfile);
std::vector<std::string> names1 = data["name"];
std::vector<int> times1 = data["time"];
names = names1;
times = times1;
}
else
{
// Otherwist, create json data
data = json::parse(R"(
{
"name":[" "],
"time":[0]
}
)");
}
jsonfile.close();
// Initalize time
game_time = time;
}
void InputBox::entry_activated()
{
// Default response
response(Gtk::RESPONSE_OK);
}
void InputBox::set_scores_window(ScoresWin *win1)
{
// Bind Scores Window
scores_win1 = win1;
}
InputBox *InputBox::create()
{
// Create a inputbox object
auto builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/win_input.ui");
InputBox *dialog;
builder->get_widget_derived("dialog", dialog);
return dialog;
}

View File

@ -0,0 +1,38 @@
#pragma once
#include <gtkmm.h>
#include "jsonfile.hh"
#include "ScoresWin.hh"
class InputBox : public Gtk::Dialog{
public:
static InputBox *create();
InputBox(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade);
void read_scores(bool show_scores_win = true);
void set_game_time(int time);
void set_scores_window(ScoresWin *win1);
protected:
void on_response(int response_id) override;
private:
int game_time;
// Data to write to json file
json data;
std::vector<std::string> names;
std::vector<int> times;
// Builder Object
Glib::RefPtr<Gtk::Builder> ref_builder;
// Child widget
Gtk::Entry *entry_name;
Gtk::CheckButton *check_scores;
// Scores Window
ScoresWin *scores_win1;
// Signal Handlers
void entry_activated();
};

View File

@ -0,0 +1,295 @@
#include "MineSweeper.hh"
#include <string>
#include <iostream>
MineSweeper::MineSweeper()
: main_box(Gtk::ORIENTATION_VERTICAL, 5),
btn_box(Gtk::ORIENTATION_HORIZONTAL, 5),
cell(nullptr)
{
// Initalize Window
header.set_title("MineSweeper");
set_titlebar(header);
header.set_show_close_button();
header.set_decoration_layout("close,minimize,maximize:menu");
header.pack_end(menu_btn);
set_icon_name("org.gtk.daleclack");
// Initalize Menu
menu_builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/mine_menu.xml");
auto object = menu_builder->get_object("mine_menu");
auto gmenu = Glib::RefPtr<Gio::Menu>::cast_dynamic(object);
popover1.bind_model(gmenu);
menu_btn.set_popover(popover1);
// Add Actions
add_action("new_game", sigc::mem_fun(*this, &MineSweeper::new_game));
add_action("scores", sigc::mem_fun(*this, &MineSweeper::show_scores));
add_action("show_mines", sigc::mem_fun(*this, &MineSweeper::show_mines));
add_action("quit", sigc::mem_fun(*this, &MineSweeper::hide));
// Default setting
reset_game();
// Buttons
btnstart.set_label("Start/Reset");
btnshow.set_label("Show All");
btnexit.set_label("Exit");
btn_box.pack_start(btnstart, Gtk::PACK_SHRINK);
btn_box.pack_start(btnshow, Gtk::PACK_SHRINK);
btn_box.pack_start(btnexit, Gtk::PACK_SHRINK);
btnstart.signal_clicked().connect(sigc::mem_fun(*this, &MineSweeper::new_game));
btnshow.signal_clicked().connect(sigc::mem_fun(*this, &MineSweeper::show_mines));
btnexit.signal_clicked().connect(sigc::mem_fun(*this, &MineSweeper::hide));
// Pack widgets
status_label.set_halign(Gtk::ALIGN_CENTER);
btn_box.set_halign(Gtk::ALIGN_CENTER);
mine_grid.set_halign(Gtk::ALIGN_CENTER);
main_box.pack_start(status_label, Gtk::PACK_SHRINK);
main_box.pack_start(mine_grid);
main_box.pack_start(btn_box, Gtk::PACK_SHRINK);
// Create a dialog
input_dialog = InputBox::create();
// Create Scores Window
scores_win = ScoresWin::create();
// Bind windows
input_dialog->set_transient_for(*this);
scores_win->set_transient_for(*this);
input_dialog->set_scores_window(scores_win);
// Show everything
add(main_box);
show_all_children();
}
MineSweeper::~MineSweeper(){
// Delete all resources
delete input_dialog;
delete scores_win;
if(cell != nullptr){
delete[] cell;
}
}
void MineSweeper::new_game(){
// New game = reset game
reset_game();
}
void MineSweeper::reset_game(int width, int height, int mines)
{
// Clear the cells
if(cell != nullptr){
delete[] cell;
}
cell = new MineCell[width * height];
// Reset timer
mytimer.disconnect();
timer_count = 0;
mytimer = Glib::signal_timeout().connect(sigc::mem_fun(*this, &MineSweeper::timer_func), 1000);
mine_count = 0;
mines_clear = 0;
mine_grid.set_sensitive();
// Reset all data
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
// Initalize cell
cell[i * 7 + j].set_relief(Gtk::RELIEF_HALF);
cell[i * 7 + j].set_image_from_icon_name("", Gtk::ICON_SIZE_LARGE_TOOLBAR);
cell[i * 7 + j].set_always_show_image();
cell[i * 7 + j].set_size_request(40, 40);
cell[i * 7 + j].mines_around = 0;
cell[i * 7 + j].has_mine = false;
cell[i * 7 + j].cleared = false;
}
}
// Reset mines
while (mine_count < mines)
{
int index = g_random_int_range(0, width * height);
if (!(cell[index].has_mine))
{
cell[index].has_mine = true;
// cell[index].set_label("x");
mine_count++;
}
}
// std::cout << mine_count << std::endl;
game_ended = false;
winned = true;
status_label.set_label(" ");
calc_mines();
// Append buttons to grid
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
// cell[i * 7 + j].set_label("?");
cell[i * width + j].signal_clicked().connect(sigc::bind(
sigc::mem_fun(*this, &MineSweeper::cell_clicked), &cell[i * width + j]));
mine_grid.attach(cell[i * width + j], j, i);
cell[i * width + j].set_relief(Gtk::RELIEF_HALF);
cell[i * width + j].x = j;
cell[i * width + j].y = i;
cell[i * width + j].cleared = false;
}
}
mine_grid.show_all();
}
void MineSweeper::calc_mines()
{
// Calculate the mines around a cell
for (int i = 0; i < 7; i++)
{
for (int j = 0; j < 7; j++)
{
int index1, index2;
// The Search cell should not over the grids
for (index1 = MAX(0, i - 1); index1 < MIN(i + 1, 6) + 1; index1++)
{
for (index2 = MAX(0, j - 1); index2 < MIN(j + 1, 6) + 1; index2++)
{
if ((cell[index1 * 7 + index2].has_mine))
{
cell[i * 7 + j].mines_around++;
}
}
}
}
}
}
void MineSweeper::show_mines()
{
// Show all cell with a mine
for (int i = 0; i < 49; i++)
{
if (cell[i].has_mine)
{
cell[i].set_image_from_icon_name("mine", Gtk::ICON_SIZE_LARGE_TOOLBAR);
}
}
}
void MineSweeper::show_scores(){
// Show Scores Window
input_dialog->read_scores();
}
void MineSweeper::game_lost(int explode_index){
// When a cell with mine is clicked, show other mines
for (int i = 0; i < 49; i++)
{
if (cell[i].has_mine && i != explode_index)
{
cell[i].set_image_from_icon_name("mine", Gtk::ICON_SIZE_LARGE_TOOLBAR);
}
}
}
bool MineSweeper::timer_func()
{
// Set timer
char tmp[50];
timer_count++;
sprintf(tmp, "Time:%d", timer_count);
status_label.set_label(tmp);
return true;
}
void MineSweeper::cell_clicked(MineCell *cell1)
{
cell1->set_relief(Gtk::RELIEF_NONE);
if (!game_ended && !cell1->cleared)
{
//
// If get mine, the game will end now
if (cell1->has_mine)
{
// Set game to stop
winned = false;
cell1->cleared = true;
cell1->set_image_from_icon_name("exploded", Gtk::ICON_SIZE_LARGE_TOOLBAR);
// End the game
game_lost(cell1->y * 7 + cell1->x);
status_label.set_label("You lost!");
game_ended = true;
mytimer.disconnect();
mine_grid.set_sensitive(false);
}
else
{
// If no mines, check the cell around
check_mines(cell1->x, cell1->y);
}
}
}
void MineSweeper::check_mines(int pos_x, int pos_y)
{
if (pos_x >= 0 && pos_x <= 6 &&
pos_y >= 0 && pos_y <= 6)
{
if (!cell[pos_y * 7 + pos_x].has_mine &&
!cell[pos_y * 7 + pos_x].cleared)
{
mines_clear++;
// Show the cell has no mines around
if (cell[pos_y * 7 + pos_x].mines_around == 0)
{
cell[pos_y * 7 + pos_x].set_image_from_icon_name("", Gtk::ICON_SIZE_LARGE_TOOLBAR);
}
else
{
// Show the numbers of mines around a cell
char *label = g_strdup_printf("%dmines", cell[pos_y * 7 + pos_x].mines_around);
cell[pos_y * 7 + pos_x].set_image_from_icon_name(label, Gtk::ICON_SIZE_LARGE_TOOLBAR);
g_free(label);
}
// make the cell without mines cleared
cell[pos_y * 7 + pos_x].set_relief(Gtk::RELIEF_NONE);
cell[pos_y * 7 + pos_x].cleared = true;
// Check the cells around a cell that has no mines
if (cell[pos_y * 7 + pos_x].mines_around == 0)
{
check_mines((pos_x - 1), (pos_y - 1));
check_mines((pos_x + 1), (pos_y + 1));
check_mines((pos_x - 1), (pos_y + 1));
check_mines((pos_x + 1), (pos_y - 1));
check_mines(pos_x, (pos_y - 1));
check_mines(pos_x, (pos_y + 1));
check_mines((pos_x + 1), pos_y);
check_mines((pos_x - 1), pos_y);
}
}
}
// If all the mines has cleared, you has winned
if (mines_clear == 40)
{
// Stop the game
status_label.set_label("You winned!");
winned = true;
game_ended = true;
mytimer.disconnect();
// Save the time of game
input_dialog->set_game_time(timer_count);
input_dialog->show_all();
}
}

View File

@ -0,0 +1,76 @@
#include "ScoresWin.hh"
ScoresWin::ScoresWin(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade)
: Gtk::Window(cobject),
ref_builder(ref_Glade)
{
// Get Widgets
ref_builder->get_widget("btnclose", btnclose);
ref_builder->get_widget("scores_view", tree_view);
btnclose->signal_clicked().connect(sigc::mem_fun(*this, &ScoresWin::hide));
// Create the list store
store = Gtk::ListStore::create(column1);
store->set_sort_func(column1.win_time, sigc::mem_fun(*this, &ScoresWin::sort_func));
store->set_sort_column(column1.win_time, Gtk::SortType::SORT_ASCENDING);
tree_view->set_model(store);
tree_view->append_column("name", column1.player_name);
tree_view->append_column("time", column1.win_time);
}
void ScoresWin::update_and_show()
{
std::fstream infile;
infile.open("scores.json", std::ios_base::in);
if (infile.is_open())
{
// Read data from json file
json data = json::parse(infile);
std::vector<std::string> name_vec = data["name"];
std::vector<int> time_vec = data["time"];
// Clear the store
store->clear();
// Append data to the store
for (int i = 0; i < name_vec.size(); i++)
{
auto row = *(store->append());
row[column1.player_name] = name_vec[i];
row[column1.win_time] = time_vec[i];
}
}
show_all();
}
int ScoresWin::sort_func(const Gtk::TreeModel::iterator &iter1, const Gtk::TreeModel::iterator &iter2)
{
// Sort by the game time
auto row1 = *iter1;
auto row2 = *iter2;
if (row1[column1.win_time] < row2[column1.win_time])
{
return -1;
}
if (row1[column1.win_time] == row2[column1.win_time])
{
return 0;
}
else
{
return 1;
}
}
ScoresWin *ScoresWin::create()
{
// Create a window
auto builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/scoreswin.ui");
ScoresWin *main_win;
builder->get_widget_derived("scores_win", main_win);
return main_win;
}

View File

@ -0,0 +1,35 @@
#pragma once
#include <gtkmm.h>
#include "jsonfile.hh"
class ScoresWin : public Gtk::Window{
public:
static ScoresWin *create();
ScoresWin(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade);
void update_and_show();
private:
Glib::RefPtr<Gtk::Builder> ref_builder;
// Child widgets
Gtk::Button *btnclose;
Gtk::TreeView *tree_view;
// TreeView data
class ModelColumns : public Gtk::TreeModelColumnRecord{
public:
ModelColumns(){
add(player_name);
add(win_time);
}
Gtk::TreeModelColumn<std::string> player_name;
Gtk::TreeModelColumn<int> win_time;
};
ModelColumns column1;
Glib::RefPtr<Gtk::ListStore> store;
// Sort function
int sort_func(const Gtk::TreeModel::iterator &iter1, const Gtk::TreeModel::iterator &iter2);
};

View File

@ -0,0 +1,7 @@
#pragma once
#include "../json_nlohmann/json.hpp"
#include <fstream>
#include <vector>
using json = nlohmann::json;

View File

@ -183,7 +183,7 @@ void TextEditor::btnopen_clicked()
} }
else else
{ {
for (int i = 0; text_globs != NULL && text_globs[i] != NULL; i++) for (int i = 0; text_globs[i] != NULL; i++)
{ {
const char *glob = text_globs[i]; const char *glob = text_globs[i];
filter->add_pattern(glob); filter->add_pattern(glob);
@ -251,7 +251,7 @@ void TextEditor::btnsaveas_clicked()
} }
else else
{ {
for (int i = 0; text_globs != NULL && text_globs[i] != NULL; i++) for (int i = 0; text_globs[i] != NULL; i++)
{ {
const char *glob = text_globs[i]; const char *glob = text_globs[i];
filter->add_pattern(glob); filter->add_pattern(glob);

View File

@ -1,5 +1,9 @@
#include "MyDock.hh" #include "MyDock.hh"
#include <thread> #include <thread>
#include <iostream>
// Dock or Panel Mode
static DockMode mode1;
MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade) MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade)
: Gtk::Box(cobject), : Gtk::Box(cobject),
@ -9,6 +13,10 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
// Get Widgets // Get Widgets
ref_builder->get_widget("finder_box", finder_box); ref_builder->get_widget("finder_box", finder_box);
ref_builder->get_widget("dock_box", dock_box); ref_builder->get_widget("dock_box", dock_box);
ref_builder->get_widget("dock_left", dock_left);
ref_builder->get_widget("dock_right", dock_right);
ref_builder->get_widget("dock_bottom", dock_bottom);
ref_builder->get_widget("icons_box", icons_box);
ref_builder->get_widget("btnlaunch", btnlaunch); ref_builder->get_widget("btnlaunch", btnlaunch);
ref_builder->get_widget("btndraw", btndraw); ref_builder->get_widget("btndraw", btndraw);
ref_builder->get_widget("btnfiles", btnfiles); ref_builder->get_widget("btnfiles", btnfiles);
@ -16,14 +24,18 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
ref_builder->get_widget("btnedit", btnedit); ref_builder->get_widget("btnedit", btnedit);
ref_builder->get_widget("btnimage", btnimage); ref_builder->get_widget("btnimage", btnimage);
ref_builder->get_widget("btnset", btnset); ref_builder->get_widget("btnset", btnset);
ref_builder->get_widget("btngame24",btngame24); ref_builder->get_widget("btngame24", btngame24);
ref_builder->get_widget("btncalc",btncalc); ref_builder->get_widget("btncalc", btncalc);
ref_builder->get_widget("btnmine", btnmine);
ref_builder->get_widget("separator_start", separator_start); ref_builder->get_widget("separator_start", separator_start);
ref_builder->get_widget("separator_2", separator_2);
ref_builder->get_widget("separator_3", separator_3);
ref_builder->get_widget("separator_end", separator_end); ref_builder->get_widget("separator_end", separator_end);
ref_builder->get_widget("icons_sw", icons_sw);
ref_builder->get_widget("launchpad_stack", launchpad_stack); ref_builder->get_widget("launchpad_stack", launchpad_stack);
ref_builder->get_widget("default_page", default_page); ref_builder->get_widget("default_page", default_page);
ref_builder->get_widget("launchpad_page", launchpad_page); ref_builder->get_widget("launchpad_page", launchpad_page);
ref_builder->get_widget("apps_grid",apps_grid); ref_builder->get_widget("apps_grid", apps_grid);
ref_builder->get_widget("padaud", padaud); ref_builder->get_widget("padaud", padaud);
ref_builder->get_widget("padgedit", padgedit); ref_builder->get_widget("padgedit", padgedit);
ref_builder->get_widget("padvlc", padvlc); ref_builder->get_widget("padvlc", padvlc);
@ -37,8 +49,9 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
ref_builder->get_widget("padimage", padimage); ref_builder->get_widget("padimage", padimage);
ref_builder->get_widget("padedit", padedit); ref_builder->get_widget("padedit", padedit);
ref_builder->get_widget("padrun", padrun); ref_builder->get_widget("padrun", padrun);
ref_builder->get_widget("padgame24",padgame24); ref_builder->get_widget("padgame24", padgame24);
ref_builder->get_widget("padcalc",padcalc); ref_builder->get_widget("padcalc", padcalc);
ref_builder->get_widget("padmine", padmine);
// Create window // Create window
game_win = Game::create(); game_win = Game::create();
@ -46,6 +59,8 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
calc_win = CalcApp::create(); calc_win = CalcApp::create();
// Link signals // Link signals
// These signal handlers not contain a icon on the dock
btnlaunch->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnlaunch_clicked)); btnlaunch->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnlaunch_clicked));
padaud->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padaud_clicked)); padaud->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padaud_clicked));
padgedit->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padgedit_clicked)); padgedit->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padgedit_clicked));
@ -54,6 +69,13 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
padvlc_win32->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padvlc_win32_clicked)); padvlc_win32->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padvlc_win32_clicked));
padrun->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnrun_clicked)); padrun->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnrun_clicked));
/*
These functions contain a icon on the dock
the first signal for control button on dock
the next signal for button on launchpad
last 1 or 2 signals for the window
*/
btnset->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnset_clicked)); btnset->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnset_clicked));
padset->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padset_clicked)); padset->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padset_clicked));
prefs_win.signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::prefs_win_closed)); prefs_win.signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::prefs_win_closed));
@ -72,15 +94,15 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
game_win->signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::game_win_closed)); game_win->signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::game_win_closed));
game_win->signal_hide().connect(sigc::mem_fun(*this, &MyDock::game_win_hide)); game_win->signal_hide().connect(sigc::mem_fun(*this, &MyDock::game_win_hide));
btngame24->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::btngame24_clicked)); btngame24->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btngame24_clicked));
padgame24->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::padgame24_clicked)); padgame24->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padgame24_clicked));
game24_win->signal_delete_event().connect(sigc::mem_fun(*this,&MyDock::game24_win_closed)); game24_win->signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::game24_win_closed));
game24_win->signal_hide().connect(sigc::mem_fun(*this,&MyDock::game24_win_hide)); game24_win->signal_hide().connect(sigc::mem_fun(*this, &MyDock::game24_win_hide));
btncalc->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::btncalc_clicked)); btncalc->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btncalc_clicked));
padcalc->signal_clicked().connect(sigc::mem_fun(*this,&MyDock::padcalc_clicked)); padcalc->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padcalc_clicked));
calc_win->signal_delete_event().connect(sigc::mem_fun(*this,&MyDock::calc_win_closed)); calc_win->signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::calc_win_closed));
calc_win->signal_hide().connect(sigc::mem_fun(*this,&MyDock::calc_win_hide)); calc_win->signal_hide().connect(sigc::mem_fun(*this, &MyDock::calc_win_hide));
btnimage->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnimage_clicked)); btnimage->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnimage_clicked));
padimage->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padimage_clicked)); padimage->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padimage_clicked));
@ -90,6 +112,10 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
padedit->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padedit_clicked)); padedit->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padedit_clicked));
editor_win.signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::editor_win_closed)); editor_win.signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::editor_win_closed));
btnmine->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::btnmine_clicked));
padmine->signal_clicked().connect(sigc::mem_fun(*this, &MyDock::padmine_clicked));
mine_win.signal_delete_event().connect(sigc::mem_fun(*this, &MyDock::mine_win_closed));
// Add Finder // Add Finder
finder_box->pack_start(finder); finder_box->pack_start(finder);
@ -99,28 +125,83 @@ MyDock::MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Gl
apply_style(*dock_box); apply_style(*dock_box);
apply_style(*launchpad_page); apply_style(*launchpad_page);
apply_style(*separator_end); apply_style(*separator_end);
//apps_grid->foreach(sigc::mem_fun(*this,&MyDock::apply_style)); // apps_grid->foreach(sigc::mem_fun(*this,&MyDock::apply_style));
// Set dock position
// The dock can be positioned at the left, right and the bottom of the window
auto dock_pos = prefs_win.get_dock_pos();
switch (dock_pos)
{
case DockPos::POS_LEFT:
// Set the default size of scrolled window
icons_sw->set_size_request(52, 340);
icons_sw->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
dock_left->pack_start(*dock_box);
break;
case DockPos::POS_RIGHT:
// Set the default size of scrolled window
icons_sw->set_size_request(52, 340);
icons_sw->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
dock_right->pack_start(*dock_box);
break;
case DockPos::POS_BOTTOM:
// Change Orientation before pack
dock_box->set_orientation(Gtk::ORIENTATION_HORIZONTAL);
icons_box->set_orientation(Gtk::ORIENTATION_HORIZONTAL);
// Set the default size of scrolled window
icons_sw->set_size_request(340, 52);
icons_sw->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_NEVER);
// Pack dock to the position
dock_bottom->pack_start(*dock_box);
break;
default:
dock_right->pack_start(*dock_box);
}
// Set Dock or panel mode
switch (mode1)
{
case DockMode::MODE_DOCK:
dock_box->set_vexpand(false);
// std::cout << "dock mode" << std::endl;
break;
case DockMode::MODE_PANEL:
if(dock_pos == DockPos::POS_BOTTOM){
dock_box->set_hexpand();
dock_box->set_halign(Gtk::ALIGN_FILL);
icons_sw->set_hexpand();
}else{
dock_box->set_vexpand();
dock_box->set_valign(Gtk::ALIGN_FILL);
icons_sw->set_vexpand();
}
// std::cout << "panel mode" << std::endl;
break;
}
show_all_children(); show_all_children();
} }
void MyDock::set_dock_mode(DockMode mode){ // void MyDock::set_dock_mode(DockMode mode){
switch(mode){ // switch(mode){
case DockMode::MODE_DOCK: // case DockMode::MODE_DOCK:
set_vexpand(false); // set_vexpand(false);
break; // break;
case DockMode::MODE_PANEL: // case DockMode::MODE_PANEL:
set_vexpand(); // set_vexpand();
set_valign(Gtk::ALIGN_FILL); // set_valign(Gtk::ALIGN_FILL);
break; // break;
} // }
} // }
void MyDock::apply_style(Gtk::Widget &widget){ // Set the style of dock widget
void MyDock::apply_style(Gtk::Widget &widget)
{
auto style = widget.get_style_context(); auto style = widget.get_style_context();
style->add_provider(provider,G_MAXUINT); style->add_provider(provider, G_MAXUINT);
} }
// Launchpad
void MyDock::btnlaunch_clicked() void MyDock::btnlaunch_clicked()
{ {
if (launchpad_shown) if (launchpad_shown)
@ -143,6 +224,13 @@ void MyDock::mydock_init(Gtk::Window *window, Gtk::Image *background1)
parent_win = window; parent_win = window;
} }
/*
Functions for execute outside apps
padxx_clicked() for click in launchpad
The first three functions for use in linux
and the next three functions for windows
*/
void MyDock::padaud_clicked() void MyDock::padaud_clicked()
{ {
// Start audacious app // Start audacious app
@ -206,7 +294,7 @@ void MyDock::padset_clicked()
btnlaunch_clicked(); btnlaunch_clicked();
} }
//Signal Handlers for drawing app window // Signal Handlers for drawing app window
bool MyDock::draw_win_closed(GdkEventAny *event) bool MyDock::draw_win_closed(GdkEventAny *event)
{ {
@ -215,7 +303,8 @@ bool MyDock::draw_win_closed(GdkEventAny *event)
return true; return true;
} }
void MyDock::draw_win_hide(){ void MyDock::draw_win_hide()
{
btndraw->set_image_from_icon_name("drawing_app", Gtk::ICON_SIZE_DIALOG); btndraw->set_image_from_icon_name("drawing_app", Gtk::ICON_SIZE_DIALOG);
draw_app.hide(); draw_app.hide();
} }
@ -285,49 +374,57 @@ void MyDock::padgame_clicked()
// Signal Handlers for game24 window // Signal Handlers for game24 window
bool MyDock::game24_win_closed(GdkEventAny *event){ bool MyDock::game24_win_closed(GdkEventAny *event)
btngame24->set_image_from_icon_name("24game",Gtk::ICON_SIZE_DIALOG); {
btngame24->set_image_from_icon_name("24game", Gtk::ICON_SIZE_DIALOG);
game24_win->hide(); game24_win->hide();
return true; return true;
} }
void MyDock::btngame24_clicked(){ void MyDock::btngame24_clicked()
btngame24->set_image_from_icon_name("24game_running",Gtk::ICON_SIZE_DIALOG); {
btngame24->set_image_from_icon_name("24game_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(*game24_win); window_ctrl(*game24_win);
} }
void MyDock::padgame24_clicked(){ void MyDock::padgame24_clicked()
btngame24->set_image_from_icon_name("24game_running",Gtk::ICON_SIZE_DIALOG); {
window_ctrl(*game24_win,false); btngame24->set_image_from_icon_name("24game_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(*game24_win, false);
btnlaunch_clicked(); btnlaunch_clicked();
} }
void MyDock::game24_win_hide(){ void MyDock::game24_win_hide()
btngame24->set_image_from_icon_name("24game",Gtk::ICON_SIZE_DIALOG); {
btngame24->set_image_from_icon_name("24game", Gtk::ICON_SIZE_DIALOG);
game24_win->hide(); game24_win->hide();
} }
// Signal Handlers for Calc App // Signal Handlers for Calc App
bool MyDock::calc_win_closed(GdkEventAny *event){ bool MyDock::calc_win_closed(GdkEventAny *event)
btncalc->set_image_from_icon_name("calcapp",Gtk::ICON_SIZE_DIALOG); {
btncalc->set_image_from_icon_name("calcapp", Gtk::ICON_SIZE_DIALOG);
calc_win->hide(); calc_win->hide();
return true; return true;
} }
void MyDock::btncalc_clicked(){ void MyDock::btncalc_clicked()
btncalc->set_image_from_icon_name("calcapp_running",Gtk::ICON_SIZE_DIALOG); {
btncalc->set_image_from_icon_name("calcapp_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(*calc_win); window_ctrl(*calc_win);
} }
void MyDock::padcalc_clicked(){ void MyDock::padcalc_clicked()
btncalc->set_image_from_icon_name("calcapp_running",Gtk::ICON_SIZE_DIALOG); {
btncalc->set_image_from_icon_name("calcapp_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(*calc_win); window_ctrl(*calc_win);
btnlaunch_clicked(); btnlaunch_clicked();
} }
void MyDock::calc_win_hide(){ void MyDock::calc_win_hide()
btncalc->set_image_from_icon_name("calcapp",Gtk::ICON_SIZE_DIALOG); {
btncalc->set_image_from_icon_name("calcapp", Gtk::ICON_SIZE_DIALOG);
calc_win->hide(); calc_win->hide();
} }
@ -375,6 +472,28 @@ void MyDock::padedit_clicked()
btnlaunch_clicked(); btnlaunch_clicked();
} }
// Signal Handler for minesweeper window
bool MyDock::mine_win_closed(GdkEventAny *event)
{
btnmine->set_image_from_icon_name("mines_app", Gtk::ICON_SIZE_DIALOG);
mine_win.hide();
return true;
}
void MyDock::btnmine_clicked()
{
btnmine->set_image_from_icon_name("mines_app_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(mine_win);
}
void MyDock::padmine_clicked()
{
btnmine->set_image_from_icon_name("mines_app_running", Gtk::ICON_SIZE_DIALOG);
window_ctrl(mine_win, false);
btnlaunch_clicked();
}
// Signal Handler for run window // Signal Handler for run window
void MyDock::btnrun_clicked() void MyDock::btnrun_clicked()
@ -385,9 +504,16 @@ void MyDock::btnrun_clicked()
void MyDock::window_ctrl(Gtk::Window &window, bool on_dock) void MyDock::window_ctrl(Gtk::Window &window, bool on_dock)
{ {
// Get the GdkWindow object to get the state of a window
auto gdk_win = window.get_window(); auto gdk_win = window.get_window();
if (gdk_win) if (gdk_win)
{ {
/*
The State of GdkWindow (GdkSurface for Gtk4)
Gdk::WINDOW_STATE_WITHDRAWN: The window is not shown
Gdk::WINDOW_STATE_ICONIFIED: The window is minimized
the default mode for first launch
*/
auto state = gdk_win->get_state(); auto state = gdk_win->get_state();
switch (state) switch (state)
{ {
@ -414,13 +540,27 @@ void MyDock::window_ctrl(Gtk::Window &window, bool on_dock)
} }
} }
MyDock *MyDock::create() MyDock *MyDock::create(DockMode mode)
{ {
MyDock *dock; MyDock *dock;
mode1 = mode;
// Get Widget // Get Widget
auto builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/mydock.ui"); auto builder = Gtk::Builder::create_from_resource("/org/gtk/daleclack/mydock.ui");
builder->get_widget_derived("main_box", dock); builder->get_widget_derived("main_box", dock);
// switch (mode)
// {
// case DockMode::MODE_DOCK:
// std::cout << "dock mode" << std::endl;
// break;
// case DockMode::MODE_PANEL:
// std::cout << "panel mode" << std::endl;
// break;
// default:
// std::cout << "undefined" << std::endl;
// break;
// }
return dock; return dock;
} }

View File

@ -11,27 +11,24 @@
#include "TextEditor.hh" #include "TextEditor.hh"
#include "Game24Win.hh" #include "Game24Win.hh"
#include "CalcApp.hh" #include "CalcApp.hh"
#include "MineSweeper.hh"
enum class DockMode{
MODE_DOCK,
MODE_PANEL
};
class MyDock : public Gtk::Box class MyDock : public Gtk::Box
{ {
public: public:
MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade); MyDock(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &ref_Glade);
static MyDock *create(); static MyDock *create(DockMode mode);
void btnset_clicked(); void btnset_clicked();
void mydock_init(Gtk::Window *window, Gtk::Image *background1); void mydock_init(Gtk::Window *window, Gtk::Image *background1);
void set_dock_mode(DockMode mode); // void set_dock_mode(DockMode mode);
private: private:
// Child widgets // Child widgets
Gtk::Box *finder_box, *dock_box; Gtk::Box *finder_box, *dock_box, *dock_left, *dock_right, *dock_bottom, *icons_box;
Gtk::Button *btnlaunch, *btndraw, *btnfiles, *btncalc, Gtk::Button *btnlaunch, *btndraw, *btnfiles, *btncalc,
*btngame, *btnedit, *btnimage, *btnset, *btngame24; *btngame, *btnedit, *btnimage, *btnset, *btngame24, *btnmine;
Gtk::Separator *separator_start, *separator_end; Gtk::Separator *separator_start, *separator_2, *separator_3, *separator_end;
Gtk::ScrolledWindow *icons_sw;
// Finder // Finder
MyFinder finder; MyFinder finder;
@ -41,7 +38,7 @@ private:
Gtk::Stack *launchpad_stack; Gtk::Stack *launchpad_stack;
Gtk::Grid *default_page, *launchpad_page, *apps_grid; Gtk::Grid *default_page, *launchpad_page, *apps_grid;
Gtk::Button *padaud, *paddraw, *padfile, *padgedit, *padgame, *padset, *padcalc, Gtk::Button *padaud, *paddraw, *padfile, *padgedit, *padgame, *padset, *padcalc,
*padimage, *padnote, *padedit, *padvlc, *padvlc_win32, *padrun, *padgame24; *padimage, *padnote, *padedit, *padvlc, *padvlc_win32, *padrun, *padgame24, *padmine;
Gtk::Label label1; Gtk::Label label1;
// Window Preferences // Window Preferences
@ -95,6 +92,12 @@ private:
void btnedit_clicked(); void btnedit_clicked();
void padedit_clicked(); void padedit_clicked();
// MineSweeper
MineSweeper mine_win;
bool mine_win_closed(GdkEventAny *event);
void btnmine_clicked();
void padmine_clicked();
// A Simple Runner // A Simple Runner
GtkRunner runner1; GtkRunner runner1;

View File

@ -10,7 +10,8 @@ MyPrefs::MyPrefs()
views_box(Gtk::ORIENTATION_HORIZONTAL, 5), views_box(Gtk::ORIENTATION_HORIZONTAL, 5),
btnbox(Gtk::ORIENTATION_HORIZONTAL, 5), btnbox(Gtk::ORIENTATION_HORIZONTAL, 5),
width(1024), width(1024),
height(576) height(576),
dock_pos(DockPos::POS_LEFT)
{ {
/*Step 1: Initalize widget that without Gtk::Builder*/ /*Step 1: Initalize widget that without Gtk::Builder*/
@ -112,8 +113,13 @@ MyPrefs::MyPrefs()
stackbuilder->get_widget("spin_width", spin_width); stackbuilder->get_widget("spin_width", spin_width);
stackbuilder->get_widget("spin_height", spin_height); stackbuilder->get_widget("spin_height", spin_height);
stackbuilder->get_widget("btnapply", btnapply); stackbuilder->get_widget("btnapply", btnapply);
stackbuilder->get_widget("btnGet",btnGet); stackbuilder->get_widget("btnGet", btnGet);
stackbuilder->get_widget("label_size",label_size); stackbuilder->get_widget("label_size", label_size);
stackbuilder->get_widget("mode_check", mode_check);
stackbuilder->get_widget("radio_left", radio_left);
stackbuilder->get_widget("radio_right", radio_right);
stackbuilder->get_widget("radio_bottom", radio_bottom);
stackbuilder->get_widget("btnapply1", btnapply1);
// Initalize radio buttons // Initalize radio buttons
radio_default->set_active(); radio_default->set_active();
@ -122,11 +128,14 @@ MyPrefs::MyPrefs()
// Initalize other widgets // Initalize other widgets
btnapply->signal_clicked().connect(sigc::mem_fun(*this, &MyPrefs::btnapply_clicked)); btnapply->signal_clicked().connect(sigc::mem_fun(*this, &MyPrefs::btnapply_clicked));
btnGet->signal_clicked().connect(sigc::mem_fun(*this,&MyPrefs::btnGet_clicked)); btnGet->signal_clicked().connect(sigc::mem_fun(*this, &MyPrefs::btnGet_clicked));
// Initalize Dock Preferences
btnapply1->signal_clicked().connect(sigc::mem_fun(*this, &MyPrefs::btnapply1_clicked));
// Initalize Label // Initalize Label
load_winsize_config(); load_winsize_config();
char * size_str = g_strdup_printf("Current Config: %d x %d", width, height); char *size_str = g_strdup_printf("Current Config: %d x %d", width, height);
label_size->set_label(size_str); label_size->set_label(size_str);
g_free(size_str); g_free(size_str);
@ -366,7 +375,8 @@ void MyPrefs::set_background_file()
} }
void MyPrefs::update_background_size() void MyPrefs::update_background_size()
{} {
}
void MyPrefs::set_background(Gtk::Image *back) void MyPrefs::set_background(Gtk::Image *back)
{ {
@ -383,6 +393,30 @@ void MyPrefs::radiobutton_toggled()
btnGet->set_sensitive(!mode); btnGet->set_sensitive(!mode);
} }
void MyPrefs::save_config_file()
{
// Open the file for configs
json data = json::parse(R"(
{
"height":1280,
"width":720,
"panel_mode":false,
"position":0
}
)");
std::fstream outfile;
outfile.open("config.json", std::ios_base::out);
if (outfile.is_open())
{
data["width"] = width;
data["height"] = height;
data["panel_mode"] = panel_mode;
data["position"] = dock_pos;
outfile << data;
outfile.close();
}
}
void MyPrefs::btnapply_clicked() void MyPrefs::btnapply_clicked()
{ {
// Get Config // Get Config
@ -419,41 +453,80 @@ void MyPrefs::btnapply_clicked()
height = spin_height->get_value_as_int(); height = spin_height->get_value_as_int();
} }
// Open the file for configs // Save the config to json file
json data = json::parse(R"( save_config_file();
{ }
"height":1280,
"width":720 void MyPrefs::btnapply1_clicked()
} {
)"); // Whether panel mode is enabled
std::fstream outfile; panel_mode = mode_check->get_active();
outfile.open("config.json", std::ios_base::out);
if (outfile.is_open()) // The dock position
if (radio_left->get_active())
{ {
data["width"] = width; dock_pos = DockPos::POS_LEFT;
data["height"] = height;
outfile<<data;
outfile.close();
} }
if (radio_right->get_active())
{
dock_pos = DockPos::POS_RIGHT;
}
if (radio_bottom->get_active())
{
dock_pos = DockPos::POS_BOTTOM;
}
// std::cout << dock_pos << std::endl;
save_config_file();
} }
void MyPrefs::btnGet_clicked() void MyPrefs::btnGet_clicked()
{ {
//Get Current Window Size // Get Current Window Size
width = background1->get_width(); width = background1->get_width();
height = background1->get_height(); height = background1->get_height();
spin_width->set_value(width); spin_width->set_value(width);
spin_height->set_value(height); spin_height->set_value(height);
} }
void MyPrefs::load_winsize_config(){ DockPos MyPrefs::get_dock_pos(){
// Get config for dock position
return dock_pos;
}
void MyPrefs::load_winsize_config()
{
// Read the config
std::ifstream jsonfile("config.json"); std::ifstream jsonfile("config.json");
if(jsonfile.is_open()){ if (jsonfile.is_open())
{
json data = json::parse(jsonfile); json data = json::parse(jsonfile);
height = data["height"]; height = data["height"];
width = data["width"]; width = data["width"];
}else{ panel_mode = data["panel_mode"];
dock_pos = data["position"];
}
else
{
// Default config
height = 720; height = 720;
width = 1280; width = 1280;
panel_mode = false;
dock_pos = DockPos::POS_LEFT;
}
// Load the config
mode_check->set_active(panel_mode);
switch (dock_pos)
{
case DockPos::POS_LEFT:
radio_left->set_active();
break;
case DockPos::POS_RIGHT:
radio_right->set_active();
break;
case DockPos::POS_BOTTOM:
radio_bottom->set_active();
break;
} }
} }

View File

@ -7,6 +7,17 @@
using json = nlohmann::json; using json = nlohmann::json;
enum class DockMode{
MODE_DOCK,
MODE_PANEL
};
enum class DockPos{
POS_LEFT,
POS_RIGHT,
POS_BOTTOM
};
class MyPrefs : public Gtk::Window class MyPrefs : public Gtk::Window
{ {
public: public:
@ -14,6 +25,7 @@ public:
void set_background(Gtk::Image *back); void set_background(Gtk::Image *back);
void load_winsize_config(); void load_winsize_config();
void update_background_size(); void update_background_size();
DockPos get_dock_pos();
protected: protected:
class ModelColumns : public Gtk::TreeModelColumnRecord class ModelColumns : public Gtk::TreeModelColumnRecord
@ -40,6 +52,8 @@ protected:
private: private:
// Background widget and properties // Background widget and properties
int width, height; int width, height;
bool panel_mode;
DockPos dock_pos;
Gtk::Image *background1; Gtk::Image *background1;
std::string path; std::string path;
bool background_internal; bool background_internal;
@ -53,6 +67,11 @@ private:
Gtk::Button *btnapply, *btnGet; Gtk::Button *btnapply, *btnGet;
Gtk::Label *label_size; Gtk::Label *label_size;
// Dock Preferences
Gtk::Button *btnapply1;
Gtk::CheckButton *mode_check;
Gtk::RadioButton *radio_left, *radio_right, *radio_bottom;
// Child Widgets // Child Widgets
Gtk::TreeView folders_view, images_view; Gtk::TreeView folders_view, images_view;
Gtk::ScrolledWindow sw_folders, sw_images; Gtk::ScrolledWindow sw_folders, sw_images;
@ -69,28 +88,44 @@ private:
bool icasecompare(const std::string &a, const std::string &b); bool icasecompare(const std::string &a, const std::string &b);
// Signal Handlers // Signal Handlers
void save_config_file();
// Background page buttons
void btnadd_clicked(); void btnadd_clicked();
void btnremove_clicked(); void btnremove_clicked();
// Folder and images view
void folders_view_changed(); void folders_view_changed();
void images_view_changed(); void images_view_changed();
// Default settings
void default_folders_view(); void default_folders_view();
// Update the background
void update_images_view(std::string &folder_path); void update_images_view(std::string &folder_path);
void set_background_internal(const char *const *data); void set_background_internal(const char *const *data);
void set_background_file(); void set_background_file();
// Resoulution page
void radiobutton_toggled(); void radiobutton_toggled();
void btnapply_clicked(); void btnapply_clicked();
void btnGet_clicked(); void btnGet_clicked();
// Dock Preferences
void btnapply1_clicked();
}; };
//Read Config from file without use the MyPrefs class //Read Config from file without use the MyPrefs class
static inline void get_size_config(int &width, int &height){ static inline void get_size_config(int &width, int &height, bool &panel_mode){
std::ifstream jsonfile("config.json"); std::ifstream jsonfile("config.json");
if(jsonfile.is_open()){ if(jsonfile.is_open()){
json data = json::parse(jsonfile); json data = json::parse(jsonfile);
height = data["height"]; height = data["height"];
width = data["width"]; width = data["width"];
panel_mode = data["panel_mode"];
}else{ }else{
height = 720; height = 720;
width = 1280; width = 1280;
panel_mode = false;
} }
} }