Maelstrom: Separated the texture pixel density from the layout resolution

https://github.com/libsdl-org/Maelstrom/commit/657f04c71e4014f77c01632b1dda7c244198933a

From 657f04c71e4014f77c01632b1dda7c244198933a Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Thu, 4 Oct 2012 23:57:18 -0700
Subject: [PATCH] Separated the texture pixel density from the layout
 resolution This allows us to leave the texture size unspecified in the layout
 files and paves the way for high-res fonts.

---
 Data/UI/loading.xml                           |   4 +-
 Data/UI_Classic/UITemplates.xml               |   2 +-
 Data/UI_Classic/continue.xml                  |   1 -
 Data/UI_Classic/dawn.xml                      |   1 -
 Data/UI_Classic/feature.xml                   |   1 -
 Data/UI_Classic/gameover.xml                  |   1 -
 Data/UI_Classic/loading.xml                   |   4 +-
 Data/UI_Classic/lobby.xml                     |  71 +++++++++---------
 Data/UI_Classic/main.xml                      |   6 +-
 Data/UI_Classic/touchcontrol.xml              |  14 ++--
 Data/resolutions.xml                          |  12 +--
 Maelstrom_Data.zip                            | Bin 14372829 -> 14372655 bytes
 Xcode-iOS/Maelstrom.xcodeproj/project.pbxproj |   8 ++
 Xcode/Maelstrom.xcodeproj/project.pbxproj     |   9 +++
 game/Maelstrom.h                              |   2 +-
 game/MaelstromUI.cpp                          |  43 ++++++-----
 game/MaelstromUI.h                            |  10 ++-
 game/Maelstrom_Globals.h                      |   7 +-
 game/game.cpp                                 |   4 +-
 game/game.h                                   |   2 +-
 game/init.cpp                                 |  16 +++-
 game/load.cpp                                 |  18 +++--
 game/load.h                                   |  11 +--
 game/object.h                                 |   2 +-
 game/player.cpp                               |   8 +-
 game/player.h                                 |   4 +-
 screenlib/Makefile.am                         |   5 +-
 screenlib/Makefile.in                         |   9 ++-
 screenlib/UIDrawEngine.cpp                    |  22 +++---
 screenlib/UIDrawEngine.h                      |   4 +-
 screenlib/UIElement.cpp                       |  10 +--
 screenlib/UIElement.h                         |   8 +-
 screenlib/UIFontInterface.h                   |   8 +-
 screenlib/UIImageInterface.h                  |  34 +++++++++
 screenlib/UIManager.cpp                       |  59 +++++----------
 screenlib/UIManager.h                         |  18 ++---
 screenlib/UITexture.cpp                       |  32 ++++++++
 screenlib/UITexture.h                         |  67 +++++++++++++++++
 38 files changed, 346 insertions(+), 191 deletions(-)
 create mode 100644 screenlib/UIImageInterface.h
 create mode 100644 screenlib/UITexture.cpp
 create mode 100644 screenlib/UITexture.h

diff --git a/Data/UI/loading.xml b/Data/UI/loading.xml
index eb382d45..22ecbc4e 100644
--- a/Data/UI/loading.xml
+++ b/Data/UI/loading.xml
@@ -1,8 +1,6 @@
 <Panel template="FramedPanel" enterSound="111" leaveSound="123">
 	<Elements>
-		<Title name="image" id="130">
-			<ImageArea><Size w="640" h="480"/></ImageArea>
-		</Title>
+		<Title name="image" id="130"/>
 
 		<!-- Loading Bar -->
 		<Rectangle>
diff --git a/Data/UI_Classic/UITemplates.xml b/Data/UI_Classic/UITemplates.xml
index 66c7ba86..bb5be08e 100644
--- a/Data/UI_Classic/UITemplates.xml
+++ b/Data/UI_Classic/UITemplates.xml
@@ -74,7 +74,7 @@
 	<Button templateName="HotkeyOnly">
 		<Size w="0" h="0"/>
 	</Button>
-	<Button templateName="MenuButton" image="keyicon.bmp" font="Geneva:9:BOLD">
+	<Button templateName="MenuButton" image="keyicon" font="Geneva:9:BOLD">
 		<Size w="32" h="32"/>
 		<TextArea>
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" x="13" y="9"/>
diff --git a/Data/UI_Classic/continue.xml b/Data/UI_Classic/continue.xml
index 462fddd0..c4920e76 100644
--- a/Data/UI_Classic/continue.xml
+++ b/Data/UI_Classic/continue.xml
@@ -3,7 +3,6 @@
 	<Anchor anchorFrom="TOPLEFT" anchorTo="CENTER" x="-137" y="-147"/>
 	<Elements>
 		<Icon name="icon" id="103">
-			<ImageArea><Size w="32" h="32"/></ImageArea>
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" x="19" y="19"/>
 		</Icon>
 		<DialogLabel name="line1" text="Would you like to continue?">
diff --git a/Data/UI_Classic/dawn.xml b/Data/UI_Classic/dawn.xml
index 77de4dac..cd4f32e1 100644
--- a/Data/UI_Classic/dawn.xml
+++ b/Data/UI_Classic/dawn.xml
@@ -3,7 +3,6 @@
 	<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" x="164" y="77"/>
 	<Elements>
 		<Icon name="icon" id="103">
-			<ImageArea><Size w="32" h="32"/></ImageArea>
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" x="19" y="19"/>
 		</Icon>
 		<DialogLabel name="line1" text="No eternal reward will forgive us">
diff --git a/Data/UI_Classic/feature.xml b/Data/UI_Classic/feature.xml
index 549eada5..2abe2b86 100644
--- a/Data/UI_Classic/feature.xml
+++ b/Data/UI_Classic/feature.xml
@@ -3,7 +3,6 @@
 	<Anchor anchorFrom="TOPLEFT" anchorTo="CENTER" x="-137" y="-147"/>
 	<Elements>
 		<Icon name="icon" id="103">
-			<ImageArea><Size w="32" h="32"/></ImageArea>
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" x="19" y="19"/>
 		</Icon>
 		<DialogLabel name="line1" text="You don't have that feature">
diff --git a/Data/UI_Classic/gameover.xml b/Data/UI_Classic/gameover.xml
index d839b91d..1349715b 100644
--- a/Data/UI_Classic/gameover.xml
+++ b/Data/UI_Classic/gameover.xml
@@ -1,7 +1,6 @@
 <Panel cursor="false" enterSound="113" delegate="GameOverPanel">
 	<Elements>
 		<Title name="image" id="128">
-			<ImageArea><Size w="294" h="56"/></ImageArea>
 			<Anchor anchorFrom="CENTER" anchorTo="CENTER" y="-80"/>
 		</Title>
 
diff --git a/Data/UI_Classic/loading.xml b/Data/UI_Classic/loading.xml
index 44234618..80c01180 100644
--- a/Data/UI_Classic/loading.xml
+++ b/Data/UI_Classic/loading.xml
@@ -1,8 +1,6 @@
 <Panel template="FramedPanel" enterSound="111" leaveSound="123">
 	<Elements>
-		<Title name="image" id="130">
-			<ImageArea><Size w="512" h="384"/></ImageArea>
-		</Title>
+		<Title name="image" id="130"/>
 
 		<Label template="SmallYellow" text="Loading...">
 			<Anchor anchorFrom="CENTER" anchorTo="BOTTOM" anchor="image" y="20"/>
diff --git a/Data/UI_Classic/lobby.xml b/Data/UI_Classic/lobby.xml
index 7e5df886..05803551 100644
--- a/Data/UI_Classic/lobby.xml
+++ b/Data/UI_Classic/lobby.xml
@@ -2,7 +2,6 @@
 	<Size w="466" h="254"/>
 	<Elements>
 		<Icon name="image" id="103">
-			<ImageArea><Size w="32" h="32"/></ImageArea>
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" x="14" y="14"/>
 		</Icon>
 		<DialogLabel name="line1" text="Multiplayer Setup">
@@ -43,13 +42,13 @@
 						<DialogLabel name="host" text="bwg101.corp.pacbell.net">
 							<Anchor anchorFrom="LEFT" anchorTo="RIGHT" anchor="join" x="120"/>
 						</DialogLabel>
-						<Image name="ping1" image="ping1.bmp">
+						<Image name="ping1" image="ping1">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping_label" y="12"/>
 						</Image>
-						<Image name="ping2" image="ping2.bmp">
+						<Image name="ping2" image="ping2">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
-						<Image name="ping3" image="ping3.bmp">
+						<Image name="ping3" image="ping3">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
 					</Elements>
@@ -68,13 +67,13 @@
 						<DialogLabel name="host" text="bwg101.corp.pacbell.net">
 							<Anchor anchorFrom="LEFT" anchorTo="RIGHT" anchor="join" x="120"/>
 						</DialogLabel>
-						<Image name="ping1" image="ping1.bmp">
+						<Image name="ping1" image="ping1">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping_label" y="42"/>
 						</Image>
-						<Image name="ping2" image="ping2.bmp">
+						<Image name="ping2" image="ping2">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
-						<Image name="ping3" image="ping3.bmp">
+						<Image name="ping3" image="ping3">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
 					</Elements>
@@ -93,13 +92,13 @@
 						<DialogLabel name="host" text="bwg101.corp.pacbell.net">
 							<Anchor anchorFrom="LEFT" anchorTo="RIGHT" anchor="join" x="120"/>
 						</DialogLabel>
-						<Image name="ping1" image="ping1.bmp">
+						<Image name="ping1" image="ping1">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping_label" y="72"/>
 						</Image>
-						<Image name="ping2" image="ping2.bmp">
+						<Image name="ping2" image="ping2">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
-						<Image name="ping3" image="ping3.bmp">
+						<Image name="ping3" image="ping3">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
 					</Elements>
@@ -118,13 +117,13 @@
 						<DialogLabel name="host" text="bwg101.corp.pacbell.net">
 							<Anchor anchorFrom="LEFT" anchorTo="RIGHT" anchor="join" x="120"/>
 						</DialogLabel>
-						<Image name="ping1" image="ping1.bmp">
+						<Image name="ping1" image="ping1">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping_label" y="102"/>
 						</Image>
-						<Image name="ping2" image="ping2.bmp">
+						<Image name="ping2" image="ping2">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
-						<Image name="ping3" image="ping3.bmp">
+						<Image name="ping3" image="ping3">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
 					</Elements>
@@ -143,13 +142,13 @@
 						<DialogLabel name="host" text="bwg101.corp.pacbell.net">
 							<Anchor anchorFrom="LEFT" anchorTo="RIGHT" anchor="join" x="120"/>
 						</DialogLabel>
-						<Image name="ping1" image="ping1.bmp">
+						<Image name="ping1" image="ping1">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping_label" y="132"/>
 						</Image>
-						<Image name="ping2" image="ping2.bmp">
+						<Image name="ping2" image="ping2">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
-						<Image name="ping3" image="ping3.bmp">
+						<Image name="ping3" image="ping3">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
 					</Elements>
@@ -166,7 +165,7 @@
 					<Size h="46"/>
 					<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" x="14" y="72"/>
 					<Elements>
-						<Image name="label" image="player1.bmp">
+						<Image name="label" image="player1">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT"/>
 						</Image>
 						<Button name="control">
@@ -178,13 +177,13 @@
 						<DialogLabel name="host" text="bwg101.corp.pacbell.net">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="BOTTOMLEFT" anchor="name" y="2"/>
 						</DialogLabel>
-						<Image name="ping1" image="ping1.bmp">
+						<Image name="ping1" image="ping1">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping_label" y="12"/>
 						</Image>
-						<Image name="ping2" image="ping2.bmp">
+						<Image name="ping2" image="ping2">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
-						<Image name="ping3" image="ping3.bmp">
+						<Image name="ping3" image="ping3">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
 					</Elements>
@@ -194,7 +193,7 @@
 					<Size h="46"/>
 					<Anchor anchorFrom="TOPLEFT" anchorTo="BOTTOMLEFT" anchor="player1"/>
 					<Elements>
-						<Image name="label" image="player2.bmp">
+						<Image name="label" image="player2">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT"/>
 						</Image>
 						<Button name="control">
@@ -206,13 +205,13 @@
 						<DialogLabel name="host" text="192.168.0.101">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="BOTTOMLEFT" anchor="name" y="2"/>
 						</DialogLabel>
-						<Image name="ping1" image="ping1.bmp">
+						<Image name="ping1" image="ping1">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping_label" y="58"/>
 						</Image>
-						<Image name="ping2" image="ping2.bmp">
+						<Image name="ping2" image="ping2">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
-						<Image name="ping3" image="ping3.bmp">
+						<Image name="ping3" image="ping3">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
 					</Elements>
@@ -222,7 +221,7 @@
 					<Size h="46"/>
 					<Anchor anchorFrom="TOPLEFT" anchorTo="BOTTOMLEFT" anchor="player2"/>
 					<Elements>
-						<Image name="label" image="player3.bmp">
+						<Image name="label" image="player3">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT"/>
 						</Image>
 						<Button name="control">
@@ -234,13 +233,13 @@
 						<DialogLabel name="host" text="192.168.0.101">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="BOTTOMLEFT" anchor="name" y="2"/>
 						</DialogLabel>
-						<Image name="ping1" image="ping1.bmp">
+						<Image name="ping1" image="ping1">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping_label" y="104"/>
 						</Image>
-						<Image name="ping2" image="ping2.bmp">
+						<Image name="ping2" image="ping2">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
-						<Image name="ping3" image="ping3.bmp">
+						<Image name="ping3" image="ping3">
 							<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ping1"/>
 						</Image>
 					</Elements>
@@ -270,14 +269,14 @@
 
 		<DialogContainer name="control_dropdown" border="true" show="false">
 			<Elements>
-				<Button name="control0" image="control0.bmp"/>
-				<Button name="control3" image="control3.bmp"/>
-				<Button name="control1" image="control1.bmp"/>
-				<Button name="control2" image="control2.bmp"/>
-				<Button name="control4" image="control4.bmp"/>
-				<Button name="control8" image="control8.bmp"/>
-				<Button name="control16" image="control16.bmp"/>
-				<Button name="control32" image="control32.bmp"/>
+				<Button name="control0" image="control0"/>
+				<Button name="control3" image="control3"/>
+				<Button name="control1" image="control1"/>
+				<Button name="control2" image="control2"/>
+				<Button name="control4" image="control4"/>
+				<Button name="control8" image="control8"/>
+				<Button name="control16" image="control16"/>
+				<Button name="control32" image="control32"/>
 			</Elements>
 		</DialogContainer>
 
diff --git a/Data/UI_Classic/main.xml b/Data/UI_Classic/main.xml
index c00b1b6d..4267102a 100644
--- a/Data/UI_Classic/main.xml
+++ b/Data/UI_Classic/main.xml
@@ -172,7 +172,7 @@
 		<Label name="last_score" template="LargeWhite">
 			<Anchor anchorFrom="LEFT" anchorTo="RIGHT" anchor="last_score_label"/>
 		</Label>
-		<Button name="play_last" image="play.bmp">
+		<Button name="play_last" image="play">
 			<Size w="326" h="22"/>
 			<ImageArea>
 				<Anchor anchorFrom="LEFT" anchorTo="LEFT"/>
@@ -256,7 +256,7 @@
 			<Color r="0xFF" g="0xFF" b="0xFF"/>
 			<Anchor anchorFrom="BOTTOMLEFT" anchorTo="TOPLEFT" anchor="image" x="15" y="148"/>
 		</Label>
-		<Image image="logo.bmp">
+		<Image image="logo">
 			<Anchor anchorFrom="TOPLEFT" anchorTo="BOTTOMLEFT" anchor="hdivider_right"/>
 		</Image>
 
@@ -266,7 +266,7 @@
 		</Label>
 
 		<!-- Kid mode -->
-		<Checkbox name="KidMode" image="kidmode.bmp" checkedImage="kidmode-selected.bmp" bindValue="Cheat.KidMode">
+		<Checkbox name="KidMode" image="kidmode" checkedImage="kidmode-selected" bindValue="Cheat.KidMode">
 			<Anchor anchorFrom="TOP" anchorTo="TOP" anchor="vertical_divider" x="196"/>
 		</Checkbox>
 	</Elements>
diff --git a/Data/UI_Classic/touchcontrol.xml b/Data/UI_Classic/touchcontrol.xml
index b0f050aa..ff1127b5 100644
--- a/Data/UI_Classic/touchcontrol.xml
+++ b/Data/UI_Classic/touchcontrol.xml
@@ -1,26 +1,26 @@
 <Panel fullscreen="false">
 	<Elements>
-		<ControlButton name="abort" action="ABORT" image="abort.bmp">
+		<ControlButton name="abort" action="ABORT" image="abort">
 			<Anchor anchorFrom="TOPRIGHT" anchorTo="TOPRIGHT" x="-6" y="4"/>
 		</ControlButton>
-		<ControlButton name="pause" action="PAUSE" image="pause.bmp">
+		<ControlButton name="pause" action="PAUSE" image="pause">
 			<Anchor anchorFrom="RIGHT" anchorTo="LEFT" anchor="abort" x="-12"/>
 		</ControlButton>
 
-		<ControlButton name="fire" action="FIRE" image="fire.bmp">
+		<ControlButton name="fire" action="FIRE" image="fire">
 			<Anchor anchorFrom="BOTTOMRIGHT" anchorTo="BOTTOMRIGHT" x="-8" y="-16"/>
 		</ControlButton>
-		<ControlButton name="thrust" action="THRUST" image="thrust.bmp">
+		<ControlButton name="thrust" action="THRUST" image="thrust">
 			<Anchor anchorFrom="RIGHT" anchorTo="LEFT" anchor="fire" x="-8"/>
 		</ControlButton>
 
-		<ControlButton name="rotate_left" action="LEFT" image="rotate_left.bmp">
+		<ControlButton name="rotate_left" action="LEFT" image="rotate_left">
 			<Anchor anchorFrom="BOTTOMLEFT" anchorTo="BOTTOMLEFT" x="0" x="8" y="-16"/>
 		</ControlButton>
-		<ControlButton name="rotate_right" action="RIGHT" image="rotate_right.bmp">
+		<ControlButton name="rotate_right" action="RIGHT" image="rotate_right">
 			<Anchor anchorFrom="LEFT" anchorTo="RIGHT" anchor="rotate_left" x="8"/>
 		</ControlButton>
-		<ControlButton name="shield" action="SHIELD" image="shield.bmp">
+		<ControlButton name="shield" action="SHIELD" image="shield">
 			<Anchor anchorFrom="BOTTOM" anchorTo="TOP" anchor="rotate_left" x="32" y="-4"/>
 		</ControlButton>
 	</Elements>
diff --git a/Data/resolutions.xml b/Data/resolutions.xml
index c2df097c..0db64508 100644
--- a/Data/resolutions.xml
+++ b/Data/resolutions.xml
@@ -1,8 +1,8 @@
 <resolutions>
-	<resolution w="2048" h="1536" path_suffix="_1024x768" file_suffix="@2x"/>
-	<resolution w="1024" h="768" path_suffix="_1024x768" file_suffix=""/>
-	<resolution w="960" h="640" path_suffix="_480x320" file_suffix="@2x"/>
-	<resolution w="480" h="320" path_suffix="_480x320" file_suffix=""/>
-	<resolution w="0" h="0" path_suffix="" file_suffix=""/>
-	<resolution w="0" h="0" path_suffix="_Classic" file_suffix=""/>
+	<resolution w="2048" h="1536" path_suffix="_1024x768" file_suffix="@2x" scale="1536/480"/>
+	<resolution w="1024" h="768" path_suffix="_1024x768" file_suffix="" scale="768/480"/>
+	<resolution w="960" h="640" path_suffix="_480x320" file_suffix="@2x" scale="640/480"/>
+	<resolution w="480" h="320" path_suffix="_480x320" file_suffix="" scale="320/480"/>
+	<resolution w="0" h="0" path_suffix="" file_suffix="" scale="1/1"/>
+	<resolution w="0" h="0" path_suffix="_Classic" file_suffix="" scale="1/1"/>
 </resolutions>
diff --git a/Maelstrom_Data.zip b/Maelstrom_Data.zip
index 0cdc07c908ab0c663f4d8d36ccd8841946ebb5e7..12cd866c7b1ee85b8e7d9410cc008f99c986c34f 100644
GIT binary patch
delta 89112
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

(Patch may be truncated, please check the link at the top of this post.)