mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-19 19:59:09 +00:00
Merged in cwalther/cwe/cursors2 (pull request #10)
Improved Cursors This is the second attempt at getting the following improvements to the Uru mouse cursors into CWE-ou: * fix the blurriness * add a subtle shadow to fix cursors being invisible on light backgrounds * cleaner, more regular appearance A (slightly outdated) picture for comparison is at http://forums.openuru.org/viewtopic.php?t=558&p=4265#p4265 , and anyone who has played on Gehn, TOC, or any other shard using the H'uru client has already seen the new cursors. In order to do this properly, in a way that will continue to work in a cross-platform future, a lot of work done by Deledrius in the H'uru fork is included: He added PNG support to Plasma and introduced a client resource manager that loads resources such as the cursors, but also voice chat indicators and the loading linking book animation, which were also replaced by higher-quality recreations, fromfile instead of from Windows resources. resource.data This also opens the way for other applications of PNG, such as saving the local copies of KI pictures in a lossless format instead of the heavily compressed JPEG we currently have. Note: the new code requires a newer version of libpng than included with the CWE sources. Like other library dependencies, this must be installed separately. Instructions for that are at http://wiki.openuru.org/index.php?title=Build_the_client_with_MSVC_2003#Build_steps .
This commit is contained in:
864
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/Cursor_Base.svg
vendored
Normal file
864
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/Cursor_Base.svg
vendored
Normal file
@ -0,0 +1,864 @@
|
||||
<?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:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48"
|
||||
height="48"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.1 r9760"
|
||||
sodipodi:docname="making of cursors.svg"
|
||||
inkscape:export-xdpi="360"
|
||||
inkscape:export-ydpi="360">
|
||||
<defs
|
||||
id="defs4">
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter6135"
|
||||
x="-0.5"
|
||||
width="2"
|
||||
y="-0.5"
|
||||
height="2"
|
||||
inkscape:label="filter6135"
|
||||
color-interpolation-filters="sRGB">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="1.5"
|
||||
id="feGaussianBlur6137" />
|
||||
</filter>
|
||||
<mask
|
||||
x="-0.5"
|
||||
y="-0.5"
|
||||
width="2"
|
||||
height="2"
|
||||
id="mask6840">
|
||||
<g
|
||||
id="g6842">
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="48"
|
||||
width="48"
|
||||
id="rect6844"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
|
||||
<use
|
||||
height="1"
|
||||
width="1"
|
||||
id="use6846"
|
||||
xlink:href="#path4148"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#404040;fill-opacity:1;display:inline" />
|
||||
<use
|
||||
height="1"
|
||||
width="1"
|
||||
id="use6845"
|
||||
xlink:href="#path4146"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#404040;fill-opacity:1;display:inline" />
|
||||
<use
|
||||
height="1"
|
||||
width="1"
|
||||
id="use6844"
|
||||
xlink:href="#path4144"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#404040;fill-opacity:1;display:inline" />
|
||||
<use
|
||||
height="1"
|
||||
width="1"
|
||||
id="use6843"
|
||||
xlink:href="#path4119"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#404040;fill-opacity:1;display:inline" />
|
||||
</g>
|
||||
</mask>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="12"
|
||||
inkscape:cx="24"
|
||||
inkscape:cy="24"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer35"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1541"
|
||||
inkscape:window-height="889"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:object-nodes="true"
|
||||
inkscape:snap-grids="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid2985"
|
||||
empspacing="4"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3997"
|
||||
empspacing="8"
|
||||
visible="true"
|
||||
enabled="false"
|
||||
snapvisiblegridlinesonly="true"
|
||||
spacingx="0.5px"
|
||||
spacingy="0.5px"
|
||||
color="#00ff00"
|
||||
opacity="0.1254902"
|
||||
empcolor="#00ff00"
|
||||
empopacity="0.25098039" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4665"
|
||||
empspacing="2"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true"
|
||||
spacingx="24px"
|
||||
spacingy="24px"
|
||||
color="#ff00ff"
|
||||
opacity="0.15686275"
|
||||
empcolor="#ff00ff"
|
||||
empopacity="0.4" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<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>
|
||||
<g
|
||||
inkscape:label="poised orig in"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
style="display:none"
|
||||
sodipodi:insensitive="true">
|
||||
<image
|
||||
y="7.2600002"
|
||||
x="7.2600002"
|
||||
id="image3065"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAA3NCSVQICAjb4U/gAAAAvUlEQVRI
|
||||
ie2UTRKDIAyFn53eK9yM5GYvJ6OLjBnHVrCjCxd8K3yRhPwAMJlMnoGqkmwrJFX1NtftmDNhXn1z
|
||||
KQWAu5vZsmJm7p7WPu+OjaSIuDtJAK210FMREZL9MIMMIgyAWmsqIpL6JaLQuYiKZ1e2P9wTYKj/
|
||||
ZFyiJDP4/6gHxOyr6vewpjjsRC+D2BxDYmapxzr0SwEAuLuIhK+8B+E9Jri/fczukdhy8sFYzoTJ
|
||||
axWfedHubPhkMnkyH5cn3C3UVHXpAAAAAElFTkSuQmCC
|
||||
"
|
||||
height="34.560001"
|
||||
width="34.560001"
|
||||
inkscape:export-xdpi="333.32999"
|
||||
inkscape:export-ydpi="333.32999" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer5"
|
||||
inkscape:label="poised orig out"
|
||||
style="display:none"
|
||||
sodipodi:insensitive="true">
|
||||
<image
|
||||
y="6"
|
||||
x="6"
|
||||
id="image4063"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAACd0lEQVRI
|
||||
ie2UvWvqUBiHjyY1iR+kKWgxceoSP1JEKBIIuAtuxe5uDgWdOtq/wdExOKqTICi4OCiYDE6KaKao
|
||||
CFqraJGamNzB5cKFxtYOd8gznvOe8zsP5+UFwMTExOSnWM4vxXHcbrejKApBEABAVdX9fv/x8bHb
|
||||
7X7zRSiKXl9fv7y81Gq1t7c3Xdd1XZdluVwup1IpHMcRBPm1pFwut91uNU3TNE3/i9OKJEnpdPqc
|
||||
q2DjChjmOM5ms/V6vW63y/P8eDwGALAsm0wmo9Gox+OJRCLnhBn82e3tbT6fTyQSw+Gw0+msViuO
|
||||
40iSBACs12tJkhRFiUajBEGUSqVMJnORGQzDPp/PbrcLgrBareLxeCgUwjAMAPD5+amqaqvV6vf7
|
||||
8XicoihDM+vX2zabLRAIWCwWnuc5jguFQqIoZrPZ19fX4XDIMIzX661WqyiK0jRtGGZgBkHQzc0N
|
||||
AGA8HpMkiWFYpVIpFosYhrnd7ufnZ5fLJcsyBEEEQVxq9i84jmMY5nQ6HQ7Hd88amKmqOplMfD4f
|
||||
y7KDwYAkycfHR7fb7XA4YrHYfD5fLpf39/eKokynU8Mw6OttBEHC4XAgEDgej6eODwaDsVgsEokc
|
||||
Dod2uz2bzViW9Xq99Xq9VqtdZKYoymg0WiwWDw8Px+NREITJZOJyuQAAy+Vys9nc3d3RND2fzyVJ
|
||||
utQMhmGKolAU9fv9BEFomtZoNJrNpiAIVquVZVmGYa6urtrttiiK/X7fMM8ABEHS6XShUJjNZrvd
|
||||
TlXV06w6HA7v7++DwYDn+aenp3Ou+sbUz+fzFEXRNH3q8ul0KoqiJEmyLJdKpR+qmJiYmPyP/AHn
|
||||
shrr/cpNswAAAABJRU5ErkJggg==
|
||||
"
|
||||
height="36"
|
||||
width="36" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="4wayclosed orig in"
|
||||
style="display:none"
|
||||
sodipodi:insensitive="true">
|
||||
<image
|
||||
y="7.2599926"
|
||||
x="7.2600002"
|
||||
id="image3191"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAA3NCSVQICAjb4U/gAAABQElEQVRI
|
||||
icVWW5LEIAiU2b0XHCU3CbkZnMz9YIpy0RidxBq+YgLdPLRNSpPGzLMhEyYiOedVHMycc845i8hC
|
||||
dLPxIl6DfkTUWd61kP5Uo35H0Pd9V9US8ckKOu1eu2UHDUacrDmIaEtv1wMVNMfrQ/6cwCPt6AYs
|
||||
Zvb3dciFiYiHlSglqGEFDgvs0dRK4MpTN8pfunNPSDy7IAO2dKb6lLlD6R+1pJldIGgOuU/gSbyY
|
||||
WVX7g6kdRkLeBCklIjqO4wzXGhg++TydqRyvqhJRY+BhY5RjPNtFjuKtDrj/5NpKQUR3UlVENA4i
|
||||
AgCTORFBxLJRRKSqAHB9IGwL+nO9hXyGpdst2Qg0t0TiC3Yz2aE7uRY7a9pjjWrOefBOHqqgeQM/
|
||||
/He0/L+olKxLIfrcZtNPKf1MEQAAAGzbNhW11v4AthMpECAoHYUAAAAASUVORK5CYII=
|
||||
"
|
||||
height="34.560001"
|
||||
width="34.560001" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer6"
|
||||
inkscape:label="4wayclosed orig out"
|
||||
style="opacity:0.5;display:none"
|
||||
sodipodi:insensitive="true">
|
||||
<image
|
||||
y="6"
|
||||
x="6"
|
||||
id="image4110"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAAFr0lEQVRI
|
||||
ib1XTUwTWxS+0E6n1tYKrR3TKZAaf0omZtpaGmwTImJCapSFiYkRYmxiDJoad8YVxMS9uFF0pRY3
|
||||
NFGJFTDdNCUFKg1B1E7JwCBK6TTtNNBJU5oZ27eYF0QfypTne99qcm6+77vnzJlz7wDwP0KyMxqG
|
||||
YVqtNpPJ/OdmFy5cuH37ttlspml6eXl5Bwpi4XQ6h4aG8vk8QRBXr16tiFtZZg6H4/r1662trWq1
|
||||
Wi6Xcxy3uLiYTCZF0qsrMjt58mRLS4tWqwUAKJVKq9XqcDjE0yvIDMdxt9ttMplkMpkQgSCoqqqK
|
||||
pumlpaU/aYZh2I0bN44dO7a2trayspJKpVKpVLFYRBCkurr67du3YkSkIs1Onz6t0WhGR0djsVgu
|
||||
lxOCtbW1KIomk8n6+vovX76IlNoeXV1de/fu3XJJr9efO3dOjEiVeD8EQaRSqUwmk0gkAACe5wuF
|
||||
AsdxHMexLPvHzORyuVwu7+/vNxgMjY2NtbW1AIDl5eVIJEKSJEVRz549KxaL4vf9O6eenh6WZUul
|
||||
UqlUKm9CqVRKpVIvX77s7u4WI/XL7+zAgQNdXV0AAKlU6nQ6ZTLZzMzM48ePHQ6HTqfT6XQdHR0D
|
||||
AwMMwzidTovFskHs7u7W6XRbam5Rxvb29s7OToIgHj58CMPw/fv3z5w5Mzc35/F4zGYzjuMYhhUK
|
||||
hXg8PjEx8e3bt97e3pqaGp/Pd/PmTQDA06dPIQj6+PGjz+cjSXKz8g+t73A4Ll68eOrUKRiGV1ZW
|
||||
VldXURQ1GAwKhWJqaspsNnd2dppMJpVKVSqVcByvq6sLhUKxWMzlcqEoKogsLCxcvnz5xIkTNpvt
|
||||
3r17Y2NjP2fT2tp669at4eHhTCZTLpfj8fi1a9cAAEajkWGYcrl8/Pjx/v5+YXUDFEXduXPn0qVL
|
||||
PM9/+PBho/6xWKxcLudyuXfv3t29e9dqtX7PzGw2ezweq9Wq0+kUCgUAoFgsCl+uRCIRem9+fh7D
|
||||
MJVKtXmLCILo9fpgMCiRSGpqaoQgRVHr6+sAAJVK1dTUZDAYDh065PV6w+FwNQCAZVmpVKrVagWn
|
||||
X6FQKJRKpc0Rnue37XgYhhEE2b9/P8/z1UKVHz169OrVq38eFjzPC8djc3NzPB7fGFQCaJpmGObo
|
||||
0aMcxyUSCSFot9uVSqXwnM1m/X7/gwcPJiYmWJb9u0GGh4dpmo7FYu3t7RaLZdeuXUL1CoVCJBJB
|
||||
UfT8+fMjIyN1dXU4jiMIwvM8TdPBYDCRSJw9ezafz0ejUUHK6XQK1aYoKhAIPHnyZHJyUlj63o3T
|
||||
09PT09ORSOTKlSs4jtvtdqPRuLa2RpJkOp222Wx+vz8UCs3Ozur1+mKxyDBMIpFQKBRHjhyhaXph
|
||||
YUHQ0Wg0LMt++vRpZGRkaGhofn5+w+LnI2ZxcZEgCLVajWFYLpebnZ1FUVQul5tMpqamJrlcPjk5
|
||||
GQ6HCYJQqVQul8vlckEQND4+Ho1GCYJoaGjo6OiYm5vr6enx+/3ZbHaz+Naz8fDhw21tbalU6sWL
|
||||
FzAMu91ui8XS1ta2b9++3bt3C4OY47h8Pr+0tBQMBsfHxwcHByUSidvthiDI5/NtefGqYOq73e6W
|
||||
lhabzSZ0eSKRiEajo6Ojr1+/Fi8iClKp2GP2NxB74fF4PBqN5l+aid0vBEF9fX0kSQ4MDFAUBQCw
|
||||
2+1Op1Oj0SAIEgqFvF7vtiJi35lOp+vr62tubl5fXxemkVKpVKlULMsGAoHe3t5Kr+LbAMOwmZmZ
|
||||
8o8gSdLj8YhUqODemE6nDQbDwYMHN8YxRVHPnz8fHBxcXV39w2YAgGQyaTQa6+vrYRjOZrPv378P
|
||||
BALhcFgkvTKzTCbDMExjY2NDQwNJkm/evBkbG0un0/+JGQDg8+fPKIrq9fpwOOz1emOxmHjuTv7P
|
||||
8vn8169fg8Hg1NTUDugVQ61W79mzp1LWXwDmqKUkUgO0AAAAAElFTkSuQmCC
|
||||
"
|
||||
height="36"
|
||||
width="36" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer8"
|
||||
inkscape:label="disabled orig out"
|
||||
sodipodi:insensitive="true"
|
||||
style="display:none">
|
||||
<image
|
||||
y="6"
|
||||
x="6"
|
||||
id="image4210"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAADU0lEQVRI
|
||||
ie2VzUsqURTAb17xi2LINJlyoGIcMRQDEwoslyEmQitrV+vWrfonghb9A4WL1oLrwlWgEDFGTRmj
|
||||
TlZ+kE1T6nje4vIe7wMcrQfvLfotzz33/s653DmD0Bdf/N94PJ54PP6xvVtbW3a7fQDTwcFBLpeL
|
||||
RCIDaTDG6+vrT09Pu7u7NE33tScej+dyOQDI5/PhcLhPk8lkisfjiqIAwMnJydzcXL81RiKRfD4P
|
||||
AKIoBgIBzXyLxbK6ugoAAJDNZjmO69dECIfDoigCQKPR4DgOY0xRFE3T09PTLMuyLDs1NeVwOIaH
|
||||
h81mczQaBYButysIwsTExGAmQiAQaDQapF6WZXd2dlKpVLVaJRFRFI+Pjzc3N2OxGACoqipJksVi
|
||||
+YiJwHEcOVpV1W632+124SdIRFVVACgWizqd7uMmhBDGmGVZchwAHB4eLi4u2u12u90ei8XS6TSJ
|
||||
X1xcjI2NfcqEEHI4HMlk8kdDjUZDEASe53mev7u7azabJF6r1fb29jRP02ss6/VOpxMhdHR0FI1G
|
||||
KYqiKOrnhEKhwPP88vLy5OSkpkzjlg0Gg8fjGRoa2t/fr1arfyZcXl4mk0mTyeR2uz8rwxhbrVaE
|
||||
0PX1davV+jOh2WyKoogxHh0d/azs76Ih63Q6xWIRIbSwsMDz/PPz828JNpvN5/O12+1SqaQpw72X
|
||||
jUaj3+/3eDyqqhqNRoZhzGbzbwlOp5OiqHQ6nUqlep+m8Rrb7fbV1dXj4+P8/PzMzIzRaMxkMuVy
|
||||
mfTkdrtpmqZpulKpCIKg2Zm2rFAolMtlr9er1+sRQqlUKpPJIIR8Pl8ikSC/EoPBwDCMpkwDg8EQ
|
||||
CoXIBJFl+eXlpdPpkA+51WrV6/X7+/tarQYAlUrF6/X2nlhDvU3BYPD09BQhJElSNptVFMXtdpNX
|
||||
XiqVzs7OBEFgGGZjY2N8fPz9/d3n893c3KiqOlhPOp1uaWmJTFtFUWw2W49kr9f79vZGOna5XANP
|
||||
5JWVldfXVwCo1+sjIyOalblcLiKTZdnv9w9gWltbe3h4AIDb21syGzXBGLtcLlmWAUCSpFAo1K/M
|
||||
arVub2+fn5/Pzs72X6JOp/P7/ZIkJRIJzcv4BZvNFgwGB9jwnVAoNJjpiy/+Bd8A15jBvOYCWCMA
|
||||
AAAASUVORK5CYII=
|
||||
"
|
||||
height="36"
|
||||
width="36" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer9"
|
||||
inkscape:label="book orig out"
|
||||
style="display:none">
|
||||
<image
|
||||
y="-3.5"
|
||||
x="-3.5"
|
||||
id="image4273"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAIAAABuYg/PAAAAA3NCSVQICAjb4U/gAAAEjklEQVRI
|
||||
idWWSywzXRzGz3SKtnpD6p5Upei4VGncqpUSRQgh6KZioYnYWViLxEbChj1hScJCkLBziXtVqsVI
|
||||
1GBo2lSrbq1GW+9i3vB9Dd5W3/f78j6LWcx5/ueXc+Z/njkA/C8qKytjs9mB+zkcTnFxcVAIGAAg
|
||||
FAqrq6u7u7vFYnFycrLNZnM4HF/UCASClpYWtVpdU1NDJpPDwsJMJlOgMKlUKhaLRSKRVCqVyWSJ
|
||||
iYkvLy8ul+v+/t7PzePxSktLu7u7Ozo6cnNzn5+f3W63z+fT6XSBwMgAgMjIyPDwcAAAg8FgMBit
|
||||
ra1SqXRnZ2dqakqv12MYBgBIS0vLzs5WqVR5eXkQBJ2enkZHRwMAIiIi6HR6IKSfMD9FRkby+Xw+
|
||||
n19fXz87O9vX1wcAGBwcrKqquru7m5+f39/fv7q6qq+vz8/PDxDzKexNDAajtrbWaDQCAKqqqqan
|
||||
p/V6/czMDLHWnJyc3wnz08DAAIqiQc3uJ1Ioxf8RLC4ujsPhBFsVxDYCAJhMJo1Go1Ao7e3tLS0t
|
||||
FovlT8GYTKZCoVAoFEVFRbGxsQCAPwjb3NyEIAgAQDy/oSBgJFKo3fQ3dOP39L6NGxsbNpsNQZBA
|
||||
etpsNh8fHy8sLJhMJiIkA4XZbLaYmBiLxTI+Pv709CSXy5uamhISEj4s2N7eNpvNW1tbVqsVQRAE
|
||||
QZaWloKAra6unpyclJSUZGZmPjw8aDQajUaTkZEhl8vT0tLerOvr68vLy1tbWwkJCTwej8Vi6fV6
|
||||
jUaD43iAsPcmZrFYAoFAIpFwuVwMw66vr71eb1ZW1u7ubklJSVhYmMfjwXGcTqczmUwcxw0GA4qi
|
||||
Dw8PAZL+BSNEp9MLCwvFYjGXy93b27NYLFarNS4uDoKg8vJyDoej1Wq1Wu3Ozo7L5XqfBYI4HA6V
|
||||
SqXRaMQbt9vtdDpvbm48Hs+nMEIUCqWioqKgoCA9Pf34+HhtbU2tVi8vL5+dna2vr7+8vPwTw2az
|
||||
k5KS+vv7BQJBRkYGcRwvLi5QFB0eHtZoNA6Hg0B+lQUwDFdWVsIwnJKScn5+vri46PP5/DxsNnt0
|
||||
dLSxsfHu7u729nZhYcHr9QIAJBIJ8V21Wm1XV9fBwcGv9vhXgiBIIBAcHR0Zjcbe3t6mpqa3IaFQ
|
||||
2NPTs7KygmFYc3MzDMOhwrhc7uHhoc1m6+3t/dAgl8uNRiOO4w0NDSD0BIEg6Pb21mAwfDhqsVgw
|
||||
DIMg6NvZ/S4EQbxe78jIyBee6upqn8/X2dkJQl8ZiUQiOuIzeTyet5X9PanvdrsvLi4kEolQKPzQ
|
||||
EB8fr1Qqb25u7HZ7qDCn04miKI/HUygUHxpSU1NlMpnJZDKbzaHCvF6vyWR6fHxsaGiQy+UIgrwN
|
||||
xcfHSySStrY2KpV6eXlJZFtwtys/ORyOiYmJqKgokUg0NjaGYdjQ0BCRTEqlUiaTUalUDMMmJydD
|
||||
vN3+FJlMFgqFzc3NOI5fXV35fL7X19fX11er1arT6ebm5lQqFYPBIMwhnzUAAAAwDNfV1UEQRPwf
|
||||
AAB2u91sNrtcLhRFHx8ffwslOP0Alp/f+dOOZb8AAAAASUVORK5CYII=
|
||||
"
|
||||
height="36"
|
||||
width="36" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer4"
|
||||
inkscape:label="black"
|
||||
style="display:none"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
id="rect3988"
|
||||
width="48"
|
||||
height="48"
|
||||
x="0"
|
||||
y="0" />
|
||||
</g>
|
||||
<g
|
||||
style="display:none"
|
||||
inkscape:label="green"
|
||||
id="g6764"
|
||||
inkscape:groupmode="layer"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="48"
|
||||
width="48"
|
||||
id="rect6766"
|
||||
style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" />
|
||||
</g>
|
||||
<g
|
||||
style="display:inline"
|
||||
inkscape:label="white"
|
||||
id="g4621"
|
||||
inkscape:groupmode="layer"
|
||||
sodipodi:insensitive="true">
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="48"
|
||||
width="48"
|
||||
id="rect4623"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer7"
|
||||
inkscape:label="raw material"
|
||||
style="display:none">
|
||||
<path
|
||||
sodipodi:nodetypes="ccc"
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 24,7 C 15,18 15,30 24,41 33,30 33,18 24,7 z"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;display:inline"
|
||||
id="path4130" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 34,24 c -10e-7,6.428573 -3.571428,10 -10,10 -6.428573,0 -10,-3.571427 -10,-10 0,-6.428572 3.571427,-10 10,-10 6.428572,0 10.000003,3.571428 10,10 z"
|
||||
id="path4132"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssss" />
|
||||
<path
|
||||
sodipodi:nodetypes="sssss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4348"
|
||||
d="m 26,8 c -1e-6,2.571429 -1.964286,4 -5.5,4 C 16.964285,12 15,10.571429 15,8 15,5.4285714 16.964285,4 20.5,4 24.035714,4 26.000001,5.4285714 26,8 z"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
transform="matrix(1.2727273,0,0,1.75,-2.0909091,10)" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 29,24 c -1e-6,3.214286 -1.785714,5 -5,5 -3.214286,0 -5,-1.785714 -5,-5 0,-3.214286 1.785714,-5 5,-5 3.214286,0 5.000001,1.785714 5,5 z"
|
||||
id="path4350"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssss" />
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 27.7,24 c 0,2.378573 -1.321428,3.7 -3.7,3.7 -2.378573,0 -3.7,-1.321427 -3.7,-3.7 0,-2.378572 1.321427,-3.7 3.7,-3.7 2.378572,0 3.700001,1.321428 3.7,3.7 z"
|
||||
id="path4352"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssss" />
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 25.8,24 c 0,1.157143 -0.642857,1.8 -1.8,1.8 -1.157144,0 -1.8,-0.642857 -1.8,-1.8 0,-1.157144 0.642856,-1.8 1.8,-1.8 1.157143,0 1.800001,0.642856 1.8,1.8 z"
|
||||
id="path4354"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="sssss" />
|
||||
<path
|
||||
style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 18.5,-1 0,15 -8,4 C 10,19 7,19 6.5,18 l -8,-4 0,-15"
|
||||
id="path4280"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 0,-2 0,15 c 3,1 6,2 8,4 L 8,2 C 6,0 3,-1 0,-2 z"
|
||||
id="path6725"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path6719"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 16,0.84375 0,5.5 C 13.81145,7.0854 11.67582,7.87061 10,9.125 l 0,-5.5 C 11.67582,2.37061 13.81145,1.5854 16,0.84375 z M 17,-2 c -3,1 -6,2 -8,4 l 0,15 c 2,-2 5,-3 8,-4 l 0,-15 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer18"
|
||||
inkscape:label="shapes 1"
|
||||
style="display:none">
|
||||
<path
|
||||
style="fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 24,17 c -4.500001,0 -7,2.5 -7,7 0,4.500001 2.499999,7 7,7 4.5,0 6.999999,-2.499999 7,-7 1e-6,-4.5 -2.5,-7 -7,-7 z m 0,2 c 3.214286,0 5.000001,1.785714 5,5 -1e-6,3.214286 -1.785714,5 -5,5 -3.214286,0 -5,-1.785714 -5,-5 0,-3.214286 1.785714,-5 5,-5 z"
|
||||
id="path3216"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 24,20.3125 c -2.378573,0 -3.6875,1.308928 -3.6875,3.6875 0,2.378573 1.308927,3.6875 3.6875,3.6875 2.378572,0 3.6875,-1.308927 3.6875,-3.6875 1e-6,-2.378572 -1.308928,-3.6875 -3.6875,-3.6875 z m 0,1.875 c 1.157143,0 1.812501,0.655356 1.8125,1.8125 0,1.157143 -0.655357,1.8125 -1.8125,1.8125 -1.157144,0 -1.8125,-0.655357 -1.8125,-1.8125 0,-1.157144 0.655356,-1.8125 1.8125,-1.8125 z"
|
||||
id="path4001"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
id="path6738"
|
||||
style="fill-rule:evenodd;stroke:none;display:inline"
|
||||
d="m 16,0.84375 0,5.5 C 13.81145,7.0854 11.67582,7.87061 10,9.125 l 0,-5.5 C 11.67582,2.37061 13.81145,1.5854 16,0.84375 z M 17,-2 c -3,1 -6,2 -8,4 l 0,15 c 2,-2 5,-3 8,-4 z M 0,-2 0,13 c 3,1 6,2 8,4 L 8,2 C 6,0 3,-1 0,-2 z m -2,1 0,15.3125 c 0,0 5.5231347,2.745942 8.28125,4.125 0.2252675,0.2606 0.4852377,0.47997 0.8125,0.5938 0.4294557,0.14938 0.921131,0.21875 1.40625,0.21875 0.485119,0 0.9767943,-0.0694 1.40625,-0.21875 0.327262,-0.11383 0.587233,-0.3332 0.8125,-0.5938 0,0 5.524469,-2.825606 8.28125,-4.125 L 19,-1 l -1,0 0,14.6875 -7.71875,3.875 -0.15625,0.0625 -0.0625,0.15625 c -0.03556,0.0711 -0.2107057,0.21188 -0.5,0.3125 C 9.2732057,18.19437 8.889881,18.25 8.5,18.25 8.110119,18.25 7.7267943,18.1944 7.4375,18.09375 7.1482057,17.99313 6.9730573,17.85236 6.9375,17.78125 L 6.875,17.625 6.71875,17.5625 -1,13.6875 -1,-1 z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccccccsscccccccccssccccccc" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer19"
|
||||
inkscape:label="shapes 2"
|
||||
style="display:none">
|
||||
<path
|
||||
sodipodi:nodetypes="sssss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path6749"
|
||||
d="m 27.7,24 c 0,2.378573 -1.321428,3.7 -3.7,3.7 -2.378573,0 -3.7,-1.321427 -3.7,-3.7 0,-2.378572 1.321427,-3.7 3.7,-3.7 2.378572,0 3.700001,1.321428 3.7,3.7 z"
|
||||
style="fill-rule:evenodd;stroke:none;display:inline" />
|
||||
<path
|
||||
style="stroke:none;display:inline"
|
||||
d="M 24,7 C 21.882173,9.5884549 20.277368,12.23311 19.15625,14.90625 20.523744,14.321333 22.133081,14 24,14 c 1.866918,0 3.476256,0.321333 4.84375,0.90625 C 27.722632,12.23311 26.117827,9.5884549 24,7 z"
|
||||
id="path4148"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="stroke:none;display:inline"
|
||||
d="M 14.90625,19.15625 C 12.23311,20.277368 9.5884549,21.882173 7,24 c 2.5884549,2.117827 5.23311,3.722632 7.90625,4.84375 C 14.321333,27.476256 14,25.866919 14,24 c 0,-1.866918 0.321333,-3.476256 0.90625,-4.84375 z"
|
||||
id="path4146"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="stroke:none;display:inline"
|
||||
d="M 33.09375,19.15625 C 33.678667,20.523744 34.000001,22.133082 34,24 34,25.866919 33.678667,27.476256 33.09375,28.84375 35.76689,27.722632 38.411545,26.117827 41,24 38.411545,21.882173 35.76689,20.277368 33.09375,19.15625 z"
|
||||
id="path4144"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="stroke:none;display:inline"
|
||||
d="M 19.15625,33.09375 C 20.277368,35.76689 21.882173,38.411545 24,41 26.117827,38.411545 27.722632,35.76689 28.84375,33.09375 27.476256,33.678667 25.866918,34 24,34 22.133081,34 20.523744,33.678667 19.15625,33.09375 z"
|
||||
id="path4119"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer20"
|
||||
inkscape:label="shapes 3"
|
||||
style="display:none">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="translate(0,-192)"
|
||||
id="path6758"
|
||||
d="m 14.5,205 -1.5,1.5 5.15625,5.15625 C 17.409919,212.77794 17,214.22611 17,216 c 0,1.77389 0.409919,3.22206 1.15625,4.34375 L 13,225.5 l 1.5,1.5 5.15625,-5.15625 C 20.777944,222.59008 22.226111,223 24,223 c 1.773889,0 3.222056,-0.40992 4.34375,-1.15625 L 33.5,227 35,225.5 29.84375,220.34375 C 30.590081,219.22206 31,217.77389 31,216 c 0,-1.77389 -0.409919,-3.22206 -1.15625,-4.34375 L 35,206.5 33.5,205 28.34375,210.15625 C 27.222055,209.40992 25.773889,209 24,209 c -1.773889,0 -3.222056,0.40992 -4.34375,1.15625 L 14.5,205 z m 9.5,6 c 1.128621,0 2.082846,0.23139 2.84375,0.65625 l -1,1 C 25.330626,212.42921 24.710234,212.3125 24,212.3125 c -0.710234,0 -1.330626,0.11671 -1.84375,0.34375 l -1,-1 C 21.917154,211.23139 22.871379,211 24,211 z m -4.34375,2.15625 1,1 c -0.227037,0.51312 -0.34375,1.13352 -0.34375,1.84375 0,0.71023 0.116713,1.33063 0.34375,1.84375 l -1,1 C 19.23139,218.08285 19,217.12862 19,216 c 0,-1.12862 0.23139,-2.08285 0.65625,-2.84375 z m 8.6875,0 C 28.76861,213.91715 29,214.87138 29,216 c 0,1.12862 -0.23139,2.08285 -0.65625,2.84375 l -1,-1 c 0.227038,-0.51312 0.34375,-1.13352 0.34375,-1.84375 0,-0.71023 -0.116712,-1.33063 -0.34375,-1.84375 l 1,-1 z m -6.1875,6.1875 c 0.513124,0.22704 1.133516,0.34375 1.84375,0.34375 0.710234,0 1.330626,-0.11671 1.84375,-0.34375 l 1,1 C 26.082847,220.76861 25.128621,221 24,221 c -1.128621,0 -2.082846,-0.23139 -2.84375,-0.65625 l 1,-1 z"
|
||||
style="stroke:none;display:inline" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circleOuterShadow"
|
||||
inkscape:label="shadow outer circle"
|
||||
style="display:inline">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path3216"
|
||||
id="use6769"
|
||||
width="1"
|
||||
height="1" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circleInnerOpenShadow"
|
||||
inkscape:label="shadow inner circle open"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4001"
|
||||
id="use6776"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circleInnerClosedShadow"
|
||||
inkscape:label="shadow inner circle closed"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path6749"
|
||||
id="use6780"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueUpperShadow"
|
||||
inkscape:label="shadow upper arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4148"
|
||||
id="use6784"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueLowerShadow"
|
||||
inkscape:label="shadow lower arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4119"
|
||||
id="use6790"
|
||||
width="1"
|
||||
height="1" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueRightShadow"
|
||||
inkscape:label="shadow right arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4144"
|
||||
id="use6794"
|
||||
width="1"
|
||||
height="1" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueLeftShadow"
|
||||
inkscape:label="shadow left arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4146"
|
||||
id="use6799"
|
||||
width="1"
|
||||
height="1" />
|
||||
</g>
|
||||
<g
|
||||
style="display:none"
|
||||
inkscape:label="shadow upper arrow translucent"
|
||||
id="arrowTranslucentUpperShadow"
|
||||
inkscape:groupmode="layer">
|
||||
<use
|
||||
height="240"
|
||||
width="240"
|
||||
id="use6807"
|
||||
xlink:href="#path4148"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#000000;fill-opacity:0.2;display:inline;filter:url(#filter6135)"
|
||||
mask="url(#mask6840)" />
|
||||
</g>
|
||||
<g
|
||||
style="display:none"
|
||||
inkscape:label="shadow lower arrow translucent"
|
||||
id="arrowTranslucentLowerShadow"
|
||||
inkscape:groupmode="layer">
|
||||
<use
|
||||
height="240"
|
||||
width="240"
|
||||
id="use6850"
|
||||
xlink:href="#path4119"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#000000;fill-opacity:0.2;display:inline;filter:url(#filter6135)"
|
||||
mask="url(#mask6840)" />
|
||||
</g>
|
||||
<g
|
||||
style="display:none"
|
||||
inkscape:label="shadow right arrow translucent"
|
||||
id="arrowTranslucentRightShadow"
|
||||
inkscape:groupmode="layer">
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4144"
|
||||
id="use6852"
|
||||
width="240"
|
||||
height="240"
|
||||
style="fill:#000000;fill-opacity:0.2;display:inline;filter:url(#filter6135)"
|
||||
mask="url(#mask6840)" />
|
||||
</g>
|
||||
<g
|
||||
style="display:none"
|
||||
inkscape:label="shadow left arrow translucent"
|
||||
id="arrowTranslucentLeftShadow"
|
||||
inkscape:groupmode="layer">
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4146"
|
||||
id="use6848"
|
||||
width="240"
|
||||
height="240"
|
||||
style="fill:#000000;fill-opacity:0.2;display:inline;filter:url(#filter6135)"
|
||||
mask="url(#mask6840)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="crossShadow"
|
||||
inkscape:label="shadow cross"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path6758"
|
||||
id="use6861"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="bookShadow"
|
||||
inkscape:label="shadow book"
|
||||
style="display:inline">
|
||||
<use
|
||||
style="fill:#000000;fill-opacity:0.50196078;display:inline;filter:url(#filter6135)"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path6738"
|
||||
id="use6865"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circleOuter"
|
||||
inkscape:label="outer circle"
|
||||
style="display:inline">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path3216"
|
||||
id="use6869"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circleInnerOpen"
|
||||
inkscape:label="inner circle open"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4001"
|
||||
id="use6873"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circleInnerClosed"
|
||||
inkscape:label="inner circle closed"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path6749"
|
||||
id="use6877"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueUpper"
|
||||
inkscape:label="upper arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4148"
|
||||
id="use6881"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueLower"
|
||||
inkscape:label="lower arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4119"
|
||||
id="use6887"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueRight"
|
||||
inkscape:label="right arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4144"
|
||||
id="use6885"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowOpaqueLeft"
|
||||
inkscape:label="left arrow opaque"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4146"
|
||||
id="use6883"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowTranslucentUpper"
|
||||
inkscape:label="upper arrow translucent"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:0.50196078;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4148"
|
||||
id="use6903"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowTranslucentLower"
|
||||
inkscape:label="lower arrow translucent"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:0.50196078;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4119"
|
||||
id="use6909"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowTranslucentRight"
|
||||
inkscape:label="right arrow translucent"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:0.50196078;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4144"
|
||||
id="use6907"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="arrowTranslucentLeft"
|
||||
inkscape:label="left arrow translucent"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:0.50196078;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path4146"
|
||||
id="use6905"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="cross"
|
||||
inkscape:label="cross"
|
||||
style="display:none">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path6758"
|
||||
id="use6925"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="book"
|
||||
inkscape:label="book"
|
||||
style="display:inline">
|
||||
<use
|
||||
style="fill:#ffffff;fill-opacity:1;display:inline"
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#path6738"
|
||||
id="use6929"
|
||||
width="240"
|
||||
height="240" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 31 KiB |
508
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/Linking_Book.svg
vendored
Normal file
508
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/Linking_Book.svg
vendored
Normal file
@ -0,0 +1,508 @@
|
||||
<?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:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="1175.8176"
|
||||
height="1177.8379"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.0 r9654"
|
||||
sodipodi:docname="Linking_Book.svg"
|
||||
inkscape:export-xdpi="19.561266"
|
||||
inkscape:export-ydpi="19.561266">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.66138134"
|
||||
inkscape:cx="437.66142"
|
||||
inkscape:cy="576.10909"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer3"
|
||||
showgrid="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
showborder="false"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="998"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0">
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="-1422.8571,-1.5258789e-005"
|
||||
id="guide2996" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="0,1562.8571"
|
||||
id="guide2998" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="-628.31488,1177.8379"
|
||||
id="guide3000" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="1175.8176,1228.3455"
|
||||
id="guide3002" />
|
||||
<sodipodi:guide
|
||||
orientation="0,1"
|
||||
position="617.82713,588.96043"
|
||||
id="guide4160" />
|
||||
<sodipodi:guide
|
||||
orientation="1,0"
|
||||
position="587.89131,597.24623"
|
||||
id="guide4162" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<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:groupmode="layer"
|
||||
id="background"
|
||||
inkscape:label="Background"
|
||||
style="display:inline"
|
||||
transform="translate(0,125.47572)">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
id="rect3004"
|
||||
width="1175.8176"
|
||||
height="1177.8379"
|
||||
x="0"
|
||||
y="-125.47572"
|
||||
inkscape:export-xdpi="19.561266"
|
||||
inkscape:export-ydpi="19.561266" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circles"
|
||||
inkscape:label="Circles"
|
||||
style="display:inline"
|
||||
transform="translate(0,125.47572)">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:none;stroke:none"
|
||||
id="circlePath"
|
||||
sodipodi:cx="587.90881"
|
||||
sodipodi:cy="463.44324"
|
||||
sodipodi:rx="587.90881"
|
||||
sodipodi:ry="588.91895"
|
||||
d="m 1175.8176,463.44324 c 0,325.25095 -263.21571,588.91896 -587.90879,588.91896 C 263.21574,1052.3622 0,788.69419 0,463.44324 0,138.19228 263.21574,-125.47571 587.90881,-125.47571 c 324.69308,0 587.90879,263.66799 587.90879,588.91895 z"
|
||||
transform="matrix(0.8793304,0,0,0.8793304,70.94272,55.923509)" />
|
||||
<g
|
||||
id="g3224"
|
||||
transform="translate(-0.03253824,-0.03474644)"
|
||||
inkscape:export-xdpi="19.561266"
|
||||
inkscape:export-ydpi="19.561266"
|
||||
style="fill:#352f42;fill-opacity:1">
|
||||
<path
|
||||
inkscape:tile-y0="-85.78605"
|
||||
inkscape:tile-x0="556.15709"
|
||||
inkscape:tile-h="63.503456"
|
||||
inkscape:tile-w="63.50345"
|
||||
inkscape:tile-cy="463.40173"
|
||||
inkscape:tile-cx="587.90882"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883"
|
||||
d="m 619.66054,-54.034322 c 0,17.535995 -14.21573,31.751728 -31.75173,31.751728 -17.53599,0 -31.75172,-14.215733 -31.75172,-31.751728 0,-17.535995 14.21573,-31.751728 31.75172,-31.751728 17.536,0 31.75173,14.215733 31.75173,31.751728 z"
|
||||
inkscape:transform-center-y="-517.43605"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="517.43605"
|
||||
inkscape:transform-center-x="3e-005"
|
||||
id="use5519"
|
||||
transform="matrix(-1,0,0,-1,1175.8176,926.80346)"
|
||||
xlink:href="#path3883"
|
||||
inkscape:tiled-clone-of="#path3883"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-4.3e-005"
|
||||
inkscape:transform-center-x="517.43605"
|
||||
id="use5521"
|
||||
transform="matrix(0,-1,1,0,124.50709,1051.3105)"
|
||||
xlink:href="#path3883"
|
||||
inkscape:tiled-clone-of="#path3883"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-x="-517.43601"
|
||||
id="use5525"
|
||||
transform="matrix(0,1,-1,0,1051.3105,-124.50709)"
|
||||
xlink:href="#path3883"
|
||||
inkscape:tiled-clone-of="#path3883"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:transform-center-x="-98.74896"
|
||||
inkscape:tile-y0="-69.933668"
|
||||
inkscape:tile-x0="661.23414"
|
||||
inkscape:tile-h="50.812266"
|
||||
inkscape:tile-w="50.81225"
|
||||
inkscape:tile-cy="463.40173"
|
||||
inkscape:tile-cx="587.89131"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883-1"
|
||||
d="m 711.57495,-39.680724 c -2.67682,13.771051 -16.01044,22.764699 -29.7815,20.087876 -13.77104,-2.676818 -22.76468,-16.010449 -20.08786,-29.781498 2.67682,-13.771047 16.01044,-22.764697 29.7815,-20.087878 13.77104,2.676823 22.76468,16.010454 20.08786,29.7815 z"
|
||||
inkscape:transform-center-y="-507.92927"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="98.748955"
|
||||
inkscape:transform-center-x="-507.92923"
|
||||
id="use3037"
|
||||
transform="matrix(0,1,-1,0,1051.293,-124.48958)"
|
||||
xlink:href="#path3883-1"
|
||||
inkscape:tiled-clone-of="#path3883-1"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="507.92927"
|
||||
inkscape:transform-center-x="98.74898"
|
||||
id="use3039"
|
||||
transform="matrix(-1,0,0,-1,1175.7826,926.80347)"
|
||||
xlink:href="#path3883-1"
|
||||
inkscape:tiled-clone-of="#path3883-1"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-98.749005"
|
||||
inkscape:transform-center-x="507.92927"
|
||||
id="use3041"
|
||||
transform="matrix(0,-1,1,0,124.48958,1051.293)"
|
||||
xlink:href="#path3883-1"
|
||||
inkscape:tiled-clone-of="#path3883-1"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:transform-center-x="98.71521"
|
||||
inkscape:tile-y0="-69.940277"
|
||||
inkscape:tile-x0="463.76997"
|
||||
inkscape:tile-h="50.812269"
|
||||
inkscape:tile-w="50.812241"
|
||||
inkscape:tile-cy="463.40169"
|
||||
inkscape:tile-cx="587.8913"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883-1-1"
|
||||
d="m 514.11077,-49.380953 c 2.67682,13.771051 -6.31682,27.104678 -20.08788,29.781501 -13.77103,2.676816 -27.10465,-6.316834 -29.78147,-20.087883 -2.67682,-13.771047 6.3168,-27.104672 20.08786,-29.781499 13.77104,-2.676815 27.10467,6.316835 29.78149,20.087881 z"
|
||||
inkscape:transform-center-y="-507.93583"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-98.715213"
|
||||
inkscape:transform-center-x="-507.93584"
|
||||
id="use3067"
|
||||
transform="matrix(0,1,-1,0,1051.293,-124.48962)"
|
||||
xlink:href="#path3883-1-1"
|
||||
inkscape:tiled-clone-of="#path3883-1-1"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="507.93583"
|
||||
inkscape:transform-center-x="-98.715201"
|
||||
id="use3069"
|
||||
transform="matrix(-1,0,0,-1,1175.7826,926.80337)"
|
||||
xlink:href="#path3883-1-1"
|
||||
inkscape:tiled-clone-of="#path3883-1-1"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="98.715218"
|
||||
inkscape:transform-center-x="507.93583"
|
||||
id="use3071"
|
||||
transform="matrix(0,-1,1,0,124.48962,1051.293)"
|
||||
xlink:href="#path3883-1-1"
|
||||
inkscape:tiled-clone-of="#path3883-1-1"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:transform-center-x="-193.85213"
|
||||
inkscape:tile-y0="-34.138981"
|
||||
inkscape:tile-x0="763.95777"
|
||||
inkscape:tile-h="35.571355"
|
||||
inkscape:tile-w="35.571339"
|
||||
inkscape:tile-cy="463.40174"
|
||||
inkscape:tile-cx="587.89131"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883-1-4"
|
||||
d="m 798.22966,-9.6924378 c -3.6787,9.10509363 -14.04199,13.5040578 -23.1471,9.82535891 -9.10507,-3.67869161 -13.50403,-14.04199711 -9.82534,-23.14709011 3.6787,-9.10509 14.04199,-13.504057 23.14709,-9.825361 9.10509,3.678696 13.50404,14.042002 9.82535,23.1470922 z"
|
||||
inkscape:transform-center-y="-479.75504"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="193.85213"
|
||||
inkscape:transform-center-x="-479.75499"
|
||||
id="use3097"
|
||||
transform="matrix(0,1,-1,0,1051.293,-124.48957)"
|
||||
xlink:href="#path3883-1-4"
|
||||
inkscape:tiled-clone-of="#path3883-1-4"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="479.75504"
|
||||
inkscape:transform-center-x="193.85215"
|
||||
id="use3099"
|
||||
transform="matrix(-1,0,0,-1,1175.7826,926.80347)"
|
||||
xlink:href="#path3883-1-4"
|
||||
inkscape:tiled-clone-of="#path3883-1-4"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-193.85218"
|
||||
inkscape:transform-center-x="479.75504"
|
||||
id="use3101"
|
||||
transform="matrix(0,-1,1,0,124.48957,1051.293)"
|
||||
xlink:href="#path3883-1-4"
|
||||
inkscape:tiled-clone-of="#path3883-1-4"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:transform-center-x="193.8203"
|
||||
inkscape:tile-y0="-34.151876"
|
||||
inkscape:tile-x0="376.28534"
|
||||
inkscape:tile-h="35.571356"
|
||||
inkscape:tile-w="35.57134"
|
||||
inkscape:tile-cy="463.4017"
|
||||
inkscape:tile-cx="587.89131"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883-1-4-2"
|
||||
d="m 410.55723,-23.027064 c 3.67869,9.105096 -0.72026,19.4683926 -9.82537,23.14709892 -9.10507,3.67868398 -19.46837,-0.72027955 -23.14707,-9.82536842 -3.67869,-9.1050935 0.72026,-19.4683925 9.82535,-23.1470935 9.10509,-3.678694 19.46839,0.720278 23.14709,9.825363 z"
|
||||
inkscape:transform-center-y="-479.7679"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-193.8203"
|
||||
inkscape:transform-center-x="-479.76789"
|
||||
id="use3129"
|
||||
transform="matrix(0,1,-1,0,1051.293,-124.48961)"
|
||||
xlink:href="#path3883-1-4-2"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-2"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="479.7679"
|
||||
inkscape:transform-center-x="-193.82028"
|
||||
id="use3131"
|
||||
transform="matrix(-1,0,0,-1,1175.7826,926.8034)"
|
||||
xlink:href="#path3883-1-4-2"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-2"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="193.82029"
|
||||
inkscape:transform-center-x="479.7679"
|
||||
id="use3133"
|
||||
transform="matrix(0,-1,1,0,124.48961,1051.293)"
|
||||
xlink:href="#path3883-1-4-2"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-2"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:transform-center-x="-281.8321"
|
||||
inkscape:tile-y0="17.001703"
|
||||
inkscape:tile-x0="857.27527"
|
||||
inkscape:tile-h="24.896278"
|
||||
inkscape:tile-w="24.896273"
|
||||
inkscape:tile-cy="463.40173"
|
||||
inkscape:tile-cx="587.89131"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883-1-4-7"
|
||||
d="m 880.16207,36.228786 c -3.74392,5.765115 -11.45249,7.403629 -17.21761,3.659715 -5.76511,-3.743903 -7.40362,-11.452487 -3.65971,-17.217603 3.74391,-5.765113 11.45248,-7.403628 17.21761,-3.659718 5.76511,3.743909 7.40361,11.452492 3.65971,17.217606 z"
|
||||
inkscape:transform-center-y="-433.95189"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="281.8321"
|
||||
inkscape:transform-center-x="-433.95185"
|
||||
id="use3171"
|
||||
transform="matrix(0,1,-1,0,1051.293,-124.48958)"
|
||||
xlink:href="#path3883-1-4-7"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-7"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="433.95189"
|
||||
inkscape:transform-center-x="281.83212"
|
||||
id="use3173"
|
||||
transform="matrix(-1,0,0,-1,1175.7826,926.80346)"
|
||||
xlink:href="#path3883-1-4-7"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-7"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-281.83214"
|
||||
inkscape:transform-center-x="433.95189"
|
||||
id="use3175"
|
||||
transform="matrix(0,-1,1,0,124.48958,1051.293)"
|
||||
xlink:href="#path3883-1-4-7"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-7"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<path
|
||||
inkscape:transform-center-x="281.80334"
|
||||
inkscape:tile-y0="16.983003"
|
||||
inkscape:tile-x0="293.63983"
|
||||
inkscape:tile-h="24.896278"
|
||||
inkscape:tile-w="24.896279"
|
||||
inkscape:tile-cy="463.40171"
|
||||
inkscape:tile-cx="587.89131"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3883-1-4-7-0"
|
||||
d="m 316.52663,22.652196 c 3.74391,5.765124 2.10541,13.473696 -3.65971,17.217608 -5.76511,3.743908 -13.47369,2.105398 -17.2176,-3.659718 -3.74392,-5.765114 -2.10542,-13.473687 3.65971,-17.217611 5.76511,-3.743904 13.47369,-2.105386 17.2176,3.659721 z"
|
||||
inkscape:transform-center-y="-433.97057"
|
||||
style="fill:#352f42;fill-opacity:1;stroke:none;display:inline" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="-281.80334"
|
||||
inkscape:transform-center-x="-433.97055"
|
||||
id="use3203"
|
||||
transform="matrix(0,1,-1,0,1051.293,-124.4896)"
|
||||
xlink:href="#path3883-1-4-7-0"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-7-0"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="433.97057"
|
||||
inkscape:transform-center-x="-281.80332"
|
||||
id="use3205"
|
||||
transform="matrix(-1,0,0,-1,1175.7826,926.80342)"
|
||||
xlink:href="#path3883-1-4-7-0"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-7-0"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
<use
|
||||
height="1052.3622"
|
||||
width="744.09448"
|
||||
inkscape:transform-center-y="281.80332"
|
||||
inkscape:transform-center-x="433.97057"
|
||||
id="use3207"
|
||||
transform="matrix(0,-1,1,0,124.4896,1051.293)"
|
||||
xlink:href="#path3883-1-4-7-0"
|
||||
inkscape:tiled-clone-of="#path3883-1-4-7-0"
|
||||
y="0"
|
||||
x="0"
|
||||
style="fill:#352f42;fill-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="book"
|
||||
inkscape:label="Book"
|
||||
style="display:inline"
|
||||
transform="translate(0,125.47572)">
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
d="m 628.62755,669.05838 19.4375,-30.625 237.65628,-44.84375 -53.8125,-312.375 -47.09378,-8.21875 -196.92188,29.875 -196.92187,-29.875 -47.0625,8.21875 -53.8125,312.375 237.65625,44.84375 19.40625,30.625 40.73437,6 z"
|
||||
id="bookShading"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccc" />
|
||||
<path
|
||||
style="opacity:1;fill:#352f42;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 624.37755,687.02459 c 22.02381,-3.33334 22.99405,-34.51041 32.875,-37.84375 80.95238,-15 246.04608,-40.27455 242.84378,-45 4.6212,-3.15333 -50.402,-325.63145 -57.8438,-325.71875 -0.39,-2.23828 -3.8554,-3.02407 -8.4062,-3.03125 -5.8511,-0.009 -13.5121,1.25745 -18.75,2.3125 2.619,2.61905 7.9077,2.95684 9.8125,7.71875 2.2619,11.90476 56.6832,309.0794 50.9062,308 0.2825,6.37389 -154.51933,22.85268 -231.78123,34.28125 -15.47619,3.45238 -13.81399,34.74851 -28.21875,37.84375 l -27.90625,-0.71875 -27.90625,0.71875 c -14.40476,-3.09524 -12.74256,-34.39137 -28.21875,-37.84375 -77.2619,-11.42857 -232.06378,-27.90736 -231.78125,-34.28125 -5.77694,1.0794 48.64434,-296.09524 50.90625,-308 1.90476,-4.76191 7.19345,-5.0997 9.8125,-7.71875 -5.23791,-1.05505 -12.89897,-2.32173 -18.75,-2.3125 -4.5508,0.007 -8.0162,0.79297 -8.40625,3.03125 -7.44179,0.0873 -62.46496,322.56542 -57.84375,325.71875 -3.20233,4.72545 161.89137,30 242.84375,45 9.88095,3.33334 10.85119,34.51041 32.875,37.84375 l 36.46875,0.71875 z"
|
||||
id="bookCover"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccscccccccccccscccccc" />
|
||||
<g
|
||||
id="bookPages"
|
||||
transform="translate(-190.45045,127.31819)">
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="bookPageLeft"
|
||||
d="m 773.87535,479.18577 c -54.0564,-66.01358 -162.66742,-25.90721 -245.12212,-37.36617 15.9429,-99.14492 31.8858,-198.28985 47.8287,-297.43477 63.5225,9.4661 160.67457,-33.38045 190.56751,28.39829 2.98929,101.13779 3.73662,205.26486 6.72591,306.40265 z"
|
||||
style="fill:#262230;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="bookPageRight"
|
||||
d="m 782.84323,479.18577 c 54.0564,-66.01358 162.66742,-25.90721 245.12207,-37.36617 -15.9429,-99.14492 -31.88575,-198.28985 -47.82865,-297.43477 -63.5225,9.46609 -160.67457,-33.38046 -190.56751,28.39828 -2.98929,101.1378 -3.73662,205.26487 -6.72591,306.40266 z"
|
||||
style="fill:#262230;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 615.95128,330.38838 c 31.97315,-40.8005 85.78627,-16.21216 153.82568,-17.97615 4.28396,27.97176 8.30065,61.82377 12.58461,89.79553 -73.28596,5.34568 -92.71946,-20.73283 -164.58516,8.80464 z"
|
||||
id="bookLinkingPanel"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 20 KiB |
@ -0,0 +1,216 @@
|
||||
<?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="1386.2081"
|
||||
height="296.01321"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.0 r9654"
|
||||
sodipodi:docname="Loading_Text_rasterfont.svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.74023945"
|
||||
inkscape:cx="563.12545"
|
||||
inkscape:cy="89.24182"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="textUpdating"
|
||||
showgrid="true"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="998"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
showborder="false"
|
||||
inkscape:snap-global="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0">
|
||||
<sodipodi:guide
|
||||
position="4.0136719e-006,-1.9531228e-008"
|
||||
orientation="-296.01321,0"
|
||||
id="guide3001" />
|
||||
<sodipodi:guide
|
||||
position="4.0136719e-006,296.01321"
|
||||
orientation="0,1386.2081"
|
||||
id="guide3003" />
|
||||
<sodipodi:guide
|
||||
position="1386.2081,296.01321"
|
||||
orientation="296.01321,0"
|
||||
id="guide3005" />
|
||||
<sodipodi:guide
|
||||
position="1386.2081,-1.9531228e-008"
|
||||
orientation="0,-1386.2081"
|
||||
id="guide3007" />
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3797"
|
||||
empspacing="5"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true"
|
||||
spacingx="10px"
|
||||
spacingy="10px"
|
||||
originy="33px"
|
||||
originx="335px" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<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>
|
||||
<g
|
||||
inkscape:label="Background"
|
||||
inkscape:groupmode="layer"
|
||||
id="background"
|
||||
transform="translate(314.84811,-319.4097)">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
id="rect3009"
|
||||
width="1386.2081"
|
||||
height="296.01321"
|
||||
x="-314.84811"
|
||||
y="319.4097"
|
||||
inkscape:export-xdpi="12.465658"
|
||||
inkscape:export-ydpi="12.465658" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="circles"
|
||||
inkscape:label="Circles"
|
||||
transform="translate(314.84811,-319.4097)">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#3e364e;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
id="path2999"
|
||||
sodipodi:cx="-193.18074"
|
||||
sodipodi:cy="430.94165"
|
||||
sodipodi:rx="27.018284"
|
||||
sodipodi:ry="27.018284"
|
||||
d="m -166.16246,430.94165 c 0,14.92179 -12.09649,27.01828 -27.01828,27.01828 -14.92179,0 -27.01828,-12.09649 -27.01828,-27.01828 0,-14.92179 12.09649,-27.01828 27.01828,-27.01828 14.92179,0 27.01828,12.09649 27.01828,27.01828 z"
|
||||
transform="translate(5.1990242,36.474655)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="fill:#3e364e;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||
id="path2999-0"
|
||||
sodipodi:cx="-193.18074"
|
||||
sodipodi:cy="430.94165"
|
||||
sodipodi:rx="27.018284"
|
||||
sodipodi:ry="27.018284"
|
||||
d="m -166.16246,430.94165 c 0,14.92179 -12.09649,27.01828 -27.01828,27.01828 -14.92179,0 -27.01828,-12.09649 -27.01828,-27.01828 0,-14.92179 12.09649,-27.01828 27.01828,-27.01828 14.92179,0 27.01828,12.09649 27.01828,27.01828 z"
|
||||
transform="translate(1151.1625,36.474655)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="textLinking"
|
||||
inkscape:label="Linking Text"
|
||||
style="display:none"
|
||||
transform="translate(314.84811,-319.4097)">
|
||||
<g
|
||||
style="font-size:195.61486816px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:3px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3e364e;fill-opacity:1;stroke:none;font-family:Hobo Std;-inkscape-font-specification:Hobo Std Bold"
|
||||
id="text3799">
|
||||
<path
|
||||
d="m 64.536466,548.776 c 1.377337,0.12226 3.072643,0.12226 5.085921,0 2.013073,-0.12226 3.121542,-1.10032 3.32541,-2.93418 -0.07135,-0.78608 -0.776515,-4.27812 -2.11551,-10.47613 -1.339202,-6.198 -2.88478,-12.34167 -4.636736,-18.43104 -1.752156,-6.0893 -3.283244,-9.36399 -4.59327,-9.82408 -1.624161,0.20531 -3.940112,1.64221 -6.947862,4.31071 -3.007925,2.66858 -6.743877,5.33711 -11.207867,8.00562 -4.464142,2.66857 -9.69254,4.10547 -15.685208,4.31072 -5.644286,0.29345 -10.738353,-1.90719 -15.282216,-6.60192 -4.5439543,-4.69466 -6.9483532,-13.64391 -7.2132041,-26.84779 0.2800977,-18.15565 2.2410482,-34.50738 5.8828571,-49.05523 3.641721,-14.54765 7.283487,-26.33509 10.925309,-35.36237 3.641712,-9.027 5.602665,-14.3375 5.882866,-15.93154 -0.06934,-1.70329 -0.517615,-2.79546 -1.344833,-3.27651 -0.827337,-0.48072 -1.617937,-0.69263 -2.371801,-0.63573 l -31.1023638,0 c -1.4594784,0.40259 -3.1130135,5.24603 -4.9606102,14.53033 -1.847639,9.28459 -3.64177,20.59546 -5.382397,33.93263 -1.74066,13.33739 -3.180243,26.28651 -4.318755,38.84738 -1.138534,12.56103 -1.728426,22.31922 -1.769675,29.27462 0.122244,19.32082 0.317856,32.02746 0.586837,38.11995 0.26896,6.09252 2.811918,8.77403 7.628881,8.04456 z"
|
||||
id="path2998"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 129.7671,548.776 3.91225,0 c 0.89242,0.0326 1.60152,-0.0815 2.12728,-0.34232 0.52565,-0.26082 0.79462,-0.86396 0.8069,-1.80941 -0.40758,-1.6138 -2.03768,-9.87842 -4.89031,-24.79387 -2.85272,-14.9154 -4.48283,-35.01455 -4.89031,-60.29751 0.43193,-19.41034 2.15984,-35.94772 5.18373,-49.61218 3.02379,-13.66419 4.7517,-21.25231 5.18373,-22.76439 -0.15084,-1.75627 -1.07185,-2.74248 -2.76303,-2.95863 -1.69128,-0.21583 -3.24803,-0.27288 -4.67024,-0.17116 l -21.12614,0 c -0.8757,-0.26983 -2.04631,0.0501 -3.51185,0.95972 -1.46558,0.90996 -2.96018,4.02957 -4.4838,9.35883 -1.523657,5.32956 -2.81042,14.48869 -3.860293,27.47742 -1.049902,12.98898 -1.597002,31.42746 -1.641304,55.3155 0.04225,23.9529 0.609766,40.83833 1.702551,50.65635 1.092758,9.81806 2.457213,15.56085 4.093366,17.22838 1.63612,1.66753 3.29038,2.25196 4.96276,1.75327 z"
|
||||
id="path3000"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 273.31853,548.776 c 1.67224,0.49869 3.32649,-0.0857 4.96275,-1.75327 1.63602,-1.66753 3.00047,-7.41032 4.09337,-17.22838 1.09265,-9.81801 1.66017,-26.70345 1.70256,-50.65635 -0.0368,-23.88804 -0.53807,-42.32653 -1.50378,-55.3155 -0.96596,-12.98873 -2.17632,-22.14786 -3.63105,-27.47743 -1.45499,-5.32926 -2.93431,-8.44886 -4.43795,-9.35883 -1.50389,-0.90963 -2.81205,-1.22954 -3.92447,-0.95971 l -14.86654,0 c -1.9603,-0.0813 -3.76156,-0.065 -5.4038,0.0489 -1.64242,0.11427 -2.51452,0.81521 -2.61631,2.10283 0.41558,2.74688 2.07829,10.99519 4.98811,24.74496 2.90964,13.75004 4.57234,30.01845 4.98812,48.80529 0.057,1.66279 0.0407,3.86342 -0.0489,6.60191 -0.0898,2.73865 -0.59509,4.25465 -1.516,4.54799 -0.8722,-0.0855 -1.57314,-0.55009 -2.10283,-1.39374 -0.52988,-0.84351 -0.93741,-1.5526 -1.22258,-2.12728 -12.10511,-22.33593 -22.06201,-39.56429 -29.87073,-51.68513 -7.80886,-12.12058 -13.99841,-20.48119 -18.56869,-25.08186 -4.57037,-4.60035 -8.05033,-6.78831 -10.43989,-6.56387 l -15.45338,0 c -0.8757,-0.26983 -2.04631,0.0501 -3.51185,0.95972 -1.46558,0.90996 -2.96018,4.02957 -4.48381,9.35883 -1.52365,5.32956 -2.81041,14.48869 -3.86029,27.47742 -1.0499,12.98898 -1.597,31.42746 -1.6413,55.3155 0.0422,23.9529 0.60977,40.83833 1.70255,50.65635 1.09276,9.81806 2.45721,15.56085 4.09337,17.22838 1.63612,1.66753 3.29037,2.25196 4.96276,1.75327 l 18.19195,0 c 0.99839,0.0856 2.13131,0.11003 3.39876,0.0734 1.26736,-0.0367 1.96015,-0.64796 2.07838,-1.83386 -0.33421,-4.4624 -1.6709,-12.99598 -4.01005,-25.60077 -2.33924,-12.60473 -3.67592,-32.43491 -4.01005,-59.4906 -0.0471,-1.54308 -0.10509,-4.30338 -0.17388,-8.28093 -0.0689,-3.97735 0.13399,-7.73745 0.60857,-11.28031 0.4745,-3.54265 1.50328,-5.43356 3.08633,-5.67276 2.24467,0.37323 5.23198,3.27843 8.96194,8.71562 3.72986,5.43739 7.2533,11.1681 10.57031,17.19215 3.3169,6.02422 5.47829,10.10309 6.48419,12.23664 9.75036,20.37272 16.02685,35.92026 18.8295,46.64268 2.80248,10.72247 4.65958,18.01083 5.57132,21.86511 0.91157,3.85429 3.40623,5.66552 7.48399,5.43368 z"
|
||||
id="path3002"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 393.94758,386.02653 c -2.11923,0.0368 -3.45591,0.40361 -4.01006,1.10032 -0.55432,0.69703 -1.10856,2.09076 -1.6627,4.18121 -3.40277,11.16696 -8.16026,21.78314 -14.27246,31.84859 -6.11235,10.06569 -11.94207,18.30555 -17.4892,24.7196 -5.54723,6.41424 -9.1745,9.72758 -10.88184,9.94001 -1.8502,-0.37891 -2.89347,-2.16387 -3.12979,-5.35489 -0.23641,-3.19083 -0.30161,-5.51372 -0.19562,-6.96869 0.39934,-14.65858 1.99684,-27.54453 4.7925,-38.65789 2.79558,-11.11308 4.39308,-17.00589 4.79251,-17.67847 -0.11823,-1.75627 -0.90884,-2.74248 -2.3718,-2.95863 -1.46307,-0.21583 -2.8894,-0.27288 -4.27902,-0.17116 l -19.75685,0 c -0.87569,-0.26983 -2.04631,0.0501 -3.51185,0.95972 -1.46558,0.90996 -2.96018,4.02957 -4.4838,9.35883 -1.52366,5.32956 -2.81042,14.48869 -3.8603,27.47742 -1.04989,12.98898 -1.59699,31.42746 -1.6413,55.3155 0.0423,23.9529 0.60977,40.83833 1.70255,50.65635 1.09276,9.81806 2.45722,15.56085 4.09337,17.22838 1.63613,1.66753 3.29038,2.25196 4.96276,1.75327 l 23.86471,0 c 1.09619,0.008 1.9846,-0.25266 2.66521,-0.78245 0.68052,-0.52978 1.03099,-1.37744 1.05142,-2.54296 -0.0822,-0.89353 -0.65691,-4.36625 -1.72428,-10.41817 -1.06747,-6.05189 -2.13488,-12.45155 -3.20225,-19.19899 -1.06746,-6.74738 -1.64222,-11.61112 -1.72429,-14.59123 0.6031,-5.94575 3.60249,-11.61035 8.99817,-16.99382 5.39558,-5.38335 9.56864,-8.26048 12.51919,-8.6314 2.29022,-0.0529 6.16986,5.28568 11.63893,16.01576 5.46892,10.7302 8.76172,27.16977 9.87843,49.31877 -0.12642,1.26741 -0.0205,2.84046 0.31787,4.71914 0.33817,1.8787 1.6667,2.91381 3.9856,3.10535 l 23.86471,0 c 2.23312,0.15894 4.17294,0.13448 5.81946,-0.0734 1.64629,-0.20783 2.51024,-1.55267 2.59187,-4.0345 -0.4638,-19.1084 -3.70951,-35.2935 -9.73715,-48.55533 -6.02787,-13.26173 -12.05562,-23.57846 -18.08328,-30.95022 -6.02785,-7.3716 -9.27356,-11.7765 -9.73714,-13.2147 0.41046,-1.47666 3.28426,-5.39132 8.62143,-11.74399 5.33698,-6.35246 10.67405,-14.10691 16.01123,-23.26338 5.33696,-9.15621 8.21077,-18.67841 8.62144,-28.56665 -0.13868,-1.46692 -0.93743,-2.24937 -2.39626,-2.34734 -1.45906,-0.0976 -2.74683,-0.0976 -3.86334,0 z"
|
||||
id="path3004"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 484.91374,548.776 3.91224,0 c 0.89243,0.0326 1.60153,-0.0815 2.12729,-0.34232 0.52565,-0.26082 0.79462,-0.86396 0.8069,-1.80941 -0.40758,-1.6138 -2.03768,-9.87842 -4.89031,-24.79387 -2.85273,-14.9154 -4.48283,-35.01455 -4.89031,-60.29751 0.43193,-19.41034 2.15984,-35.94772 5.18372,-49.61218 3.02379,-13.66419 4.7517,-21.25231 5.18373,-22.76439 -0.15083,-1.75627 -1.07184,-2.74248 -2.76302,-2.95863 -1.69129,-0.21583 -3.24803,-0.27288 -4.67024,-0.17116 l -21.12614,0 c -0.8757,-0.26983 -2.04632,0.0501 -3.51185,0.95972 -1.46559,0.90996 -2.96018,4.02957 -4.4838,9.35883 -1.52366,5.32956 -2.81042,14.48869 -3.8603,27.47742 -1.0499,12.98898 -1.597,31.42746 -1.6413,55.3155 0.0423,23.9529 0.60977,40.83833 1.70255,50.65635 1.09276,9.81806 2.45721,15.56085 4.09337,17.22838 1.63612,1.66753 3.29037,2.25196 4.96276,1.75327 z"
|
||||
id="path3006"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 628.46517,548.776 c 1.67224,0.49869 3.32649,-0.0857 4.96275,-1.75327 1.63602,-1.66753 3.00047,-7.41032 4.09337,-17.22838 1.09265,-9.81801 1.66017,-26.70345 1.70256,-50.65635 -0.0368,-23.88804 -0.53807,-42.32653 -1.50378,-55.3155 -0.96597,-12.98873 -2.17632,-22.14786 -3.63106,-27.47743 -1.45498,-5.32926 -2.9343,-8.44886 -4.43795,-9.35883 -1.50388,-0.90963 -2.81204,-1.22954 -3.92447,-0.95971 l -14.86653,0 c -1.9603,-0.0813 -3.76157,-0.065 -5.4038,0.0489 -1.64242,0.11427 -2.51453,0.81521 -2.61631,2.10283 0.41558,2.74688 2.07828,10.99519 4.98811,24.74496 2.90963,13.75004 4.57234,30.01845 4.98812,48.80529 0.0569,1.66279 0.0406,3.86342 -0.0489,6.60191 -0.0898,2.73865 -0.59509,4.25465 -1.51599,4.54799 -0.8722,-0.0855 -1.57315,-0.55009 -2.10283,-1.39374 -0.52989,-0.84351 -0.93741,-1.5526 -1.22258,-2.12728 -12.10511,-22.33593 -22.06201,-39.56429 -29.87073,-51.68513 -7.80886,-12.12058 -13.99842,-20.48119 -18.56869,-25.08186 -4.57037,-4.60035 -8.05033,-6.78831 -10.4399,-6.56387 l -15.45337,0 c -0.8757,-0.26983 -2.04632,0.0501 -3.51186,0.95972 -1.46558,0.90996 -2.96018,4.02957 -4.4838,9.35883 -1.52365,5.32956 -2.81042,14.48869 -3.86029,27.47742 -1.0499,12.98898 -1.597,31.42746 -1.6413,55.3155 0.0423,23.9529 0.60976,40.83833 1.70255,50.65635 1.09276,9.81806 2.45721,15.56085 4.09337,17.22838 1.63612,1.66753 3.29037,2.25196 4.96275,1.75327 l 18.19195,0 c 0.9984,0.0856 2.13132,0.11003 3.39876,0.0734 1.26736,-0.0367 1.96016,-0.64796 2.07839,-1.83386 -0.33422,-4.4624 -1.6709,-12.99598 -4.01006,-25.60077 -2.33924,-12.60473 -3.67592,-32.43491 -4.01005,-59.4906 -0.0471,-1.54308 -0.10508,-4.30338 -0.17388,-8.28093 -0.0689,-3.97735 0.13399,-7.73745 0.60857,-11.28031 0.47451,-3.54265 1.50329,-5.43356 3.08633,-5.67276 2.24468,0.37323 5.23199,3.27843 8.96195,8.71562 3.72986,5.43739 7.25329,11.1681 10.57031,17.19215 3.31689,6.02422 5.47829,10.10309 6.48419,12.23664 9.75035,20.37272 16.02684,35.92026 18.82949,46.64268 2.80248,10.72247 4.65959,18.01083 5.57133,21.86511 0.91156,3.85429 3.40622,5.66552 7.48399,5.43368 z"
|
||||
id="path3008"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 730.11984,551.71019 c 12.68212,0.0611 23.99502,-2.89751 33.93874,-8.87592 9.94352,-5.97839 15.19244,-15.34332 15.7468,-28.09482 -0.0315,-2.50911 -0.46862,-8.0104 -1.31133,-16.50389 -0.84294,-8.49338 -1.90311,-16.66079 -3.18051,-24.50226 -1.27764,-7.84131 -2.58413,-12.03852 -3.91949,-12.59163 -1.18345,0.13412 -4.64168,1.2136 -10.3747,3.23847 -5.73323,2.02503 -11.33595,4.19125 -16.80818,6.49867 -5.47239,2.30758 -8.40899,3.95217 -8.80979,4.93378 0.19071,1.58309 1.52618,3.09003 4.00643,4.52082 2.48009,1.43093 4.96025,3.4595 7.44051,6.08572 2.48008,2.62634 3.81556,6.52409 4.00643,11.69327 -0.29351,6.77312 -2.98318,11.61452 -8.06901,14.52422 -5.086,2.90976 -10.80765,4.32795 -17.16498,4.25457 -12.53147,-0.49308 -21.01615,-5.13072 -25.45406,-13.91293 -4.43799,-8.78213 -6.51637,-18.7502 -6.23514,-29.90424 -0.058,-9.32772 1.25333,-18.7316 3.93398,-28.21165 2.68057,-9.47984 7.07822,-17.44922 13.19296,-23.90818 6.11464,-6.45869 14.29413,-9.82032 24.53849,-10.0849 7.94515,0.22715 12.94172,1.81619 14.9897,4.76714 2.0478,2.95122 3.1611,5.90231 3.3399,8.85328 0.17862,2.95121 1.43681,4.54026 3.7746,4.76715 6.23096,-0.0325 11.12941,-1.58108 14.69537,-4.6458 3.56573,-3.06447 5.3833,-7.44944 5.4527,-13.15493 -0.21868,-7.00084 -2.69402,-12.58182 -7.42603,-16.74296 -4.73224,-4.16084 -10.40982,-7.14815 -17.03276,-8.96195 -6.62314,-1.81348 -12.88031,-2.69977 -18.77154,-2.65888 -15.61162,0.30204 -28.7925,4.97982 -39.54268,14.03337 -10.75025,9.05386 -18.90318,20.67225 -24.45879,34.85523 -5.55564,14.1832 -8.34734,29.11976 -8.3751,44.80972 -0.008,22.20612 5.63199,40.14539 16.92046,53.81784 11.28843,13.67249 28.27409,20.70638 50.95702,21.10169 z"
|
||||
id="path3010"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="textUpdating"
|
||||
inkscape:label="Updating Text"
|
||||
style="display:inline"
|
||||
transform="translate(314.84811,-319.4097)">
|
||||
<g
|
||||
transform="translate(-2.0722657e-6,0.02741704)"
|
||||
style="font-size:220px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#3e364e;fill-opacity:1;stroke:none;display:inline;font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="text3799-0">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 25.320627,483.66859 c -0.03675,10.74324 -1.283395,18.73646 -3.739951,23.97969 -3.483362,7.91992 -9.936606,11.87987 -19.3597511,11.87985 -15.5831789,0.0367 -23.3564039,-11.91648 -23.3196999,-35.85954 l 0,-73.25906 c 0.0045,-3.63898 0.105376,-6.8656 0.302495,-9.67987 0.197045,-2.814 0.462875,-5.16063 0.797491,-7.03991 l -29.919615,0 c 0.623315,5.97672 0.916645,10.52333 0.879989,13.63982 l 0.219997,80.07897 c -8e-6,16.05983 4.399931,29.25965 13.19983,39.59949 9.203186,10.74319 21.816345,16.09645 37.8395129,16.05979 15.6197241,-0.0367 28.1595501,-5.46326 37.6195161,-16.27979 8.79978,-10.37651 13.199719,-23.50299 13.19983,-39.37949 l 0,-71.93907 0,-8.1399 c 0.10072,-2.86441 0.229051,-5.44021 0.384995,-7.7274 0.155722,-2.28691 0.394052,-4.25771 0.71499,-5.91242 l -30.139612,0 c 0.439913,1.86095 0.769907,3.91425 0.989984,6.15992 0.219913,2.24594 0.329913,4.73924 0.329999,7.4799 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path2998-1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 117.16073,506.1083 c 14.26308,-5.93988 25.77626,-14.07977 34.53956,-24.41969 9.93644,-11.91644 14.92304,-25.04292 14.9598,-39.37949 -1e-4,-14.11637 -5.06003,-25.70288 -15.1798,-34.75955 -10.15661,-9.23974 -23.50309,-13.85968 -40.03949,-13.85982 l -32.99957,0 c 0.325401,1.86095 0.554564,4.51924 0.687489,7.97489 0.132902,3.45592 0.197068,7.7642 0.192499,12.92484 l 0,105.15864 c 0.03666,7.66325 -0.256673,14.55649 -0.879988,20.67974 l 28.59963,0 c -0.3392,-1.7554 -0.59587,-4.34953 -0.76999,-7.7824 -0.17421,-3.43286 -0.21087,-7.73197 -0.11,-12.89734 l 0,-7.6999 z m -5.05993,-88.43886 c 7.51652,1.2e-4 13.8231,2.20009 18.91975,6.59991 5.71986,4.87672 8.57982,11.4033 8.57989,19.57975 -0.0367,8.57998 -3.70335,16.71986 -10.99986,24.41969 -6.37997,6.81997 -13.85987,11.8799 -22.43971,15.1798 l 0,-65.77915 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3000-7" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 188.44123,393.68975 c 0.62331,3.33676 0.91664,10.30333 0.87999,20.89973 l 0,105.15864 c 0.0366,10.08322 -0.25667,16.97646 -0.87999,20.67974 l 45.97941,0 c 20.86298,0 35.23612,-6.81991 43.11944,-20.45974 6.34315,-10.96316 9.49643,-28.85624 9.45988,-53.67931 -0.0368,-48.39925 -19.32317,-72.59892 -57.85925,-72.59906 z m 71.27908,86.89888 c 0.0778,12.75529 -2.82796,21.94933 -8.71739,27.58214 -5.88958,5.63287 -15.23028,8.392 -28.02213,8.2774 l -6.81992,0 0,-98.99873 5.49993,0 c 14.73975,-0.0365 24.85961,3.11675 30.35961,9.45988 5.09652,5.68337 7.66315,15.87656 7.6999,30.5796 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3002-4" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 328.51225,540.42786 c 0.0366,-2.01664 1.06329,-6.78324 3.07996,-14.29982 l 5.05993,-17.81977 38.27951,0 4.39994,17.81977 c 0.87991,3.6208 1.5399,6.60909 1.97998,8.96489 0.43991,2.3558 0.65991,4.13411 0.65999,5.33493 l 30.57961,0 -8.57989,-32.11959 5.27993,0 0,-23.3197 -11.43985,0 -24.19969,-91.29882 -32.55958,0 -38.71951,146.73811 z m 28.15964,-104.49866 12.31984,49.05937 -25.95967,0 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3004-0" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 497.1829,417.66944 c 4.0607,1.2e-4 7.43398,0.0551 10.11987,0.165 2.68571,0.11012 4.73901,0.27511 6.15992,0.49499 l 0,-24.63968 -90.85883,0 0,24.63968 c 2.45663,-0.43987 7.88322,-0.65987 16.27979,-0.65999 l 15.6198,0 0,102.07868 c 0.0366,9.86322 -0.2567,16.75646 -0.87999,20.67974 l 28.81963,0 c -0.62339,-3.11662 -0.91672,-9.8632 -0.87999,-20.23974 l 0,-102.51868 15.6198,0 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3006-9" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 561.23086,540.42786 c -0.62337,-3.55662 -0.9167,-10.30319 -0.87999,-20.23974 l 0,-106.25863 c -0.0367,-10.1564 0.25662,-16.90298 0.87999,-20.23974 l -29.91962,0 c 0.3254,1.43929 0.55457,3.89592 0.68749,7.3699 0.1329,3.47426 0.19707,7.91086 0.1925,13.30983 l 0,105.37864 c 0.005,4.95912 -0.0596,9.17573 -0.1925,12.64984 -0.13292,3.47412 -0.36209,6.15075 -0.68749,8.0299 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3008-4" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 681.95847,540.64785 c -0.62343,-5.46326 -0.91676,-14.11647 -0.87998,-25.95966 l 0,-97.01875 c -1.1e-4,-8.79976 0.21989,-16.93965 0.65999,-24.41969 l -27.71965,0 c 0.69658,7.70004 1.06324,15.83993 1.09999,24.41969 l 0,46.4194 -43.11944,-70.39909 -29.25963,0 6.59992,12.09984 0,108.01861 c 0.005,5.60078 -0.0596,10.62404 -0.1925,15.0698 -0.13293,4.44578 -0.36209,8.36906 -0.68749,11.76985 l 27.93964,0 c -0.62337,-7.22323 -0.9167,-15.43645 -0.87999,-24.63968 l 0,-69.7391 39.59949,64.01917 c -0.11008,0.55919 -0.16508,1.47584 -0.165,2.74997 -7e-5,1.27417 0.0549,2.85082 0.165,4.72994 -0.0367,5.75661 -0.4034,13.38317 -1.09999,22.8797 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3010-8" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 801.81037,540.42786 c 1.97987,0.21999 3.51985,0.21999 4.61994,0 -0.0368,-1.4254 -0.18344,-3.85454 -0.44,-7.28741 -0.25677,-3.43287 -0.40343,-7.23698 -0.43999,-11.41235 l 0,-25.51967 c -0.005,-3.84074 0.0595,-7.48903 0.1925,-10.94487 0.1328,-3.45573 0.36197,-6.77401 0.68749,-9.95487 l -26.83966,0 c 0.47658,9.67994 0.62325,15.39986 0.44,17.15978 0.0366,17.59981 -7.07665,26.39969 -21.33973,26.39966 -17.41648,-0.0366 -26.14303,-17.34306 -26.17966,-51.91933 -3e-5,-34.13612 10.77982,-51.22255 32.33958,-51.25934 10.33979,-0.0365 20.23966,3.99674 29.69962,12.09985 l 0,-25.07968 c -8.35998,-7.29643 -18.25984,-10.96305 -29.69962,-10.99986 -19.95104,0.0827 -35.04833,6.46256 -45.29192,19.13975 -10.24362,12.67746 -15.38605,31.1572 -15.4273,55.43929 0.0367,50.85603 18.22308,76.30235 54.5593,76.33902 8.13983,-0.0367 15.39973,-1.72331 21.77972,-5.05994 5.05985,-2.82329 8.5798,-5.97658 10.55987,-9.45987 z"
|
||||
style="font-family:Collegiate;-inkscape-font-specification:Collegiate Bold"
|
||||
id="path3012" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 22 KiB |
13
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/Makefile
vendored
Normal file
13
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/Makefile
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
SOURCE_DIR = .
|
||||
BINARY_DIR = .
|
||||
|
||||
.PHONY: all clean
|
||||
|
||||
all: $(BINARY_DIR)/resource.dat
|
||||
|
||||
$(BINARY_DIR)/resource.dat: $(SOURCE_DIR)/makeres.py $(SOURCE_DIR)/render_svg.py $(SOURCE_DIR)/create_resource_dat.py $(SOURCE_DIR)/Cursor_Base.svg $(SOURCE_DIR)/Linking_Book.svg $(SOURCE_DIR)/Loading_Text_rasterfont.svg $(SOURCE_DIR)/Voice_Chat.svg
|
||||
python $(SOURCE_DIR)/makeres.py --optimize --render --package -i $(SOURCE_DIR) -o $(BINARY_DIR)
|
||||
|
||||
clean:
|
||||
rm -rf $(BINARY_DIR)/render
|
||||
rm -fv $(BINARY_DIR)/resource.dat
|
1595
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/Voice_Chat.svg
vendored
Normal file
1595
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/Voice_Chat.svg
vendored
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 48 KiB |
62
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/create_resource_dat.py
vendored
Normal file
62
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/create_resource_dat.py
vendored
Normal file
@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function
|
||||
from __future__ import with_statement
|
||||
|
||||
import os
|
||||
import sys
|
||||
import glob
|
||||
import struct
|
||||
from optparse import OptionParser
|
||||
|
||||
version = 1
|
||||
|
||||
def create_resource_dat(resfilepath, inrespath):
|
||||
datHeader = 0xCBBCF00D
|
||||
datVersion = 0x00000001
|
||||
|
||||
## Get list of files to archive
|
||||
resourceList = glob.glob(os.path.join(inrespath, "*"))
|
||||
resourceList.sort()
|
||||
if len(resourceList) == 0:
|
||||
print("No files found in '{0}'. Quitting.\n".format(inrespath))
|
||||
return False
|
||||
print("{0} resources found in '{1}'.".format(len(resourceList), inrespath, ))
|
||||
|
||||
## Write each resource into the output file
|
||||
with open(resfilepath, "wb") as datFile:
|
||||
datFile.write(struct.pack("<I",datHeader))
|
||||
datFile.write(struct.pack("<I",datVersion))
|
||||
datFile.write(struct.pack("<I",len(resourceList)))
|
||||
for res in resourceList:
|
||||
with open(res, "rb") as resFile:
|
||||
name = os.path.basename(res)
|
||||
datFile.write(struct.pack("<I", len(name)))
|
||||
datFile.write(name)
|
||||
datFile.write(struct.pack("<I", os.path.getsize(res)))
|
||||
datFile.write(resFile.read())
|
||||
|
||||
print("{0} resources written to '{1}'.\n".format(len(resourceList), resfilepath))
|
||||
|
||||
return True
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = OptionParser(usage="usage: %prog [options]", version="%prog {0}".format(version))
|
||||
parser.add_option("-q", "--quiet", dest="verbose", default=True, action="store_false", help="Don't print status messages")
|
||||
parser.add_option("-o", "--outfile", dest="outfile", default="resource.dat", help="Sets name for output file")
|
||||
parser.add_option("-i", "--inpath", dest="inpath", default=".", help="Sets input path for files to add to resource file")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
## Send output to OS's null if unwanted
|
||||
if not options.verbose:
|
||||
sys.stdout = open(os.devnull,"w")
|
||||
sys.stderr = open(os.devnull,"w")
|
||||
|
||||
## Compute Paths
|
||||
outfile = os.path.expanduser(options.outfile)
|
||||
inpath = os.path.expanduser(options.inpath)
|
||||
|
||||
## Do the work!
|
||||
print("Creating {0}...".format(outfile))
|
||||
create_resource_dat(outfile, inpath)
|
52
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/makeres.py
vendored
Normal file
52
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/makeres.py
vendored
Normal file
@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import sys
|
||||
import glob
|
||||
import subprocess
|
||||
from optparse import OptionParser
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = OptionParser(usage="usage: %prog [options]")
|
||||
parser.add_option("-q", "--quiet", dest="verbose", default=True, action="store_false", help="Don't print status messages")
|
||||
parser.add_option("-r", "--render", dest="render", default=False, action="store_true", help="Perform SVG Render to images")
|
||||
parser.add_option("-p", "--package", dest="package", default=False, action="store_true", help="Perform packaging into resource container")
|
||||
parser.add_option("-z", "--optimize", dest="optimize", default=False, action="store_true", help="Perform PNGCrush optimization on PNG resources")
|
||||
parser.add_option("-o", "--outpath", dest="outpath", default=".", help="Sets output path for resource container")
|
||||
parser.add_option("-i", "--inpath", dest="inpath", default=".", help="Sets input path for files to add to resource file")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
## Send output to OS's null if unwanted
|
||||
if not options.verbose:
|
||||
sys.stdout = open(os.devnull,"w")
|
||||
sys.stderr = open(os.devnull,"w")
|
||||
|
||||
## Compute Paths
|
||||
outpath = os.path.expanduser(options.outpath)
|
||||
inpath = os.path.expanduser(options.inpath)
|
||||
|
||||
## Do the work!
|
||||
if options.render:
|
||||
ret = subprocess.call(["python", os.path.join(inpath, "render_svg.py"), "-i", inpath, "-o", os.path.join(outpath, "render")], stdout=sys.stdout, stderr=sys.stderr)
|
||||
if ret != 0:
|
||||
print("An error has occurred. Aborting.")
|
||||
exit(1)
|
||||
|
||||
if options.optimize:
|
||||
print("Optimizing PNGs with pngcrush...")
|
||||
for png in glob.glob(os.path.join("render", "*.png")):
|
||||
#print("pngcrushing - {0}".format(png))
|
||||
ret = subprocess.call(["pngcrush", "-q", "-l 9", "-brute", png, "temp.png"], stdout=sys.stdout, stderr=sys.stderr)
|
||||
if ret != 0:
|
||||
print("An error has occurred. Aborting.")
|
||||
exit(1)
|
||||
os.remove(png)
|
||||
os.rename("temp.png", png)
|
||||
|
||||
if options.package:
|
||||
ret = subprocess.call(["python", os.path.join(inpath, "create_resource_dat.py"), "-i", os.path.join(outpath, "render"), "-o", "resource.dat"], stdout=sys.stdout, stderr=sys.stderr)
|
||||
if ret != 0:
|
||||
print("An error has occurred. Aborting.")
|
||||
exit(1)
|
220
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/render_svg.py
vendored
Normal file
220
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/render_svg.py
vendored
Normal file
@ -0,0 +1,220 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import print_function
|
||||
from __future__ import with_statement
|
||||
|
||||
|
||||
import os
|
||||
import math
|
||||
from xml.dom.minidom import parse
|
||||
from optparse import OptionParser
|
||||
import scalergba
|
||||
|
||||
try:
|
||||
import rsvg
|
||||
import cairo
|
||||
except ImportError as e:
|
||||
print("Rendering SVG resources requires PyGTK. Exiting...")
|
||||
exit(1)
|
||||
|
||||
cursorList = {
|
||||
"cursor_up": ["circleOuter"],
|
||||
"cursor_poised": ["circleOuter", "circleInnerOpen"],
|
||||
"cursor_clicked": ["circleOuter", "circleInnerClosed"],
|
||||
"cursor_disabled": ["cross"],
|
||||
|
||||
"cursor_open": ["circleOuter", "arrowTranslucentUpper", "arrowTranslucentLower"],
|
||||
"cursor_grab": ["circleOuter", "circleInnerOpen", "arrowTranslucentUpper", "arrowTranslucentLower"],
|
||||
"cursor_updown_open": ["circleOuter", "circleInnerOpen", "arrowTranslucentUpper", "arrowTranslucentLower"],
|
||||
"cursor_updown_closed": ["circleOuter", "circleInnerClosed", "arrowOpaqueUpper", "arrowOpaqueLower"],
|
||||
|
||||
"cursor_leftright_open": ["circleOuter", "circleInnerOpen", "arrowTranslucentLeft", "arrowTranslucentRight"],
|
||||
"cursor_leftright_closed": ["circleOuter", "circleInnerClosed", "arrowOpaqueLeft", "arrowOpaqueRight"],
|
||||
|
||||
"cursor_4way_open": ["circleOuter", "circleInnerOpen", "arrowTranslucentUpper", "arrowTranslucentRight", "arrowTranslucentLower", "arrowTranslucentLeft"],
|
||||
"cursor_4way_closed": ["circleOuter", "circleInnerClosed", "arrowOpaqueUpper", "arrowOpaqueRight", "arrowOpaqueLower", "arrowOpaqueLeft"],
|
||||
|
||||
"cursor_upward": ["circleOuter", "arrowOpaqueUpper"],
|
||||
"cursor_right": ["circleOuter", "arrowOpaqueRight"],
|
||||
"cursor_down": ["circleOuter", "arrowOpaqueLower"],
|
||||
"cursor_left": ["circleOuter", "arrowOpaqueLeft"],
|
||||
|
||||
"cursor_book": ["circleOuter", "book"],
|
||||
"cursor_book_poised": ["circleOuter", "circleInnerOpen", "book"],
|
||||
"cursor_book_clicked": ["circleOuter", "circleInnerClosed", "book"],
|
||||
}
|
||||
cursorOffsetList = {
|
||||
"cursor_book": [7, 7],
|
||||
"cursor_book_poised": [7, 7],
|
||||
"cursor_book_clicked": [7, 7]
|
||||
}
|
||||
|
||||
textList = {
|
||||
"xLoading_Linking_Text": ["background", "circles", "textLinking"],
|
||||
"xLoading_Updating_Text": ["background", "circles", "textUpdating"]
|
||||
}
|
||||
|
||||
voiceList = {
|
||||
"ui_speaker": ["speakerGrille", "speakerIndicator", "speakerOuterRing"],
|
||||
"ui_microphone": ["microphoneGrille", "microphoneIndicator", "microphoneOuterRing"]
|
||||
}
|
||||
|
||||
def enable_only_layers(layerlist, layers):
|
||||
for layer in layers:
|
||||
if layer in layerlist:
|
||||
layers[layer].setAttribute("style","")
|
||||
else:
|
||||
layers[layer].setAttribute("style","display:none")
|
||||
# sanity check
|
||||
for layer in layerlist:
|
||||
if layer not in layers:
|
||||
print("warning: unknown layer", layer)
|
||||
|
||||
def shift_all_layers(layers, shiftx, shifty):
|
||||
# note: this assumes that all layers start out with no transform of their own
|
||||
for layer in layers:
|
||||
layers[layer].setAttribute("transform", "translate(%g,%g)" % (shiftx, shifty))
|
||||
|
||||
def get_layers_from_svg(svgData):
|
||||
inkscapeNS = "http://www.inkscape.org/namespaces/inkscape"
|
||||
layers = {}
|
||||
|
||||
groups = svgData.getElementsByTagName("g")
|
||||
for group in groups:
|
||||
if group.getAttributeNS(inkscapeNS,"groupmode") == "layer":
|
||||
layers[group.getAttribute("id")] = group
|
||||
|
||||
return layers
|
||||
|
||||
def render_cursors(inpath, outpath):
|
||||
scalefactor = 4
|
||||
with open(os.path.join(inpath,"Cursor_Base.svg"), "r") as svgFile:
|
||||
cursorSVG = parse(svgFile)
|
||||
layers = get_layers_from_svg(cursorSVG)
|
||||
svgwidth = float(cursorSVG.documentElement.getAttribute("width"))
|
||||
svgheight = float(cursorSVG.documentElement.getAttribute("height"))
|
||||
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, int(math.ceil(scalefactor*svgwidth)), int(math.ceil(scalefactor*svgheight)))
|
||||
|
||||
for cursor in cursorList:
|
||||
ctx = cairo.Context(surface)
|
||||
ctx.save()
|
||||
ctx.set_operator(cairo.OPERATOR_CLEAR)
|
||||
ctx.paint()
|
||||
ctx.restore()
|
||||
|
||||
enabledlayers = cursorList[cursor]
|
||||
enabledlayers = enabledlayers + [l + "Shadow" for l in enabledlayers]
|
||||
enable_only_layers(enabledlayers, layers)
|
||||
|
||||
shift_all_layers(layers, *cursorOffsetList.get(cursor, [0, 0]))
|
||||
|
||||
svg = rsvg.Handle(data=cursorSVG.toxml())
|
||||
ctx.scale(scalefactor, scalefactor)
|
||||
svg.render_cairo(ctx)
|
||||
|
||||
outfile = os.path.join(outpath, cursor + ".png")
|
||||
surface.write_to_png(outfile)
|
||||
scalergba.scale(outfile, outfile, scalefactor)
|
||||
|
||||
def render_loading_books(inpath, outpath):
|
||||
resSize = {"width":256, "height":256}
|
||||
with open(os.path.join(inpath,"Linking_Book.svg"), "r") as svgFile:
|
||||
bookSVG = parse(svgFile)
|
||||
layers = get_layers_from_svg(bookSVG)
|
||||
ratioW = resSize["width"] / float(bookSVG.documentElement.getAttribute("width"))
|
||||
ratioH = resSize["height"] / float(bookSVG.documentElement.getAttribute("height"))
|
||||
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, resSize["width"], resSize["height"])
|
||||
|
||||
for angle in range(0, 18):
|
||||
ctx = cairo.Context(surface)
|
||||
|
||||
# Draw Book and Black Background
|
||||
enable_only_layers(["background", "book"],layers)
|
||||
svg = rsvg.Handle(data=bookSVG.toxml())
|
||||
ctx.save()
|
||||
ctx.scale(ratioW, ratioH)
|
||||
svg.render_cairo(ctx)
|
||||
ctx.restore()
|
||||
|
||||
# Draw Circles at appropriate angle
|
||||
enable_only_layers(["circles"],layers)
|
||||
svg = rsvg.Handle(data=bookSVG.toxml())
|
||||
ctx.translate(resSize["height"] / 2, resSize["width"] / 2)
|
||||
ctx.rotate(math.radians(angle*(5)))
|
||||
ctx.translate(-resSize["width"] / 2, -resSize["height"] / 2)
|
||||
ctx.scale(ratioW, ratioH)
|
||||
svg.render_cairo(ctx)
|
||||
|
||||
surface.write_to_png(os.path.join(outpath, "xLoading_Linking.{0:02}.png".format(angle)))
|
||||
|
||||
def render_loading_text(inpath, outpath):
|
||||
resSize = {"width":192, "height":41}
|
||||
with open(os.path.join(inpath,"Loading_Text_rasterfont.svg"), "r") as svgFile:
|
||||
textSVG = parse(svgFile)
|
||||
layers = get_layers_from_svg(textSVG)
|
||||
ratioW = resSize["width"] / float(textSVG.documentElement.getAttribute("width"))
|
||||
ratioH = resSize["height"] / float(textSVG.documentElement.getAttribute("height"))
|
||||
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, resSize["width"], resSize["height"])
|
||||
|
||||
for textEntry in textList:
|
||||
ctx = cairo.Context(surface)
|
||||
ctx.save()
|
||||
ctx.set_operator(cairo.OPERATOR_CLEAR)
|
||||
ctx.paint()
|
||||
ctx.restore()
|
||||
enable_only_layers(textList[textEntry], layers)
|
||||
svg = rsvg.Handle(data=textSVG.toxml())
|
||||
ctx.scale(ratioW, ratioH)
|
||||
svg.render_cairo(ctx)
|
||||
surface.write_to_png(os.path.join(outpath, textEntry + ".png"))
|
||||
|
||||
def render_voice_icons(inpath, outpath):
|
||||
resSize = {"width":32, "height":32}
|
||||
with open(os.path.join(inpath,"Voice_Chat.svg"), "r") as svgFile:
|
||||
uiSVG = parse(svgFile)
|
||||
layers = get_layers_from_svg(uiSVG)
|
||||
ratioW = resSize["width"] / float(uiSVG.documentElement.getAttribute("width"))
|
||||
ratioH = resSize["height"] / float(uiSVG.documentElement.getAttribute("height"))
|
||||
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, resSize["width"], resSize["height"])
|
||||
|
||||
for voiceUI in voiceList:
|
||||
ctx = cairo.Context(surface)
|
||||
ctx.save()
|
||||
ctx.set_operator(cairo.OPERATOR_CLEAR)
|
||||
ctx.paint()
|
||||
ctx.restore()
|
||||
|
||||
enable_only_layers(voiceList[voiceUI], layers)
|
||||
|
||||
svg = rsvg.Handle(data=uiSVG.toxml())
|
||||
ctx.scale(ratioW, ratioH)
|
||||
svg.render_cairo(ctx)
|
||||
|
||||
surface.write_to_png(os.path.join(outpath, voiceUI + ".png"))
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = OptionParser(usage="usage: %prog [options]")
|
||||
parser.add_option("-q", "--quiet", dest="verbose", default=True, action="store_false", help="Don't print status messages")
|
||||
parser.add_option("-o", "--outpath", dest="outpath", default="./out", help="Sets output path for rendered images")
|
||||
parser.add_option("-i", "--inpath", dest="inpath", default=".", help="Sets input path for SVG files")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
## Send output to OS's null if unwanted
|
||||
if not options.verbose:
|
||||
sys.stdout = open(os.devnull,"w")
|
||||
sys.stderr = open(os.devnull,"w")
|
||||
|
||||
## Compute Paths
|
||||
outpath = os.path.expanduser(options.outpath)
|
||||
inpath = os.path.expanduser(options.inpath)
|
||||
|
||||
if not os.path.exists(outpath):
|
||||
os.mkdir(outpath)
|
||||
|
||||
## Do the work!
|
||||
print("Rendering SVGs...")
|
||||
render_cursors(inpath, outpath)
|
||||
render_loading_books(inpath, outpath)
|
||||
render_loading_text(inpath, outpath)
|
||||
render_voice_icons(inpath, outpath)
|
BIN
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/resource.dat
vendored
Normal file
BIN
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/resource.dat
vendored
Normal file
Binary file not shown.
180
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/scalergba.py
vendored
Executable file
180
MOULOpenSourceClientPlugin/Plasma20/Sources/Plasma/Apps/plClient/external/scalergba.py
vendored
Executable file
@ -0,0 +1,180 @@
|
||||
#!/opt/local/bin/python2.7
|
||||
|
||||
# Christian Walther 2011-07-20
|
||||
# Public Domain
|
||||
|
||||
# scalergba.py <input> <factor> <output>
|
||||
#
|
||||
# Scale image <input> down by <factor> (integer) and save as PNG file <output>.
|
||||
#
|
||||
# - Taking into account that adding (averaging) colors must be done in a linear
|
||||
# color space, not with the power-law-encoded values stored in the files.
|
||||
# (I know of no image processing application that does this right.)
|
||||
# Gamma is hardcoded to 2.2.
|
||||
# - Assuming that alpha compositing will be done directly with the raw
|
||||
# power-law-encoded values rather than in the linear color space that would
|
||||
# be correct, which is the way almost all software will do it, in particular
|
||||
# OpenGL/Direct3D. (Photoshop has an option to do it right, maybe other
|
||||
# high-end image processing software too.)
|
||||
|
||||
|
||||
from __future__ import division
|
||||
import sys
|
||||
import math
|
||||
try:
|
||||
import Image
|
||||
except ImportError:
|
||||
print("Scaling requires the Python Imaging Library.")
|
||||
raise
|
||||
|
||||
|
||||
gamma = 2.2
|
||||
|
||||
|
||||
def add(a, b):
|
||||
for i, y in enumerate(b):
|
||||
a[i] += y
|
||||
|
||||
def sub(a, b):
|
||||
for i, y in enumerate(b):
|
||||
a[i] -= y
|
||||
|
||||
def subsc(a, b):
|
||||
for i in range(3):
|
||||
a[i] -= b
|
||||
|
||||
def mul(a, b):
|
||||
for i, y in enumerate(b):
|
||||
a[i] *= y
|
||||
|
||||
def mulsc(a, b):
|
||||
for i in range(3):
|
||||
a[i] *= b
|
||||
|
||||
def pixel2linear(p):
|
||||
l = [math.pow(p[i]/255.0, gamma) for i in range(3)]
|
||||
if len(p) == 4:
|
||||
l.append(p[3]/255.0)
|
||||
else:
|
||||
l.append(1.0)
|
||||
return l
|
||||
|
||||
def pixel2nonlinear(p):
|
||||
return [p[i]/255.0 for i in range(3)], p[3]/255.0 if len(p) > 3 else 1.0
|
||||
|
||||
def clamp(x):
|
||||
return 255 if x > 255 else 0 if x < 0 else x
|
||||
|
||||
def linear2pixel(l):
|
||||
p = [clamp(int(math.floor(math.pow(l[i], 1.0/gamma)*255 + 0.5))) for i in range(3)]
|
||||
if len(l) == 4:
|
||||
p.append(clamp(int(math.floor(l[3]*255 + 0.5))))
|
||||
return p
|
||||
|
||||
def nonlinear2pixel(l):
|
||||
return [clamp(int(math.floor(c*255 + 0.5))) for c in l]
|
||||
|
||||
|
||||
def scale(infilename, outfilename, factor):
|
||||
inimg = Image.open(infilename)
|
||||
inpix = inimg.load()
|
||||
|
||||
outw = inimg.size[0] // factor
|
||||
outh = inimg.size[1] // factor
|
||||
outimg = Image.new("RGBA", (outw, outh), None)
|
||||
outpix = outimg.load()
|
||||
|
||||
for oy in range(outh):
|
||||
for ox in range(outw):
|
||||
# scale down in linear color space to get a tentative color to compute the fixed points from
|
||||
sum = [0.0, 0.0, 0.0, 0.0]
|
||||
for j in range(factor):
|
||||
for i in range(factor):
|
||||
l = pixel2linear(inpix[ox*factor+i, oy*factor+j])
|
||||
mulsc(l, l[3])
|
||||
add(sum, l)
|
||||
if sum[3] != 0:
|
||||
mulsc(sum, 1.0/sum[3])
|
||||
sum[3] /= factor*factor
|
||||
|
||||
# determine the two fixed points (background colors on which we will achieve the correct result) per component
|
||||
# I used to use constant black and white for that, but later realized that that results in a large error (result too light) on midtones and I can do better by distributing the error more evenly. The dependency of the fixed points on the foreground color is empirical magic that has been experimentally determined to produce visually pleasing results.
|
||||
fix1 = [0.04*sum[i] for i in range(3)]
|
||||
fix2 = [0.4 + 0.6*sum[i] for i in range(3)]
|
||||
fix1n = [math.pow(l, 1.0/gamma) for l in fix1]
|
||||
fix2n = [math.pow(l, 1.0/gamma) for l in fix2]
|
||||
|
||||
# composite against the fixed points in nonlinear color space as that's what the image expects (only matters in areas of medium alpha), then scale down in linear color space again
|
||||
f1c = [0.0, 0.0, 0.0]
|
||||
for j in range(factor):
|
||||
for i in range(factor):
|
||||
c, a = pixel2nonlinear(inpix[ox*factor+i, oy*factor+j])
|
||||
mulsc(c, a)
|
||||
f = fix1n[:]
|
||||
mulsc(f, 1.0 - a)
|
||||
add(c, f)
|
||||
add(f1c, [math.pow(p, gamma) for p in c])
|
||||
mulsc(f1c, 1.0/(factor*factor))
|
||||
|
||||
f2c = [0.0, 0.0, 0.0]
|
||||
for j in range(factor):
|
||||
for i in range(factor):
|
||||
c, a = pixel2nonlinear(inpix[ox*factor+i, oy*factor+j])
|
||||
mulsc(c, a)
|
||||
f = fix2n[:]
|
||||
mulsc(f, 1.0 - a)
|
||||
add(c, f)
|
||||
add(f2c, [math.pow(p, gamma) for p in c])
|
||||
mulsc(f2c, 1.0/(factor*factor))
|
||||
|
||||
# go back to gamma-encoded color space, assuming that alpha blending will be done in that
|
||||
f1cn = [math.pow(l, 1.0/gamma) for l in f1c]
|
||||
f2cn = [math.pow(l, 1.0/gamma) for l in f2c]
|
||||
|
||||
# compute color and alpha
|
||||
# This gives us three alphas, in general different, but we can only output one - the best thing to do with them I can think of is to average them together and leave the color components alone, this ensures that the alpha deviation does not affect the case where background color equals foreground color.
|
||||
a = [1.0 - (f2cn[i] - f1cn[i])/(fix2n[i] - fix1n[i]) for i in range(3)]
|
||||
c = [(f1cn[i] - (1.0-a[i])*fix1n[i])/a[i] if math.floor(a[i]*255 + 0.5) > 0 else 0.0 for i in range(3)]
|
||||
outpix[ox, oy] = tuple(nonlinear2pixel(c + [(a[0] + a[1] + a[2])/3]))
|
||||
|
||||
# collect pixels that ended up with alpha 0
|
||||
transparent = [0]*outh*outw
|
||||
for oy in range(outh):
|
||||
for ox in range(outw):
|
||||
if outpix[ox, oy][3] == 0:
|
||||
transparent[oy*outw + ox] = 1
|
||||
|
||||
# expand neighboring color values from nonzero-alpha pixels into the zero-alpha region twice, so that bilinear interpolation cannot bleed the arbitrary background color (black here) from zero-alpha into nonzero-alpha territory
|
||||
for i in range(2):
|
||||
transp = transparent[:]
|
||||
for oy in range(outh):
|
||||
for ox in range(outw):
|
||||
if transp[oy*outw + ox]:
|
||||
count = 0
|
||||
sum = [0, 0, 0]
|
||||
if ox > 0:
|
||||
if not transp[oy*outw + ox-1]:
|
||||
add(sum, outpix[ox-1, oy][0:3])
|
||||
count += 1
|
||||
if ox < outw-1:
|
||||
if not transp[oy*outw + ox+1]:
|
||||
add(sum, outpix[ox+1, oy][0:3])
|
||||
count += 1
|
||||
if oy > 0:
|
||||
if not transp[(oy-1)*outw + ox]:
|
||||
add(sum, outpix[ox, oy-1][0:3])
|
||||
count += 1
|
||||
if oy < outh-1:
|
||||
if not transp[(oy+1)*outw + ox]:
|
||||
add(sum, outpix[ox, oy+1][0:3])
|
||||
count += 1
|
||||
if count > 0:
|
||||
mulsc(sum, 1.0/count)
|
||||
outpix[ox, oy] = tuple(clamp(int(math.floor(c + 0.5))) for c in sum) + (0,)
|
||||
transparent[oy*outw + ox] = 0
|
||||
|
||||
outimg.save(outfilename, "PNG")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
scale(sys.argv[1], sys.argv[3], int(sys.argv[2]))
|
@ -63,29 +63,6 @@ END
|
||||
// Bitmap
|
||||
//
|
||||
|
||||
IDB_CURSOR_UP BITMAP "cursor_up.bmp"
|
||||
IDB_CURSOR_DOWN BITMAP "cursor_down.bmp"
|
||||
IDB_CURSOR_LEFT BITMAP "cursor_right.bmp"
|
||||
IDB_CURSOR_RIGHT BITMAP "cursor_left.bmp"
|
||||
IDB_CURSOR_OPEN BITMAP "cursor_open.bmp"
|
||||
IDB_CURSOR_GRAB BITMAP "cursor_grab.bmp"
|
||||
IDB_CURSOR_CLICKED BITMAP "cursor_clicked.bmp"
|
||||
IDB_CURSOR_POISED BITMAP "cursor_poised.bmp"
|
||||
IDB_CURSOR_ARROW BITMAP "cursor_u.bmp"
|
||||
IDB_CURSOR_4WAYOPEN BITMAP "bitmap1.bmp"
|
||||
IDB_CURSOR_UPDOWNCLOSED BITMAP "bmp00001.bmp"
|
||||
IDB_CURSOR_UPDOWNOPEN BITMAP "bitmap2.bmp"
|
||||
IDB_CURSOR_4WAYCLOSED BITMAP "bitmap3.bmp"
|
||||
IDB_CURSOR_LEFTRIGHTCLOSED BITMAP "bmp00003.bmp"
|
||||
IDB_CURSOR_LEFTRIGHTOPEN BITMAP "bmp00002.bmp"
|
||||
IDB_MICROPHONE BITMAP "Microphone.bmp"
|
||||
IDB_TALKING BITMAP "Speaker.bmp"
|
||||
IDB_CURSOR_BOOK_HIGHLIGHT BITMAP "book_hig.bmp"
|
||||
IDB_CURSOR_BOOK BITMAP "book.bmp"
|
||||
IDB_CURSOR_BOOK_CLICKED BITMAP "book_cli.bmp"
|
||||
IDB_CURSOR_DISABLED BITMAP "cursor_disabled.bmp"
|
||||
IDB_CURSOR_HAND BITMAP "bmp00005.bmp"
|
||||
IDB_CURSOR_UPWARD BITMAP "cursor_upward.bmp"
|
||||
IDB_BANNER BITMAP "banner.bmp"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
@ -327,32 +304,6 @@ END
|
||||
//
|
||||
|
||||
IDR_CNSL1 CNSL "cnsl1.bin"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// JPEG
|
||||
//
|
||||
|
||||
IDR_LOADING_01 JPEG "xLoading_Linking.01.jpg"
|
||||
IDR_LOADING_02 JPEG "xLoading_Linking.02.jpg"
|
||||
IDR_LOADING_03 JPEG "xLoading_Linking.03.jpg"
|
||||
IDR_LOADING_04 JPEG "xLoading_Linking.04.jpg"
|
||||
IDR_LOADING_05 JPEG "xLoading_Linking.05.jpg"
|
||||
IDR_LOADING_06 JPEG "xLoading_Linking.06.jpg"
|
||||
IDR_LOADING_07 JPEG "xLoading_Linking.07.jpg"
|
||||
IDR_LOADING_08 JPEG "xLoading_Linking.08.jpg"
|
||||
IDR_LOADING_09 JPEG "xLoading_Linking.09.jpg"
|
||||
IDR_LOADING_10 JPEG "xLoading_Linking.10.jpg"
|
||||
IDR_LOADING_11 JPEG "xLoading_Linking.11.jpg"
|
||||
IDR_LOADING_12 JPEG "xLoading_Linking.12.jpg"
|
||||
IDR_LOADING_13 JPEG "xLoading_Linking.13.jpg"
|
||||
IDR_LOADING_14 JPEG "xLoading_Linking.14.jpg"
|
||||
IDR_LOADING_15 JPEG "xLoading_Linking.15.jpg"
|
||||
IDR_LOADING_16 JPEG "xLoading_Linking.16.jpg"
|
||||
IDR_LOADING_17 JPEG "xLoading_Linking.17.jpg"
|
||||
IDR_LOADING_18 JPEG "xLoading_Linking.18.jpg"
|
||||
IDR_LOADING_LINKTEXT JPEG "xLoading_Linking_Text.jpg"
|
||||
IDR_LOADING_UPDATETEXT JPEG "xLoading_Updating_Text.jpg"
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
@ -2,33 +2,10 @@
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by plClient.rc
|
||||
//
|
||||
#define IDB_CURSOR_UP 112
|
||||
#define IDB_CURSOR_DOWN 113
|
||||
#define IDB_CURSOR_RIGHT 114
|
||||
#define IDB_CURSOR_LEFT 115
|
||||
#define IDB_CURSOR_OPEN 116
|
||||
#define IDB_CURSOR_GRAB 117
|
||||
#define IDB_CURSOR_CLICKED 118
|
||||
#define IDB_CURSOR_POISED 119
|
||||
#define IDB_MICROPHONE 121
|
||||
#define IDB_TALKING 122
|
||||
#define IDB_CURSOR_ARROW 123
|
||||
#define IDB_CURSOR_4WAYOPEN 124
|
||||
#define IDB_CURSOR_UPDOWNCLOSED 125
|
||||
#define IDB_CURSOR_UPDOWNOPEN 126
|
||||
#define IDB_CURSOR_4WAYCLOSED 127
|
||||
#define IDB_CURSOR_LEFTRIGHTCLOSED 128
|
||||
#define IDB_CURSOR_LEFTRIGHTOPEN 129
|
||||
#define IDI_ICON_DIRT 135
|
||||
#define IDD_LOADING 136
|
||||
#define IDD_EXCEPTION 138
|
||||
#define IDR_CNSL1 139
|
||||
#define IDB_CURSOR_BOOK_HIGHLIGHT 141
|
||||
#define IDB_CURSOR_BOOK 142
|
||||
#define IDB_CURSOR_BOOK_CLICKED 143
|
||||
#define IDB_CURSOR_DISABLED 144
|
||||
#define IDB_CURSOR_HAND 145
|
||||
#define IDB_CURSOR_UPWARD 147
|
||||
#define IDD_URUTAP_LOGIN 148
|
||||
#define IDD_URU_LOGIN 149
|
||||
#define IDB_BANNER 151
|
||||
@ -37,26 +14,6 @@
|
||||
#define IDD_URULOGIN_EULA 154
|
||||
#define IDD_AUTHFAILED 155
|
||||
#define IDD_AUTHENTICATING 156
|
||||
#define IDR_LOADING_01 177
|
||||
#define IDR_LOADING_02 178
|
||||
#define IDR_LOADING_03 179
|
||||
#define IDR_LOADING_04 180
|
||||
#define IDR_LOADING_05 181
|
||||
#define IDR_LOADING_06 182
|
||||
#define IDR_LOADING_07 183
|
||||
#define IDR_LOADING_08 184
|
||||
#define IDR_LOADING_09 185
|
||||
#define IDR_LOADING_10 186
|
||||
#define IDR_LOADING_11 187
|
||||
#define IDR_LOADING_12 188
|
||||
#define IDR_LOADING_13 189
|
||||
#define IDR_LOADING_14 190
|
||||
#define IDR_LOADING_15 191
|
||||
#define IDR_LOADING_16 192
|
||||
#define IDR_LOADING_17 193
|
||||
#define IDR_LOADING_18 194
|
||||
#define IDR_LOADING_LINKTEXT 195
|
||||
#define IDR_LOADING_UPDATETEXT 196
|
||||
#define IDC_CRASHINFO 1001
|
||||
#define IDC_COPY 1002
|
||||
#define IDC_MSG 1003
|
||||
|
@ -54,6 +54,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "hsStream.h"
|
||||
#include "hsUtils.h"
|
||||
#include "plClient.h"
|
||||
#include "../plClientResMgr/plClientResMgr.h"
|
||||
#include "../plNetClient/plNetClientMgr.h"
|
||||
#include "../plNetClient/plNetLinkingMgr.h"
|
||||
#include "../plInputCore/plInputManager.h"
|
||||
@ -774,6 +775,14 @@ bool InitClient( HWND hWnd )
|
||||
plResManager *resMgr = TRACKED_NEW plResManager;
|
||||
resMgr->SetDataPath("dat");
|
||||
hsgResMgr::Init(resMgr);
|
||||
|
||||
if(!plFileUtils::FileExists("resource.dat"))
|
||||
{
|
||||
hsMessageBox("Required file 'resource.dat' not found.", "Error", hsMessageBoxNormal);
|
||||
return false;
|
||||
}
|
||||
plClientResMgr::Instance().ILoadResources("resource.dat");
|
||||
|
||||
gClient = TRACKED_NEW plClient;
|
||||
if( gClient == nil )
|
||||
return false;
|
||||
|
@ -176,6 +176,13 @@ void pyImage::SaveAsJPEG(const wchar* fileName, UInt8 quality)
|
||||
plJPEG::Instance().WriteToFile( fileName, this->GetImage() );
|
||||
}
|
||||
|
||||
#include "../plGImage/plPNG.h"
|
||||
void pyImage::SaveAsPNG(const wchar* fileName)
|
||||
{
|
||||
|
||||
plPNG::Instance().WriteToFile( fileName, this->GetImage() );
|
||||
}
|
||||
|
||||
#include "hsResMgr.h"
|
||||
#include "../pnKeyedObject/plUoid.h"
|
||||
PyObject* pyImage::LoadJPEGFromDisk(const wchar* filename, UInt16 width, UInt16 height)
|
||||
|
@ -166,6 +166,7 @@ public:
|
||||
UInt32 GetWidth(); // returns the width of the image
|
||||
UInt32 GetHeight(); // returns the height of the image
|
||||
void SaveAsJPEG(const wchar* fileName, UInt8 quality = 75);
|
||||
void SaveAsPNG(const wchar* fileName);
|
||||
static PyObject* LoadJPEGFromDisk(const wchar* filename, UInt16 width, UInt16 height); // returns pyImage
|
||||
#endif
|
||||
};
|
||||
|
@ -174,6 +174,41 @@ PYTHON_METHOD_DEFINITION(ptImage, saveAsJPEG, args)
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
PYTHON_METHOD_DEFINITION(ptImage, saveAsPNG, args)
|
||||
{
|
||||
PyObject* filenameObj;
|
||||
if (!PyArg_ParseTuple(args, "O", &filenameObj))
|
||||
{
|
||||
PyErr_SetString(PyExc_TypeError, "saveAsPNG expects a string");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
|
||||
if (PyUnicode_Check(filenameObj))
|
||||
{
|
||||
int strLen = PyUnicode_GetSize(filenameObj);
|
||||
wchar_t* text = TRACKED_NEW wchar_t[strLen + 1];
|
||||
PyUnicode_AsWideChar((PyUnicodeObject*)filenameObj, text, strLen);
|
||||
text[strLen] = L'\0';
|
||||
self->fThis->SaveAsPNG(text);
|
||||
delete [] text;
|
||||
PYTHON_RETURN_NONE;
|
||||
}
|
||||
else if (PyString_Check(filenameObj))
|
||||
{
|
||||
// we'll allow this, just in case something goes weird
|
||||
char* text = PyString_AsString(filenameObj);
|
||||
wchar_t* wText = hsStringToWString(text);
|
||||
self->fThis->SaveAsPNG(wText);
|
||||
delete [] wText;
|
||||
PYTHON_RETURN_NONE;
|
||||
}
|
||||
else
|
||||
{
|
||||
PyErr_SetString(PyExc_TypeError, "saveAsPNG expects a string");
|
||||
PYTHON_RETURN_ERROR;
|
||||
}
|
||||
}
|
||||
#endif // BUILDING_PYPLASMA
|
||||
|
||||
PYTHON_START_METHODS_TABLE(ptImage)
|
||||
@ -183,6 +218,7 @@ PYTHON_START_METHODS_TABLE(ptImage)
|
||||
PYTHON_METHOD_NOARGS(ptImage, getWidth, "Returns the width of the image"),
|
||||
PYTHON_METHOD_NOARGS(ptImage, getHeight, "Returns the height of the image"),
|
||||
PYTHON_METHOD(ptImage, saveAsJPEG, "Params: filename,quality=75\nSaves this image to disk as a JPEG file"),
|
||||
PYTHON_METHOD(ptImage, saveAsPNG, "Params: filename\nSaves this image to disk as a PNG file"),
|
||||
#endif
|
||||
PYTHON_END_METHODS_TABLE;
|
||||
|
||||
|
@ -66,8 +66,8 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "../plPipeline/plDebugText.h"
|
||||
#include "../plStatusLog/plStatusLog.h"
|
||||
|
||||
#define MICROPHONE 121
|
||||
#define TALKING 122
|
||||
#define MICROPHONE "ui_microphone.png"
|
||||
#define TALKING "ui_speaker.png"
|
||||
#define NUM_CHANNELS 1
|
||||
#define VOICE_STOP_MS 2000
|
||||
#define MAX_DATA_SIZE 1024 * 4 // 4 KB
|
||||
@ -84,13 +84,13 @@ hsBool plVoicePlayer::fEnabled = true;
|
||||
plVoiceRecorder::plVoiceRecorder()
|
||||
{
|
||||
plPlateManager::Instance().CreatePlate( &fDisabledIcon );
|
||||
fDisabledIcon->CreateFromResource( MAKEINTRESOURCE( MICROPHONE ) );
|
||||
fDisabledIcon->CreateFromResource( MICROPHONE );
|
||||
fDisabledIcon->SetPosition(-0.90, -0.90);
|
||||
fDisabledIcon->SetSize(0.0675, 0.09);
|
||||
fDisabledIcon->SetVisible(false);
|
||||
|
||||
plPlateManager::Instance().CreatePlate( &fTalkIcon );
|
||||
fTalkIcon->CreateFromResource( MAKEINTRESOURCE( TALKING ) );
|
||||
fTalkIcon->CreateFromResource( TALKING );
|
||||
fTalkIcon->SetPosition(-0.9,-0.9);
|
||||
fTalkIcon->SetSize(0.0675, 0.09);
|
||||
fTalkIcon->SetVisible(false);
|
||||
@ -208,7 +208,7 @@ void plVoiceRecorder::DrawDisabledIcon(hsBool b)
|
||||
plPlateManager::Instance().CreatePlate( &fDisabledIcon );
|
||||
if (fDisabledIcon)
|
||||
{
|
||||
fDisabledIcon->CreateFromResource( MAKEINTRESOURCE( MICROPHONE ) );
|
||||
fDisabledIcon->CreateFromResource( MICROPHONE );
|
||||
fDisabledIcon->SetPosition(-0.90, -0.90);
|
||||
fDisabledIcon->SetSize(0.0675, 0.09);
|
||||
fDisabledIcon->SetVisible(false);
|
||||
@ -225,7 +225,7 @@ void plVoiceRecorder::DrawTalkIcon(hsBool b)
|
||||
{
|
||||
plPlateManager::Instance().CreatePlate( &fTalkIcon );
|
||||
if (fTalkIcon)
|
||||
{ fTalkIcon->CreateFromResource( MAKEINTRESOURCE( TALKING ) );
|
||||
{ fTalkIcon->CreateFromResource( TALKING );
|
||||
fTalkIcon->SetPosition(-0.9,-0.9);
|
||||
fTalkIcon->SetSize(0.0675, 0.09);
|
||||
fTalkIcon->SetVisible(false);
|
||||
|
@ -0,0 +1,152 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
|
||||
#include "hsTypes.h"
|
||||
#include "hsUtils.h"
|
||||
#include "hsStream.h"
|
||||
#include "hsResMgr.h"
|
||||
#include "plJPEG/plJPEG.h"
|
||||
#include "plGImage/plPNG.h"
|
||||
#include "plGImage/plMipmap.h"
|
||||
|
||||
#include "plClientResMgr.h"
|
||||
|
||||
|
||||
//// Singleton Instance ///////////////////////////////////////////////////////
|
||||
|
||||
plClientResMgr& plClientResMgr::Instance(void)
|
||||
{
|
||||
static plClientResMgr theInstance;
|
||||
return theInstance;
|
||||
}
|
||||
|
||||
plClientResMgr::plClientResMgr()
|
||||
{
|
||||
this->ClientResources = TRACKED_NEW std::map<std::string, plMipmap*>;
|
||||
}
|
||||
|
||||
plClientResMgr::~plClientResMgr()
|
||||
{
|
||||
if (this->ClientResources) {
|
||||
std::map<std::string, plMipmap*>::iterator it;
|
||||
|
||||
for (it = this->ClientResources->begin(); it != this->ClientResources->end(); ++it) {
|
||||
if (it->second)
|
||||
it->second->UnRef();
|
||||
}
|
||||
|
||||
delete this->ClientResources;
|
||||
}
|
||||
}
|
||||
|
||||
void plClientResMgr::ILoadResources(const char* resfile)
|
||||
{
|
||||
if (!resfile) {
|
||||
return;
|
||||
}
|
||||
|
||||
wchar* wFilename = hsStringToWString(resfile);
|
||||
hsUNIXStream in;
|
||||
|
||||
if (in.Open(wFilename, L"rb")) {
|
||||
UInt32 header = in.ReadSwap32();
|
||||
UInt32 version = in.ReadSwap32();
|
||||
UInt32 num_resources = 0;
|
||||
|
||||
switch (version) {
|
||||
case 1:
|
||||
num_resources = in.ReadSwap32();
|
||||
|
||||
for (int i = 0; i < num_resources; i++) {
|
||||
plMipmap* res_data = NULL;
|
||||
UInt32 res_size = 0;
|
||||
char* tmp_name = in.ReadSafeStringLong();
|
||||
std::string res_name = std::string(tmp_name);
|
||||
std::string res_type = res_name.substr(res_name.length() - 4, 4);
|
||||
delete tmp_name;
|
||||
|
||||
// Version 1 doesn't encode format, so we'll try some simple
|
||||
// extension sniffing
|
||||
if (res_type == ".png") {
|
||||
// Read resource stream size, but the PNG has that info in the header
|
||||
// so it's not needed
|
||||
res_size = in.ReadSwap32();
|
||||
res_data = plPNG::Instance().ReadFromStream(&in);
|
||||
} else if (res_type == ".jpg") {
|
||||
// Don't read resource stream size, as plJPEG's reader will need it
|
||||
res_data = plJPEG::Instance().ReadFromStream(&in);
|
||||
} else {
|
||||
// Original Myst5 format only is known to support Targa,
|
||||
// so default fallback is targa
|
||||
// TODO - Add plTarga::ReadFromStream()
|
||||
// for now, just skip the unknown resource and put NULL into the map
|
||||
res_size = in.ReadSwap32();
|
||||
in.Skip(res_size);
|
||||
}
|
||||
|
||||
(*this->ClientResources)[res_name] = res_data;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
in.Close();
|
||||
}
|
||||
|
||||
delete wFilename;
|
||||
}
|
||||
|
||||
plMipmap* plClientResMgr::getResource(const char* resname)
|
||||
{
|
||||
plMipmap* resmipmap = NULL;
|
||||
std::map<std::string, plMipmap*>::iterator it = this->ClientResources->find(resname);
|
||||
|
||||
if (it != this->ClientResources->end()) {
|
||||
resmipmap = it->second;
|
||||
} else {
|
||||
hsAssert(resmipmap, "Unknown client resource requested.");
|
||||
}
|
||||
|
||||
return resmipmap;
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
|
||||
#ifndef _plClientResMgr_h
|
||||
#define _plClientResMgr_h
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
class plMipmap;
|
||||
|
||||
class plClientResMgr {
|
||||
protected:
|
||||
std::map<std::string, plMipmap*>* ClientResources;
|
||||
|
||||
public:
|
||||
plClientResMgr();
|
||||
~plClientResMgr();
|
||||
|
||||
void ILoadResources(const char* resfile);
|
||||
|
||||
plMipmap* getResource(const char* resname);
|
||||
|
||||
static plClientResMgr& Instance(void);
|
||||
};
|
||||
|
||||
#endif // _plClientResMgr_
|
@ -0,0 +1,270 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
|
||||
#include "hsTypes.h"
|
||||
#include "hsStream.h"
|
||||
#include "hsExceptions.h"
|
||||
#include "hsUtils.h"
|
||||
#include "plPNG.h"
|
||||
#include "../plGImage/plMipmap.h"
|
||||
|
||||
#include <png.h>
|
||||
#define PNGSIGSIZE 8
|
||||
|
||||
// Custom functions to read and write data from or to an hsStream
|
||||
// used by libPNG's respective functions
|
||||
void pngReadDelegate(png_structp png_ptr, png_bytep png_data, png_size_t length)
|
||||
{
|
||||
hsStream* inStream = (hsStream*)png_get_io_ptr(png_ptr);
|
||||
inStream->Read(length, (UInt8*)png_data);
|
||||
}
|
||||
|
||||
void pngWriteDelegate(png_structp png_ptr, png_bytep png_data, png_size_t length)
|
||||
{
|
||||
hsStream* outStream = (hsStream*)png_get_io_ptr(png_ptr);
|
||||
outStream->Write(length, (UInt8*)png_data);
|
||||
}
|
||||
|
||||
//// Singleton Instance ///////////////////////////////////////////////////////
|
||||
|
||||
plPNG& plPNG::Instance(void)
|
||||
{
|
||||
static plPNG theInstance;
|
||||
return theInstance;
|
||||
}
|
||||
|
||||
//// IRead ////////////////////////////////////////////////////////////////////
|
||||
// Given an open hsStream, reads the PNG data off of the
|
||||
// stream and decodes it into a new plMipmap. The mipmap's buffer ends up
|
||||
// being a packed RGBA buffer.
|
||||
// Returns a pointer to the new mipmap if successful, NULL otherwise.
|
||||
|
||||
plMipmap* plPNG::IRead(hsStream* inStream)
|
||||
{
|
||||
plMipmap* newMipmap = NULL;
|
||||
png_structp png_ptr;
|
||||
png_infop info_ptr;
|
||||
png_infop end_info;
|
||||
|
||||
try {
|
||||
// Check PNG Signature
|
||||
png_byte sig[PNGSIGSIZE];
|
||||
inStream->Read8Bytes((char*) sig);
|
||||
|
||||
if (!png_sig_cmp(sig, 0, PNGSIGSIZE)) {
|
||||
// Allocate required structs
|
||||
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
||||
|
||||
if (!png_ptr) {
|
||||
throw(false);
|
||||
}
|
||||
|
||||
info_ptr = png_create_info_struct(png_ptr);
|
||||
|
||||
if (!info_ptr) {
|
||||
png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
|
||||
throw(false);
|
||||
}
|
||||
|
||||
end_info = png_create_info_struct(png_ptr);
|
||||
|
||||
if (!end_info) {
|
||||
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
|
||||
throw(false);
|
||||
}
|
||||
|
||||
// Assign delegate function for reading from hsStream
|
||||
png_set_read_fn(png_ptr, (png_voidp)inStream, pngReadDelegate);
|
||||
// Get PNG Header information
|
||||
png_set_sig_bytes(png_ptr, PNGSIGSIZE);
|
||||
png_read_info(png_ptr, info_ptr);
|
||||
png_uint_32 imgWidth = png_get_image_width(png_ptr, info_ptr);
|
||||
png_uint_32 imgHeight = png_get_image_height(png_ptr, info_ptr);
|
||||
png_uint_32 bitdepth = png_get_bit_depth(png_ptr, info_ptr);
|
||||
png_uint_32 channels = png_get_channels(png_ptr, info_ptr);
|
||||
png_uint_32 color_type = png_get_color_type(png_ptr, info_ptr);
|
||||
|
||||
// Convert images to RGB color space
|
||||
switch (color_type) {
|
||||
case PNG_COLOR_TYPE_PALETTE:
|
||||
png_set_palette_to_rgb(png_ptr);
|
||||
channels = 3;
|
||||
break;
|
||||
case PNG_COLOR_TYPE_GRAY:
|
||||
|
||||
if (bitdepth < 8) {
|
||||
png_set_expand_gray_1_2_4_to_8(png_ptr);
|
||||
}
|
||||
|
||||
bitdepth = 8;
|
||||
break;
|
||||
}
|
||||
|
||||
// Convert transparency (if needed) to a full alpha channel
|
||||
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
|
||||
png_set_tRNS_to_alpha(png_ptr);
|
||||
channels += 1;
|
||||
} else if (channels == 3) {
|
||||
// Add an opaque alpha channel if still none exists
|
||||
png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER);
|
||||
channels = 4;
|
||||
}
|
||||
|
||||
// Invert color byte-order as used by plMipmap for DirectX
|
||||
png_set_bgr(png_ptr);
|
||||
/// Construct a new mipmap to hold everything
|
||||
newMipmap = TRACKED_NEW plMipmap(imgWidth, imgHeight, plMipmap::kARGB32Config, 1, plMipmap::kUncompressed);
|
||||
char* destp = (char*)newMipmap->GetImage();
|
||||
png_bytep* row_ptrs = TRACKED_NEW png_bytep[imgHeight];
|
||||
const unsigned int stride = imgWidth * bitdepth * channels / 8;
|
||||
|
||||
// Assign row pointers to the appropriate locations in the newly-created Mipmap
|
||||
for (size_t i = 0; i < imgHeight; i++) {
|
||||
row_ptrs[i] = (png_bytep)destp + (i * stride);
|
||||
}
|
||||
|
||||
png_read_image(png_ptr, row_ptrs);
|
||||
png_read_end(png_ptr, end_info);
|
||||
// Clean up allocated structs
|
||||
png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
|
||||
delete [] row_ptrs;
|
||||
}
|
||||
} catch (...) {
|
||||
if (newMipmap != NULL) {
|
||||
delete newMipmap;
|
||||
newMipmap = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return newMipmap;
|
||||
}
|
||||
|
||||
plMipmap* plPNG::ReadFromFile(const char* fileName)
|
||||
{
|
||||
wchar* wFilename = hsStringToWString(fileName);
|
||||
plMipmap* retVal = ReadFromFile(wFilename);
|
||||
delete [] wFilename;
|
||||
return retVal;
|
||||
}
|
||||
|
||||
plMipmap* plPNG::ReadFromFile(const wchar* fileName)
|
||||
{
|
||||
hsUNIXStream in;
|
||||
|
||||
if (!in.Open(fileName, L"rb")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
plMipmap* ret = IRead(&in);
|
||||
in.Close();
|
||||
return ret;
|
||||
}
|
||||
|
||||
hsBool plPNG::IWrite(plMipmap* source, hsStream* outStream)
|
||||
{
|
||||
hsBool result = true;
|
||||
|
||||
try {
|
||||
// Allocate required structs
|
||||
png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
|
||||
|
||||
if (!png_ptr) {
|
||||
throw(false);
|
||||
}
|
||||
|
||||
png_infop info_ptr = png_create_info_struct(png_ptr);
|
||||
|
||||
if (!info_ptr) {
|
||||
png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
|
||||
throw(false);
|
||||
}
|
||||
|
||||
// Assign delegate function for writing to hsStream
|
||||
png_set_write_fn(png_ptr, (png_voidp)outStream, pngWriteDelegate, NULL);
|
||||
UInt8 psize = source->GetPixelSize();
|
||||
png_set_IHDR(png_ptr, info_ptr, source->GetWidth(), source->GetHeight(), 8, PNG_COLOR_TYPE_RGB_ALPHA,
|
||||
PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
|
||||
// Invert color byte-order as used by plMipmap for DirectX
|
||||
png_set_bgr(png_ptr);
|
||||
// Write out the image metadata
|
||||
png_write_info(png_ptr, info_ptr);
|
||||
char* srcp = (char*)source->GetImage();
|
||||
png_bytep* row_ptrs = TRACKED_NEW png_bytep[source->GetHeight()];
|
||||
const unsigned int stride = source->GetWidth() * source->GetPixelSize() / 8;
|
||||
|
||||
// Assign row pointers to the appropriate locations in the newly-created Mipmap
|
||||
for (size_t i = 0; i < source->GetHeight(); i++) {
|
||||
row_ptrs[i] = (png_bytep)srcp + (i * stride);
|
||||
}
|
||||
|
||||
png_write_image(png_ptr, row_ptrs);
|
||||
png_write_end(png_ptr, info_ptr);
|
||||
// Clean up allocated structs
|
||||
png_destroy_write_struct(&png_ptr, &info_ptr);
|
||||
delete [] row_ptrs;
|
||||
} catch (...) {
|
||||
result = false;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
hsBool plPNG::WriteToFile(const char* fileName, plMipmap* sourceData)
|
||||
{
|
||||
wchar* wFilename = hsStringToWString(fileName);
|
||||
hsBool retVal = WriteToFile(wFilename, sourceData);
|
||||
delete [] wFilename;
|
||||
return retVal;
|
||||
}
|
||||
|
||||
hsBool plPNG::WriteToFile(const wchar* fileName, plMipmap* sourceData)
|
||||
{
|
||||
hsUNIXStream out;
|
||||
|
||||
if (!out.Open(fileName, L"wb")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
hsBool ret = IWrite(sourceData, &out);
|
||||
out.Close();
|
||||
return ret;
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
|
||||
#ifndef _plPNG_h
|
||||
#define _plPNG_h
|
||||
|
||||
|
||||
//// Class Definition /////////////////////////////////////////////////////////
|
||||
|
||||
class plMipmap;
|
||||
class hsStream;
|
||||
|
||||
class plPNG {
|
||||
protected:
|
||||
|
||||
plMipmap* IRead(hsStream* inStream);
|
||||
hsBool IWrite(plMipmap* source, hsStream* outStream);
|
||||
|
||||
public:
|
||||
|
||||
plMipmap* ReadFromStream(hsStream* inStream) { return IRead(inStream); }
|
||||
plMipmap* ReadFromFile(const char* fileName);
|
||||
plMipmap* ReadFromFile(const wchar* fileName);
|
||||
|
||||
hsBool WriteToStream(hsStream* outStream, plMipmap* sourceData) { return IWrite(sourceData, outStream); }
|
||||
hsBool WriteToFile(const char* fileName, plMipmap* sourceData);
|
||||
hsBool WriteToFile(const wchar* fileName, plMipmap* sourceData);
|
||||
|
||||
static plPNG& Instance(void);
|
||||
};
|
||||
|
||||
#endif // _plPNG_h
|
@ -55,14 +55,11 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
|
||||
#include "../plPipeline/plPlates.h"
|
||||
#include "../plPipeline/plDebugText.h"
|
||||
#include "../plGImage/plMipmap.h"
|
||||
|
||||
#include "hsWindows.h"
|
||||
#include "../NucleusLib/inc/plPipeline.h"
|
||||
|
||||
// base size of the cursor
|
||||
#define CURSOR_SIZE_X 0.0675f
|
||||
#define CURSOR_SIZE_Y 0.09f
|
||||
|
||||
// The resolution that uses the base size of the cursor.
|
||||
// All other resolutions will scale the cursor size to keep the same physical size.
|
||||
#define BASE_WIDTH 1024
|
||||
@ -447,16 +444,16 @@ void plMouseDevice::SetDisplayResolution(hsScalar Width, hsScalar Height)
|
||||
IUpdateCursorSize();
|
||||
}
|
||||
|
||||
void plMouseDevice::CreateCursor( int cursor )
|
||||
void plMouseDevice::CreateCursor( char* cursor )
|
||||
{
|
||||
if( fCursor == nil )
|
||||
{
|
||||
plPlateManager::Instance().CreatePlate( &fCursor );
|
||||
fCursor->CreateFromResource( MAKEINTRESOURCE( cursor ) );
|
||||
fCursor->CreateFromResource(cursor);
|
||||
}
|
||||
else
|
||||
{
|
||||
fCursor->ReloadFromResource( MAKEINTRESOURCE( cursor ) );
|
||||
fCursor->ReloadFromResource(cursor);
|
||||
}
|
||||
fCursor->SetPosition( 0, 0, 0 );
|
||||
IUpdateCursorSize();
|
||||
@ -470,7 +467,7 @@ void plMouseDevice::IUpdateCursorSize()
|
||||
if(fCursor)
|
||||
{
|
||||
// set the size of the cursor based on resolution.
|
||||
fCursor->SetSize( CURSOR_SIZE_X * BASE_WIDTH / fWidth, CURSOR_SIZE_Y * BASE_HEIGHT / fHeight );
|
||||
fCursor->SetSize( 2*fCursor->GetMipmap()->GetWidth()/fWidth, 2*fCursor->GetMipmap()->GetHeight()/fHeight );
|
||||
}
|
||||
}
|
||||
|
||||
@ -557,7 +554,7 @@ void plMouseDevice::ShowCursor(hsBool override)
|
||||
fInstance->fCursor->SetVisible( true );
|
||||
}
|
||||
|
||||
void plMouseDevice::NewCursor(int cursor)
|
||||
void plMouseDevice::NewCursor(char* cursor)
|
||||
{
|
||||
fInstance->fCursorID = cursor;
|
||||
fInstance->CreateCursor(cursor);
|
||||
|
@ -50,7 +50,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "../pnInputCore/plOSMsg.h"
|
||||
#include "hsBitVector.h"
|
||||
#include "hsTemplates.h"
|
||||
#include "../../apps/plClient/res/resource.h"
|
||||
class plMessage;
|
||||
enum plKeyDef;
|
||||
struct plMouseInfo;
|
||||
@ -142,27 +141,27 @@ protected:
|
||||
|
||||
class plPlate;
|
||||
|
||||
#define CURSOR_UP IDB_CURSOR_UP
|
||||
#define CURSOR_DOWN IDB_CURSOR_DOWN
|
||||
#define CURSOR_RIGHT IDB_CURSOR_RIGHT
|
||||
#define CURSOR_LEFT IDB_CURSOR_LEFT
|
||||
#define CURSOR_OPEN IDB_CURSOR_OPEN
|
||||
#define CURSOR_GRAB IDB_CURSOR_GRAB
|
||||
#define CURSOR_CLICKED IDB_CURSOR_CLICKED
|
||||
#define CURSOR_POISED IDB_CURSOR_POISED
|
||||
#define CURSOR_ARROW IDB_CURSOR_ARROW
|
||||
#define CURSOR_4WAY_OPEN IDB_CURSOR_4WAYOPEN
|
||||
#define CURSOR_4WAY_CLOSED IDB_CURSOR_4WAYCLOSED
|
||||
#define CURSOR_UPDOWN_CLOSED IDB_CURSOR_UPDOWNCLOSED
|
||||
#define CURSOR_UPDOWN_OPEN IDB_CURSOR_UPDOWNOPEN
|
||||
#define CURSOR_LEFTRIGHT_CLOSED IDB_CURSOR_LEFTRIGHTCLOSED
|
||||
#define CURSOR_LEFTRIGHT_OPEN IDB_CURSOR_LEFTRIGHTOPEN
|
||||
#define CURSOR_OFFER_BOOK IDB_CURSOR_BOOK
|
||||
#define CURSOR_OFFER_BOOK_HI IDB_CURSOR_BOOK_HIGHLIGHT
|
||||
#define CURSOR_OFFER_BOOK_CLICKED IDB_CURSOR_BOOK_CLICKED
|
||||
#define CURSOR_CLICK_DISABLED IDB_CURSOR_DISABLED
|
||||
#define CURSOR_HAND IDB_CURSOR_HAND
|
||||
#define CURSOR_UPWARD IDB_CURSOR_UPWARD
|
||||
#define CURSOR_UP "cursor_up.png"
|
||||
#define CURSOR_UPWARD "cursor_upward.png"
|
||||
#define CURSOR_DOWN "cursor_down.png"
|
||||
#define CURSOR_RIGHT "cursor_right.png"
|
||||
#define CURSOR_LEFT "cursor_left.png"
|
||||
#define CURSOR_OPEN "cursor_open.png"
|
||||
#define CURSOR_GRAB "cursor_grab.png"
|
||||
#define CURSOR_CLICKED "cursor_clicked.png"
|
||||
#define CURSOR_POISED "cursor_poised.png"
|
||||
#define CURSOR_4WAY_OPEN "cursor_4way_open.png"
|
||||
#define CURSOR_4WAY_CLOSED "cursor_4way_closed.png"
|
||||
#define CURSOR_UPDOWN_OPEN "cursor_updown_open.png"
|
||||
#define CURSOR_UPDOWN_CLOSED "cursor_updown_closed.png"
|
||||
#define CURSOR_LEFTRIGHT_OPEN "cursor_leftright_open.png"
|
||||
#define CURSOR_LEFTRIGHT_CLOSED "cursor_leftright_closed.png"
|
||||
#define CURSOR_OFFER_BOOK "cursor_book.png"
|
||||
#define CURSOR_OFFER_BOOK_HI "cursor_book_poised.png"
|
||||
#define CURSOR_OFFER_BOOK_CLICKED "cursor_book_clicked.png"
|
||||
#define CURSOR_CLICK_DISABLED "cursor_disabled.png"
|
||||
#define CURSOR_HAND "cursor_up.png"
|
||||
#define CURSOR_ARROW "cursor_up.png"
|
||||
|
||||
class plInputEventMsg;
|
||||
|
||||
@ -195,7 +194,7 @@ public:
|
||||
|
||||
static void SetMsgAlways(bool b) { plMouseDevice::bMsgAlways = b; }
|
||||
static void ShowCursor(hsBool override = false);
|
||||
static void NewCursor(int cursor);
|
||||
static void NewCursor(char* cursor);
|
||||
static void HideCursor(hsBool override = false);
|
||||
static bool GetHideCursor() { return plMouseDevice::bCursorHidden; }
|
||||
static void SetCursorOpacity( hsScalar opacity = 1.f );
|
||||
@ -225,11 +224,11 @@ protected:
|
||||
|
||||
|
||||
plPlate *fCursor;
|
||||
int fCursorID;
|
||||
char* fCursorID;
|
||||
|
||||
static plMouseDevice* fInstance;
|
||||
static plMouseInfo fDefaultMouseControlMap[];
|
||||
void CreateCursor( int cursor );
|
||||
void CreateCursor( char* cursor );
|
||||
void IUpdateCursorSize();
|
||||
static bool bMsgAlways;
|
||||
static bool bCursorHidden;
|
||||
|
@ -251,7 +251,7 @@ void plInputInterfaceMgr::ResetClickableState()
|
||||
|
||||
void plInputInterfaceMgr::IUpdateCursor( Int32 newCursor )
|
||||
{
|
||||
int mouseCursorResID;
|
||||
char* mouseCursorResID;
|
||||
|
||||
|
||||
fCurrentCursor = newCursor;
|
||||
|
@ -56,8 +56,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "plDebugText.h"
|
||||
#include "plPlates.h"
|
||||
|
||||
#include "../Apps/plClient/res/resource.h"
|
||||
|
||||
#include "hsTimer.h"
|
||||
|
||||
|
||||
@ -86,7 +84,7 @@ void plDTProgressMgr::Activate()
|
||||
{
|
||||
plPlateManager::Instance().CreatePlate(&fStaticTextPlate);
|
||||
|
||||
fStaticTextPlate->CreateFromJPEGResource(MAKEINTRESOURCE(plProgressMgr::GetStaticTextID(fCurrentStaticText)), 0);
|
||||
fStaticTextPlate->CreateFromResource(plProgressMgr::GetStaticTextID(fCurrentStaticText));
|
||||
fStaticTextPlate->SetVisible(true);
|
||||
fStaticTextPlate->SetOpacity(1.0f);
|
||||
fStaticTextPlate->SetSize(2 * 0.192f, 2 * 0.041f, true);
|
||||
@ -97,7 +95,7 @@ void plDTProgressMgr::Activate()
|
||||
{
|
||||
plPlateManager::Instance().CreatePlate( &fActivePlate );
|
||||
|
||||
fActivePlate->CreateFromJPEGResource( MAKEINTRESOURCE( plProgressMgr::GetLoadingFrameID(fCurrentImage) ), 0 );
|
||||
fActivePlate->CreateFromResource(plProgressMgr::GetLoadingFrameID(fCurrentImage));
|
||||
fActivePlate->SetVisible(true);
|
||||
fActivePlate->SetOpacity(1.0f);
|
||||
fActivePlate->SetSize(0.6, 0.6, true);
|
||||
@ -159,7 +157,7 @@ void plDTProgressMgr::Draw( plPipeline *p )
|
||||
|
||||
fLastDraw = currentMs;
|
||||
|
||||
fActivePlate->ReloadFromJPEGResource(MAKEINTRESOURCE(plProgressMgr::GetInstance()->GetLoadingFrameID(fCurrentImage)), 0);
|
||||
fActivePlate->ReloadFromResource(plProgressMgr::GetLoadingFrameID(fCurrentImage));
|
||||
fActivePlate->SetVisible(true);
|
||||
fActivePlate->SetOpacity(1.0f);
|
||||
fActivePlate->SetSize(0.6, 0.6, true);
|
||||
|
@ -11680,7 +11680,11 @@ void plDXPlateManager::IDrawToDevice( plPipeline *pipe )
|
||||
fD3DDevice->SetFVF(dxPipe->fSettings.fCurrFVFFormat = PLD3D_PLATEFVF);
|
||||
fD3DDevice->SetStreamSource( 0, fVertBuffer, 0, sizeof( plPlateVertex ) );
|
||||
plProfile_Inc(VertexChange);
|
||||
fD3DDevice->SetTransform( D3DTS_VIEW, &d3dIdentityMatrix );
|
||||
// To get plates properly pixel-aligned, we need to compensate for D3D9's weird half-pixel
|
||||
// offset (see http://drilian.com/2008/11/25/understanding-half-pixel-and-half-texel-offsets/
|
||||
// or http://msdn.microsoft.com/en-us/library/bb219690(VS.85).aspx).
|
||||
D3DXMatrixTranslation(&mat, -0.5f/scrnWidthDiv2, -0.5f/scrnHeightDiv2, 0.0f);
|
||||
fD3DDevice->SetTransform( D3DTS_VIEW, &mat );
|
||||
oldCullMode = dxPipe->fCurrCullMode;
|
||||
|
||||
for( plate = fPlates; plate != nil; plate = plate->GetNext() )
|
||||
|
@ -51,6 +51,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "plPlates.h"
|
||||
|
||||
#include "../plJPEG/plJPEG.h"
|
||||
#include "../plGImage/plPNG.h"
|
||||
#include "../plGImage/plMipmap.h"
|
||||
#include "../plSurface/plLayer.h"
|
||||
#include "../plSurface/hsGMaterial.h"
|
||||
@ -59,6 +60,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "hsGDeviceRef.h"
|
||||
#include "hsResMgr.h"
|
||||
#include "plPipeDebugFlags.h"
|
||||
#include "../plClientResMgr/plClientResMgr.h"
|
||||
|
||||
|
||||
// A bit of a hack so that we will have the correct instance in the SceneViewer
|
||||
@ -243,302 +245,30 @@ plMipmap *plPlate::CreateMaterial( UInt32 width, UInt32 height, hsBool withAlpha
|
||||
//// CreateFromResource //////////////////////////////////////////////////////
|
||||
// Creates a plate's material from a resource of the given name.
|
||||
|
||||
// This is where hacks beget hacks.
|
||||
// We have two problems here. First, the main cursor we use most of the time (IDB_CURSOR_UP)
|
||||
// is a greyscale cursor, so it's color is copied to alpha and then set to white. But its
|
||||
// color doesn't go to black, it goes to 0x040404, which when used for alpha is just enough
|
||||
// to be annoying in 32 bit (ghost white square around cursor).
|
||||
// Second, Win98 seems to be doing some sort of dither on the cursors that use a color key
|
||||
// (colorKey == 0xff00ff), so the purple parts aren't exactly matching the colorKey, so
|
||||
// we have a big opaque (except for the parts that dither out to 0xff00ff) purple square
|
||||
// around the cursor.
|
||||
// So, when it comes to color keying, we're going to pretend we're in 16 bit mode, and only
|
||||
// check the upper 5 bits of each channel. If they match the colorKey, close enough to be
|
||||
// transparent.
|
||||
// For grey scale, if the alpha comes out less than 8 (upper 5 bits off), again close enough
|
||||
// for complete transparency.
|
||||
//
|
||||
// All this happens in CreateFromResource and ReloadFromResource, so I've moved the alpha setting
|
||||
// code to a function they can both use, rather than cut and pasting code (what a concept, must
|
||||
// be one of those new-fangled OOP patterns).
|
||||
//
|
||||
void plPlate::ISetResourceAlphas(UInt32 colorKey)
|
||||
void plPlate::CreateFromResource(const char *resName)
|
||||
{
|
||||
if( !fMipmap )
|
||||
return;
|
||||
|
||||
/// Set alphas
|
||||
colorKey &= 0x00f8f8f8;
|
||||
|
||||
UInt32 numPix = fMipmap->GetWidth() * fMipmap->GetHeight();
|
||||
|
||||
UInt32 *d;
|
||||
int i;
|
||||
hsBool hasColorKey = false;
|
||||
for( i = 0, d = (UInt32 *)(fMipmap->GetImage()); i < numPix; i++ )
|
||||
if (resName)
|
||||
{
|
||||
if( (d[ i ] & 0x00f8f8f8) == colorKey )
|
||||
{
|
||||
hasColorKey = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( hasColorKey )
|
||||
{
|
||||
for( i = 0, d = (UInt32 *)(fMipmap->GetImage()); i < numPix; i++ )
|
||||
{
|
||||
// Win98 for some reason likes to return full alpha on the pixels,
|
||||
// whereas Win2k/XP likes 0 alpha. Go figure...
|
||||
if( ( d[ i ] & 0x00f8f8f8 ) == colorKey )
|
||||
d[ i ] = 0;
|
||||
else
|
||||
d[ i ] |= 0xff000000;
|
||||
}
|
||||
plMipmap* resTexture = TRACKED_NEW plMipmap;
|
||||
resTexture->CopyFrom(plClientResMgr::Instance().getResource(resName));
|
||||
|
||||
char keyName[128];
|
||||
sprintf( keyName, "PlateResource#%d", fMagicUniqueKeyInt++ );
|
||||
hsgResMgr::ResMgr()->NewKey(keyName, resTexture, plLocation::kGlobalFixedLoc);
|
||||
CreateMaterial(resTexture->GetWidth(), resTexture->GetHeight(), true, resTexture);
|
||||
}
|
||||
else
|
||||
{
|
||||
// No color key, must be a b/w alpha mask
|
||||
for( i = 0, d = (UInt32 *)(fMipmap->GetImage()); i < numPix; i++ )
|
||||
{
|
||||
UInt32 alpha = d[i] & 0xff;
|
||||
if( !(alpha & 0xf8) )
|
||||
d[i] = 0x00ffffff;
|
||||
else
|
||||
d[ i ] = ( alpha << 24 ) | 0x00ffffff;
|
||||
}
|
||||
// Null resource request - Create a blank Material instead
|
||||
CreateMaterial(32, 32, true);
|
||||
}
|
||||
}
|
||||
|
||||
void plPlate::CreateFromResource( const char *resName, UInt32 colorKey )
|
||||
void plPlate::ReloadFromResource(const char *resName)
|
||||
{
|
||||
/*
|
||||
Someday the following might actually work, once we get a plugin that
|
||||
exports a material in the latest format, plus have the material actually
|
||||
read in its layers (or maybe we'll have to read() them in manually?)
|
||||
Right now, we just keep it here so we don't have to look up how to do it
|
||||
when we need it.
|
||||
|
||||
hsRAMStream rsrcStream;
|
||||
HGLOBAL rsrcHdl;
|
||||
HRSRC findInfo;
|
||||
UInt8 *ptr;
|
||||
UInt32 size;
|
||||
|
||||
|
||||
findInfo = FindResource( GetModuleHandle( nil ), (LPCTSTR)1001, "HSMR" );
|
||||
size = SizeofResource( GetModuleHandle( nil ), findInfo );
|
||||
rsrcHdl = LoadResource( GetModuleHandle( nil ), findInfo );
|
||||
ptr = (UInt8 *)LockResource( rsrcHdl );
|
||||
|
||||
rsrcStream.Write( size, ptr );
|
||||
|
||||
UnlockResource( rsrcHdl );
|
||||
|
||||
rsrcStream.Rewind();
|
||||
|
||||
fMaterial = TRACKED_NEW hsGMaterial;
|
||||
fMaterial->Read( &rsrcStream );
|
||||
*/
|
||||
UInt32 width, height;
|
||||
|
||||
|
||||
#if HS_BUILD_FOR_WIN32
|
||||
HBITMAP rsrc;
|
||||
BITMAPINFO bMapInfo;
|
||||
HDC hDC = GetDC( nil );
|
||||
|
||||
rsrc = (HBITMAP)LoadImage( gHInstance, resName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION );
|
||||
if( rsrc == nil )
|
||||
if (resName)
|
||||
{
|
||||
/// Copy data into a new material
|
||||
CreateMaterial( 32, 32, true );
|
||||
SetSize( 0.1, 0.1 );
|
||||
ReleaseDC( nil, hDC );
|
||||
return;
|
||||
}
|
||||
|
||||
// hsAssert( rsrc != nil, "Cannot find specified resource" );
|
||||
|
||||
memset( &bMapInfo, 0, sizeof( bMapInfo ) );
|
||||
bMapInfo.bmiHeader.biSize = sizeof( bMapInfo.bmiHeader );
|
||||
height = GetDIBits( hDC, rsrc, 0, 0, nil, &bMapInfo, DIB_RGB_COLORS );
|
||||
hsAssert( height != 0, "Cannot get resource bitmap bits" );
|
||||
|
||||
width = bMapInfo.bmiHeader.biWidth;
|
||||
height = bMapInfo.bmiHeader.biHeight;
|
||||
bMapInfo.bmiHeader.biBitCount = 32;
|
||||
bMapInfo.bmiHeader.biCompression = BI_RGB;
|
||||
#endif
|
||||
|
||||
/// Copy data into a new material
|
||||
CreateMaterial( width, height, true );
|
||||
SetSize( (float)width, (float)height );
|
||||
|
||||
#if HS_BUILD_FOR_WIN32
|
||||
bMapInfo.bmiHeader.biHeight *= -1;
|
||||
GetDIBits( hDC, rsrc, 0, height, fMipmap->GetImage(), &bMapInfo, DIB_RGB_COLORS );
|
||||
|
||||
ReleaseDC( nil, hDC );
|
||||
DeleteObject( rsrc );
|
||||
#endif
|
||||
|
||||
ISetResourceAlphas(colorKey);
|
||||
}
|
||||
|
||||
//// ReloadFromResource //////////////////////////////////////////////////////
|
||||
// Creates a plate's material from a resource of the given name.
|
||||
|
||||
void plPlate::ReloadFromResource( const char *resName, UInt32 colorKey )
|
||||
{
|
||||
UInt32 width, height;
|
||||
|
||||
|
||||
if( !fMaterial || fMaterial->GetNumLayers() < 1 || fMaterial->GetLayer( 0 ) == nil || fMipmap == nil )
|
||||
{
|
||||
hsStatusMessage( "WARNING: Not refilling plate material; bitmap not yet assigned\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
#if HS_BUILD_FOR_WIN32
|
||||
HBITMAP rsrc;
|
||||
BITMAPINFO bMapInfo;
|
||||
HDC hDC = GetDC( nil );
|
||||
|
||||
rsrc = (HBITMAP)LoadImage( gHInstance, resName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION );
|
||||
if( rsrc == nil )
|
||||
{
|
||||
ReleaseDC( nil, hDC );
|
||||
return;
|
||||
}
|
||||
|
||||
// hsAssert( rsrc != nil, "Cannot find specified resource" );
|
||||
|
||||
memset( &bMapInfo, 0, sizeof( bMapInfo ) );
|
||||
bMapInfo.bmiHeader.biSize = sizeof( bMapInfo.bmiHeader );
|
||||
height = GetDIBits( hDC, rsrc, 0, 0, nil, &bMapInfo, DIB_RGB_COLORS );
|
||||
hsAssert( height != 0, "Cannot get resource bitmap bits" );
|
||||
|
||||
width = bMapInfo.bmiHeader.biWidth;
|
||||
height = bMapInfo.bmiHeader.biHeight;
|
||||
bMapInfo.bmiHeader.biBitCount = 32;
|
||||
bMapInfo.bmiHeader.biCompression = BI_RGB;
|
||||
#endif
|
||||
|
||||
/// Copy the data into the existing material
|
||||
if( fMipmap->GetWidth() != width || fMipmap->GetHeight() != height )
|
||||
{
|
||||
hsStatusMessage( "WARNING: Not refilling plate material; resource size does not match\n" );
|
||||
}
|
||||
|
||||
#if HS_BUILD_FOR_WIN32
|
||||
bMapInfo.bmiHeader.biHeight *= -1;
|
||||
GetDIBits( hDC, rsrc, 0, height, fMipmap->GetImage(), &bMapInfo, DIB_RGB_COLORS );
|
||||
|
||||
ReleaseDC( nil, hDC );
|
||||
DeleteObject( rsrc );
|
||||
#endif
|
||||
|
||||
ISetResourceAlphas(colorKey);
|
||||
|
||||
if( fMipmap->GetDeviceRef() )
|
||||
fMipmap->GetDeviceRef()->SetDirty( true );
|
||||
}
|
||||
|
||||
void plPlate::CreateFromJPEGResource( const char *resName, UInt32 colorKey )
|
||||
{
|
||||
hsRAMStream stream;
|
||||
plMipmap* jpgTexture = nil;
|
||||
|
||||
#if HS_BUILD_FOR_WIN32
|
||||
|
||||
HRSRC res = FindResource(NULL, resName, "JPEG");
|
||||
if (!res)
|
||||
goto error;
|
||||
|
||||
HGLOBAL resourceLoaded = LoadResource(NULL, res);
|
||||
if (!resourceLoaded)
|
||||
goto error;
|
||||
|
||||
byte* data = (byte*)LockResource(resourceLoaded);
|
||||
if (!data)
|
||||
goto error;
|
||||
|
||||
DWORD resSize = SizeofResource(NULL, res);
|
||||
if (resSize == 0)
|
||||
goto error;
|
||||
|
||||
stream.Write(sizeof(DWORD), &resSize);
|
||||
stream.Write(resSize, data);
|
||||
stream.Rewind();
|
||||
|
||||
UnlockResource(resourceLoaded);
|
||||
|
||||
char keyName[128];
|
||||
sprintf( keyName, "PlateJPEG#%d", fMagicUniqueKeyInt++ );
|
||||
|
||||
jpgTexture = plJPEG::Instance().ReadFromStream(&stream);
|
||||
|
||||
if (jpgTexture)
|
||||
{
|
||||
hsgResMgr::ResMgr()->NewKey(keyName, jpgTexture, plLocation::kGlobalFixedLoc);
|
||||
|
||||
#endif
|
||||
|
||||
CreateMaterial( 256, 256, true, jpgTexture);
|
||||
ISetResourceAlphas(colorKey);
|
||||
return;
|
||||
}
|
||||
|
||||
error:
|
||||
/// Copy data into a new material
|
||||
CreateMaterial( 32, 32, true );
|
||||
SetSize( 0.1, 0.1 );
|
||||
return;
|
||||
}
|
||||
|
||||
void plPlate::ReloadFromJPEGResource( const char *resName, UInt32 colorKey )
|
||||
{
|
||||
hsRAMStream stream;
|
||||
plMipmap* jpgTexture = nil;
|
||||
|
||||
#if HS_BUILD_FOR_WIN32
|
||||
|
||||
HRSRC res = FindResource(NULL, resName, "JPEG");
|
||||
if (!res)
|
||||
return;
|
||||
|
||||
HGLOBAL resourceLoaded = LoadResource(NULL, res);
|
||||
if (!resourceLoaded)
|
||||
return;
|
||||
|
||||
byte* data = (byte*)LockResource(resourceLoaded);
|
||||
if (!data)
|
||||
return;
|
||||
|
||||
DWORD resSize = SizeofResource(NULL, res);
|
||||
if (resSize == 0)
|
||||
return;
|
||||
|
||||
stream.Write(sizeof(DWORD), &resSize);
|
||||
stream.Write(resSize, data);
|
||||
stream.Rewind();
|
||||
|
||||
UnlockResource(resourceLoaded);
|
||||
|
||||
jpgTexture = plJPEG::Instance().ReadFromStream(&stream);
|
||||
|
||||
if (jpgTexture)
|
||||
{
|
||||
|
||||
#endif
|
||||
fMipmap->CopyFrom(jpgTexture);
|
||||
|
||||
ISetResourceAlphas(colorKey);
|
||||
|
||||
if( fMipmap->GetDeviceRef() )
|
||||
fMipmap->GetDeviceRef()->SetDirty( true );
|
||||
|
||||
delete jpgTexture;
|
||||
fMipmap->CopyFrom(plClientResMgr::Instance().getResource(resName));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -126,6 +126,7 @@ class plPlate
|
||||
hsMatrix44 &GetTransform( void ) { return fXformMatrix; }
|
||||
const char *GetTitle( void ) { return fTitle; }
|
||||
UInt32 GetFlags( void ) { return fFlags; }
|
||||
const plMipmap *GetMipmap( void ) { return fMipmap; }
|
||||
|
||||
void SetVisible( hsBool vis ) { if( vis ) fFlags |= kFlagVisible; else fFlags &= ~kFlagVisible; }
|
||||
hsBool IsVisible( void );
|
||||
@ -142,10 +143,8 @@ class plPlate
|
||||
void SetSize( hsScalar width, hsScalar height, bool adjustByAspectRatio = false );
|
||||
|
||||
plMipmap *CreateMaterial( UInt32 width, UInt32 height, hsBool withAlpha, plMipmap* texture = NULL );
|
||||
void CreateFromResource( const char *resName, UInt32 colorKey = 0x00ff00ff );
|
||||
void ReloadFromResource( const char *resName, UInt32 colorKey = 0x00ff00ff );
|
||||
void CreateFromJPEGResource( const char *resName, UInt32 colorKey = 0x00ff00ff );
|
||||
void ReloadFromJPEGResource( const char *resName, UInt32 colorKey = 0x00ff00ff );
|
||||
void CreateFromResource( const char *resName );
|
||||
void ReloadFromResource( const char *resName );
|
||||
};
|
||||
|
||||
//// plGraphPlate Class Definition ///////////////////////////////////////////
|
||||
|
@ -55,7 +55,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
#include "hsTimer.h"
|
||||
|
||||
#include "../plPipeline/plPlates.h"
|
||||
#include "../Apps/plClient/res/resource.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
@ -66,30 +65,14 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
|
||||
plProgressMgr *plProgressMgr::fManager = nil;
|
||||
|
||||
int plProgressMgr::fImageRotation[] = {
|
||||
IDR_LOADING_01,
|
||||
IDR_LOADING_18,
|
||||
IDR_LOADING_17,
|
||||
IDR_LOADING_16,
|
||||
IDR_LOADING_15,
|
||||
IDR_LOADING_14,
|
||||
IDR_LOADING_13,
|
||||
IDR_LOADING_12,
|
||||
IDR_LOADING_11,
|
||||
IDR_LOADING_10,
|
||||
IDR_LOADING_09,
|
||||
IDR_LOADING_08,
|
||||
IDR_LOADING_07,
|
||||
IDR_LOADING_06,
|
||||
IDR_LOADING_05,
|
||||
IDR_LOADING_04,
|
||||
IDR_LOADING_03,
|
||||
IDR_LOADING_02
|
||||
};
|
||||
#define LOADING_RES "xLoading_Linking.%02d.png"
|
||||
#define LOADING_RES_COUNT 18
|
||||
|
||||
int plProgressMgr::fStaticTextIDs[] = {
|
||||
0,
|
||||
IDR_LOADING_UPDATETEXT,
|
||||
char* plProgressMgr::fImageRotation[LOADING_RES_COUNT];
|
||||
|
||||
char* plProgressMgr::fStaticTextIDs[] = {
|
||||
"xLoading_Linking_Text.png",
|
||||
"xLoading_Updating_Text.png"
|
||||
};
|
||||
|
||||
//// Constructor & Destructor ////////////////////////////////////////////////
|
||||
@ -100,10 +83,23 @@ plProgressMgr::plProgressMgr()
|
||||
fManager = this;
|
||||
fCallbackProc = nil;
|
||||
fCurrentStaticText = kNone;
|
||||
|
||||
// Fill array with pre-computed loading frame IDs
|
||||
for (int i=0; i < LOADING_RES_COUNT; i++)
|
||||
{
|
||||
char* frameID = TRACKED_NEW char[128];
|
||||
sprintf(frameID, LOADING_RES, i);
|
||||
fImageRotation[i] = frameID;
|
||||
}
|
||||
}
|
||||
|
||||
plProgressMgr::~plProgressMgr()
|
||||
{
|
||||
for (int i=0; i < LOADING_RES_COUNT; i++)
|
||||
{
|
||||
delete fImageRotation[i];
|
||||
}
|
||||
|
||||
while( fOperations != nil )
|
||||
delete fOperations;
|
||||
fManager = nil;
|
||||
@ -245,15 +241,15 @@ void plProgressMgr::CancelAllOps( void )
|
||||
fCurrentStaticText = kNone;
|
||||
}
|
||||
|
||||
int plProgressMgr::GetLoadingFrameID(int index)
|
||||
char* plProgressMgr::GetLoadingFrameID(int index)
|
||||
{
|
||||
if (index < (sizeof(fImageRotation) / sizeof(int)))
|
||||
if (index < LOADING_RES_COUNT)
|
||||
return fImageRotation[index];
|
||||
else
|
||||
return fImageRotation[0];
|
||||
}
|
||||
|
||||
int plProgressMgr::GetStaticTextID(StaticText staticTextType)
|
||||
char* plProgressMgr::GetStaticTextID(StaticText staticTextType)
|
||||
{
|
||||
return fStaticTextIDs[staticTextType];
|
||||
}
|
||||
|
@ -196,8 +196,8 @@ class plProgressMgr
|
||||
private:
|
||||
|
||||
static plProgressMgr *fManager;
|
||||
static int fImageRotation[];
|
||||
static int fStaticTextIDs[];
|
||||
static char* fImageRotation[];
|
||||
static char* fStaticTextIDs[];
|
||||
|
||||
protected:
|
||||
|
||||
@ -229,8 +229,8 @@ class plProgressMgr
|
||||
virtual ~plProgressMgr();
|
||||
|
||||
static plProgressMgr* GetInstance() { return fManager; }
|
||||
static int GetLoadingFrameID(int index);
|
||||
static int GetStaticTextID(StaticText staticTextType);
|
||||
static char* GetLoadingFrameID(int index);
|
||||
static char* GetStaticTextID(StaticText staticTextType);
|
||||
|
||||
virtual void Draw( plPipeline *p ) { }
|
||||
|
||||
|
Reference in New Issue
Block a user