r1252 - in trunk/src/target/OM-2007/applications/openmoko-keyboard: layouts src

caowai_song at sita.openmoko.org caowai_song at sita.openmoko.org
Tue Mar 6 08:30:35 CET 2007


Author: caowai_song
Date: 2007-03-06 08:30:14 +0100 (Tue, 06 Mar 2007)
New Revision: 1252

Modified:
   trunk/src/target/OM-2007/applications/openmoko-keyboard/layouts/keyboard.xml
   trunk/src/target/OM-2007/applications/openmoko-keyboard/src/config-parser.c
   trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-key.c
   trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-layout.c
   trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-ui-xft-backend.c
   trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard.c
   trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard.h
Log:
Complete changing layout when user push the "changer" button.


Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/layouts/keyboard.xml
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/layouts/keyboard.xml	2007-03-05 19:53:06 UTC (rev 1251)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/layouts/keyboard.xml	2007-03-06 07:30:14 UTC (rev 1252)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!-- edited with XMLSpy v2006 sp2 U (http://www.altova.com) by scw (FIC) -->
 <keyboard maltilayout="true">
 	<options>
@@ -6,6 +6,7 @@
 	</options>
 	<layout id="cap" realsize="true" type="caps">
 		<background image="bg_keypad.png" width="480" height="167"/>
+		<changerground image="bg_input_switch.png" width="65" height="152" real_x="415" real_y="8"/>
 		<row>
 			<key real_x="14" real_y="8" real_w="35" real_h="35">
 				<default display="Q"/>
@@ -161,35 +162,35 @@
 		</row>
 		<row>
 			<key real_x="426" real_y="22" real_w="47" real_h="22">
-				<default display=" " action="changer:caps" />
-				<normalimage image="switch_input_eng_cap.png"/>
-				<pushimage image="switch_input_eng_cap_p.png"/>
+				<default display=" " action="changer:caps"/>
+				<normalimage image="switch_input_eng_cap_p.png"/>
+				<pushimage image="switch_input_eng_cap.png"/>
 			</key>
 			<key real_x="426" real_y="48" real_w="47" real_h="22">
-				<default display=" " action="changer:lows" />
-				<normalimage image="switch_input_eng_low.png"/>
-				<pushimage image="switch_input_eng_low_p.png"/>
+				<default display=" " action="changer:lows"/>
+				<normalimage image="switch_input_eng_low_p.png"/>
+				<pushimage image="switch_input_eng_low.png"/>
 			</key>
 			<key real_x="426" real_y="74" real_w="47" real_h="22">
-				<default display=" " action="changer:numbers" />
-				<normalimage image="switch_input_num.png"/>
-				<pushimage image="switch_input_num_p.png"/>
+				<default display=" " action="changer:numbers"/>
+				<normalimage image="switch_input_num_p.png"/>
+				<pushimage image="switch_input_num.png"/>
 			</key>
 			<key real_x="426" real_y="100" real_w="47" real_h="22">
-				<default display=" " action="changer:symbols" />
-				<normalimage image="switch_input_sym.png"/>
-				<pushimage image="switch_input_sym_p.png"/>
+				<default display=" " action="changer:symbols"/>
+				<normalimage image="switch_input_sym_p.png"/>
+				<pushimage image="switch_input_sym.png"/>
 			</key>
 			<key real_x="426" real_y="126" real_w="47" real_h="22">
-				<default display=" " action="changer:Chinese" />
-				<normalimage image="switch_input_ch.png"/>
-				<pushimage image="switch_input_ch_p.png"/>
+				<default display=" " action="changer:Chinese"/>
+				<normalimage image="switch_input_ch_p.png"/>
+				<pushimage image="switch_input_ch.png"/>
 			</key>
 		</row>
-
 	</layout>
 	<layout id="low" realsize="true" type="lows">
 		<background image="bg_keypad.png" width="480" height="167"/>
+		<changerground image="bg_input_switch.png" width="65" height="152" real_x="415" real_y="8"/>
 		<row>
 			<key real_x="14" real_y="8" real_w="35" real_h="35">
 				<default display="q"/>
@@ -343,5 +344,410 @@
 				<pushimage image="key_comm_enter_p.png"/>
 			</key>
 		</row>
+		<row>
+			<key real_x="426" real_y="22" real_w="47" real_h="22">
+				<default display=" " action="changer:caps"/>
+				<normalimage image="switch_input_eng_cap_p.png"/>
+				<pushimage image="switch_input_eng_cap.png"/>
+			</key>
+			<key real_x="426" real_y="48" real_w="47" real_h="22">
+				<default display=" " action="changer:lows"/>
+				<normalimage image="switch_input_eng_low_p.png"/>
+				<pushimage image="switch_input_eng_low.png"/>
+			</key>
+			<key real_x="426" real_y="74" real_w="47" real_h="22">
+				<default display=" " action="changer:numbers"/>
+				<normalimage image="switch_input_num_p.png"/>
+				<pushimage image="switch_input_num.png"/>
+			</key>
+			<key real_x="426" real_y="100" real_w="47" real_h="22">
+				<default display=" " action="changer:symbols"/>
+				<normalimage image="switch_input_sym_p.png"/>
+				<pushimage image="switch_input_sym.png"/>
+			</key>
+			<key real_x="426" real_y="126" real_w="47" real_h="22">
+				<default display=" " action="changer:Chinese"/>
+				<normalimage image="switch_input_ch_p.png"/>
+				<pushimage image="switch_input_ch.png"/>
+			</key>
+		</row>
 	</layout>
+	<layout id="numbers" realsize="true" type="numbers">
+		<background image="bg_keypad.png" width="480" height="167"/>
+		<changerground image="bg_input_switch.png" width="65" height="152" real_x="415" real_y="8"/>
+		<row>
+			<key real_x="14" real_y="8" real_w="35" real_h="35">
+				<default display="1"/>
+				<normalimage image="key_num_1.png"/>
+				<pushimage image="key_num_1_p.png"/>
+			</key>
+			<key real_x="53" real_y="8" real_w="35" real_h="35">
+				<default display="2"/>
+				<normalimage image="key_num_2.png"/>
+				<pushimage image="key_num_2_p.png"/>
+			</key>
+			<key real_x="92" real_y="8" real_w="35" real_h="35">
+				<default display="3"/>
+				<normalimage image="key_num_3.png"/>
+				<pushimage image="key_num_3_p.png"/>
+			</key>
+			<key real_x="131" real_y="8" real_w="35" real_h="35">
+				<default display="4"/>
+				<normalimage image="key_num_4.png"/>
+				<pushimage image="key_num_4_p.png"/>
+			</key>
+			<key real_x="170" real_y="8" real_w="35" real_h="35">
+				<default display="5"/>
+				<normalimage image="key_num_5.png"/>
+				<pushimage image="key_num_5_p.png"/>
+			</key>
+			<key real_x="209" real_y="8" real_w="35" real_h="35">
+				<default display="6"/>
+				<normalimage image="key_num_6.png"/>
+				<pushimage image="key_num_6_p.png"/>
+			</key>
+			<key real_x="248" real_y="8" real_w="35" real_h="35">
+				<default display="7"/>
+				<normalimage image="key_num_7.png"/>
+				<pushimage image="key_num_7_p.png"/>
+			</key>
+			<key real_x="287" real_y="8" real_w="35" real_h="35">
+				<default display="8"/>
+				<normalimage image="key_num_8.png"/>
+				<pushimage image="key_num_8_p.png"/>
+			</key>
+			<key real_x="326" real_y="8" real_w="35" real_h="35">
+				<default display="9"/>
+				<normalimage image="key_num_9.png"/>
+				<pushimage image="key_num_9_p.png"/>
+			</key>
+			<key real_x="365" real_y="8" real_w="35" real_h="35">
+				<default display="0"/>
+				<normalimage image="key_num_0.png"/>
+				<pushimage image="key_num_0_p.png"/>
+			</key>
+		</row>
+		<row>
+			<key real_x="170" real_y="48" real_w="35" real_h="35">
+				<default display="^"/>
+				<normalimage image="key_sym_caret.png"/>
+				<pushimage image="key_sym_caret_p.png"/>
+			</key>
+			<key real_x="209" real_y="48" real_w="35" real_h="35">
+				<default display="("/>
+				<normalimage image="key_sym_open_paren.png"/>
+				<pushimage image="key_sym_open_paren_p.png"/>
+			</key>
+			<key real_x="248" real_y="48" real_w="35" real_h="35">
+				<default display=")"/>
+				<normalimage image="key_sym_close_paren.png"/>
+				<pushimage image="key_sym_close_paren_p.png"/>
+			</key>
+			<key real_x="287" real_y="48" real_w="35" real_h="35">
+				<default display="-"/>
+				<normalimage image="key_sym_minus.png"/>
+				<pushimage image="key_sym_minus_p.png"/>
+			</key>
+			<key real_x="326" real_y="48" real_w="35" real_h="35">
+				<default display="+"/>
+				<normalimage image="key_sym_plus.png"/>
+				<pushimage image="key_sym_plus_p.png"/>
+			</key>
+			<key real_x="365" real_y="48" real_w="35" real_h="35">
+				<default display="="/>
+				<normalimage image="key_sym_equal.png"/>
+				<pushimage image="key_sym_equal_p.png"/>
+			</key>
+		</row>
+		<row>
+			<key real_x="170" real_y="88" real_w="35" real_h="35">
+				<default display="%"/>
+				<normalimage image="key_sym_percent.png"/>
+				<pushimage image="key_sym_percent_p.png"/>
+			</key>
+			<key real_x="209" real_y="88" real_w="35" real_h="35">
+				<default display="*"/>
+				<normalimage image="key_sym_star.png"/>
+				<pushimage image="key_sym_star_p.png"/>
+			</key>
+			<key real_x="248" real_y="88" real_w="35" real_h="35">
+				<default display="&lt;"/>
+				<normalimage image="key_sym_smaller.png"/>
+				<pushimage image="key_sym_smaller_p.png"/>
+			</key>
+			<key real_x="287" real_y="88" real_w="35" real_h="35">
+				<default display="&gt;"/>
+				<normalimage image="key_sym_greater.png"/>
+				<pushimage image="key_sym_greater_p.png"/>
+			</key>
+			<key real_x="326" real_y="88" real_w="35" real_h="35">
+				<default display="."/>
+				<normalimage image="key_sym_period.png"/>
+				<pushimage image="key_sym_period_p.png"/>
+			</key>
+			<key real_x="365" real_y="88" real_w="35" real_h="35">
+				<default display="/"/>
+				<normalimage image="key_sym_slash.png"/>
+				<pushimage image="key_sym_slash_p.png"/>
+			</key>
+		</row>
+		<row>
+			<key real_x="72" real_y="128" real_w="140" real_h="36">
+				<default display=" " action="space"/>
+				<normalimage image="key_comm_space.png"/>
+				<pushimage image="key_comm_space_p.png"/>
+			</key>
+			<key real_x="216" real_y="128" real_w="65" real_h="36">
+				<default display=" " action="backspace"/>
+				<normalimage image="key_comm_backspace.png"/>
+				<pushimage image="key_comm_backspace_p.png"/>
+			</key>
+			<key real_x="285" real_y="128" real_w="65" real_h="36">
+				<default display=" " action="return"/>
+				<normalimage image="key_comm_enter.png"/>
+				<pushimage image="key_comm_enter_p.png"/>
+			</key>
+		</row>
+		<row>
+			<key real_x="426" real_y="22" real_w="47" real_h="22">
+				<default display=" " action="changer:caps"/>
+				<normalimage image="switch_input_eng_cap_p.png"/>
+				<pushimage image="switch_input_eng_cap.png"/>
+			</key>
+			<key real_x="426" real_y="48" real_w="47" real_h="22">
+				<default display=" " action="changer:lows"/>
+				<normalimage image="switch_input_eng_low_p.png"/>
+				<pushimage image="switch_input_eng_low.png"/>
+			</key>
+			<key real_x="426" real_y="74" real_w="47" real_h="22">
+				<default display=" " action="changer:numbers"/>
+				<normalimage image="switch_input_num_p.png"/>
+				<pushimage image="switch_input_num.png"/>
+			</key>
+			<key real_x="426" real_y="100" real_w="47" real_h="22">
+				<default display=" " action="changer:symbols"/>
+				<normalimage image="switch_input_sym_p.png"/>
+				<pushimage image="switch_input_sym.png"/>
+			</key>
+			<key real_x="426" real_y="126" real_w="47" real_h="22">
+				<default display=" " action="changer:Chinese"/>
+				<normalimage image="switch_input_ch_p.png"/>
+				<pushimage image="switch_input_ch.png"/>
+			</key>
+		</row>
+	</layout>
+	<layout id="symbols" realsize="true" type="symbols">
+		<background image="bg_keypad.png" width="480" height="167"/>
+		<changerground image="bg_input_switch.png" width="65" height="152" real_x="415" real_y="8"/>
+		<row>
+			<key real_x="14" real_y="8" real_w="35" real_h="35">
+				<default display="`"/>
+				<normalimage image="key_sym_grave_accent.png"/>
+				<pushimage image="key_sym_grave_accent_p.png"/>
+			</key>
+			<key real_x="53" real_y="8" real_w="35" real_h="35">
+				<default display="~"/>
+				<normalimage image="key_sym_tilde.png"/>
+				<pushimage image="key_sym_tilde_p.png"/>
+			</key>
+			<key real_x="92" real_y="8" real_w="35" real_h="35">
+				<default display="!"/>
+				<normalimage image="key_sym_exclamation.png"/>
+				<pushimage image="key_sym_exclamation_p.png"/>
+			</key>
+			<key real_x="131" real_y="8" real_w="35" real_h="35">
+				<default display="@"/>
+				<normalimage image="key_sym_at.png"/>
+				<pushimage image="key_sym_at_p.png"/>
+			</key>
+			<key real_x="170" real_y="8" real_w="35" real_h="35">
+				<default display="#"/>
+				<normalimage image="key_sym_sharp.png"/>
+				<pushimage image="key_sym_sharp_p.png"/>
+			</key>
+			<key real_x="209" real_y="8" real_w="35" real_h="35">
+				<default display="$"/>
+				<normalimage image="key_sym_dollar.png"/>
+				<pushimage image="key_sym_dollar_p.png"/>
+			</key>
+			<key real_x="248" real_y="8" real_w="35" real_h="35">
+				<default display="%"/>
+				<normalimage image="key_sym_percent.png"/>
+				<pushimage image="key_sym_percent_p.png"/>
+			</key>
+			<key real_x="287" real_y="8" real_w="35" real_h="35">
+				<default display="^"/>
+				<normalimage image="key_sym_caret.png"/>
+				<pushimage image="key_sym_caret_p.png"/>
+			</key>
+			<key real_x="326" real_y="8" real_w="35" real_h="35">
+				<default display="&amp;"/>
+				<normalimage image="key_sym_ampersand.png"/>
+				<pushimage image="key_sym_ampersand_p.png"/>
+			</key>
+			<key real_x="365" real_y="8" real_w="35" real_h="35">
+				<default display="*"/>
+				<normalimage image="key_sym_star.png"/>
+				<pushimage image="key_sym_star_p.png"/>
+			</key>
+		</row>
+		<row>
+			<key real_x="14" real_y="48" real_w="35" real_h="35">
+				<default display="("/>
+				<normalimage image="key_sym_open_paren.png"/>
+				<pushimage image="key_sym_open_paren_p.png"/>
+			</key>
+			<key real_x="53" real_y="48" real_w="35" real_h="35">
+				<default display=")"/>
+				<normalimage image="key_sym_close_paren.png"/>
+				<pushimage image="key_sym_close_paren_p.png"/>
+			</key>
+			<key real_x="92" real_y="48" real_w="35" real_h="35">
+				<default display="{"/>
+				<normalimage image="key_sym_open_curly.png"/>
+				<pushimage image="key_sym_open_curly_p.png"/>
+			</key>
+			<key real_x="131" real_y="48" real_w="35" real_h="35">
+				<default display="}"/>
+				<normalimage image="key_sym_close_curly.png"/>
+				<pushimage image="key_sym_close_curly_p.png"/>
+			</key>
+			<key real_x="170" real_y="48" real_w="35" real_h="35">
+				<default display="["/>
+				<normalimage image="key_sym_open_bracket.png"/>
+				<pushimage image="key_sym_open_bracket_p.png"/>
+			</key>
+			<key real_x="209" real_y="48" real_w="35" real_h="35">
+				<default display="]"/>
+				<normalimage image="key_sym_close_bracket.png"/>
+				<pushimage image="key_sym_close_bracket_p.png"/>
+			</key>
+			<key real_x="248" real_y="48" real_w="35" real_h="35">
+				<default display="_"/>
+				<normalimage image="key_sym_underscore.png"/>
+				<pushimage image="key_sym_underscore_p.png"/>
+			</key>
+			<key real_x="287" real_y="48" real_w="35" real_h="35">
+				<default display="-"/>
+				<normalimage image="key_sym_minus.png"/>
+				<pushimage image="key_sym_minus_p.png"/>
+			</key>
+			<key real_x="326" real_y="48" real_w="35" real_h="35">
+				<default display="+"/>
+				<normalimage image="key_sym_plus.png"/>
+				<pushimage image="key_sym_plus_p.png"/>
+			</key>
+			<key real_x="365" real_y="48" real_w="35" real_h="35">
+				<default display="="/>
+				<normalimage image="key_sym_equal.png"/>
+				<pushimage image="key_sym_equal_p.png"/>
+			</key>
+		</row>
+		<row>
+			<key real_x="14" real_y="88" real_w="35" real_h="35">
+				<default display="&lt;"/>
+				<normalimage image="key_sym_smaller.png"/>
+				<pushimage image="key_sym_smaller_p.png"/>
+			</key>
+			<key real_x="53" real_y="88" real_w="35" real_h="35">
+				<default display="&gt;"/>
+				<normalimage image="key_sym_greater.png"/>
+				<pushimage image="key_sym_greater_p.png"/>
+			</key>
+			<key real_x="92" real_y="88" real_w="35" real_h="35">
+				<default display="|"/>
+				<normalimage image="key_sym_line.png"/>
+				<pushimage image="key_sym_line_p.png"/>
+			</key>
+			<key real_x="131" real_y="88" real_w="35" real_h="35">
+				<default display="?"/>
+				<normalimage image="key_sym_question.png"/>
+				<pushimage image="key_sym_question_p.png"/>
+			</key>
+			<key real_x="170" real_y="88" real_w="35" real_h="35">
+				<default display=";"/>
+				<normalimage image="key_sym_semicolon.png"/>
+				<pushimage image="key_sym_semicolon_p.png"/>
+			</key>
+			<key real_x="209" real_y="88" real_w="35" real_h="35">
+				<default display=":"/>
+				<normalimage image="key_sym_colon.png"/>
+				<pushimage image="key_sym_colon_p.png"/>
+			</key>
+			<key real_x="248" real_y="88" real_w="35" real_h="35">
+				<default display=","/>
+				<normalimage image="key_sym_comma.png"/>
+				<pushimage image="key_sym_comma_p.png"/>
+			</key>
+			<key real_x="287" real_y="88" real_w="35" real_h="35">
+				<default display="."/>
+				<normalimage image="key_sym_period.png"/>
+				<pushimage image="key_sym_period_p.png"/>
+			</key>
+			<key real_x="326" real_y="88" real_w="35" real_h="35">
+				<default display="'"/>
+				<normalimage image="key_sym_quote.png"/>
+				<pushimage image="key_sym_quote_p.png"/>
+			</key>
+			<key real_x="365" real_y="88" real_w="35" real_h="35">
+				<default display='"'/>
+				<normalimage image="key_sym_quotes.png"/>
+				<pushimage image="key_sym_quotes_p.png"/>
+			</key>
+		</row>
+		<row>
+			<key real_x="14" real_y="128" real_w="35" real_h="35">
+				<default display="/"/>
+				<normalimage image="key_sym_slash.png"/>
+				<pushimage image="key_sym_slash_p.png"/>
+			</key>
+			<key real_x="72" real_y="128" real_w="140" real_h="36">
+				<default display=" " action="space"/>
+				<normalimage image="key_comm_space.png"/>
+				<pushimage image="key_comm_space_p.png"/>
+			</key>
+			<key real_x="216" real_y="128" real_w="65" real_h="36">
+				<default display=" " action="backspace"/>
+				<normalimage image="key_comm_backspace.png"/>
+				<pushimage image="key_comm_backspace_p.png"/>
+			</key>
+			<key real_x="285" real_y="128" real_w="65" real_h="36">
+				<default display=" " action="return"/>
+				<normalimage image="key_comm_enter.png"/>
+				<pushimage image="key_comm_enter_p.png"/>
+			</key>
+			<key real_x="365" real_y="128" real_w="35" real_h="35">
+				<default display="\"/>
+				<normalimage image="key_sym_slash2.png"/>
+				<pushimage image="key_sym_slash2_p.png"/>
+			</key>
+		</row>
+		<row>
+			<key real_x="426" real_y="22" real_w="47" real_h="22">
+				<default display=" " action="changer:caps"/>
+				<normalimage image="switch_input_eng_cap_p.png"/>
+				<pushimage image="switch_input_eng_cap.png"/>
+			</key>
+			<key real_x="426" real_y="48" real_w="47" real_h="22">
+				<default display=" " action="changer:lows"/>
+				<normalimage image="switch_input_eng_low_p.png"/>
+				<pushimage image="switch_input_eng_low.png"/>
+			</key>
+			<key real_x="426" real_y="74" real_w="47" real_h="22">
+				<default display=" " action="changer:numbers"/>
+				<normalimage image="switch_input_num_p.png"/>
+				<pushimage image="switch_input_num.png"/>
+			</key>
+			<key real_x="426" real_y="100" real_w="47" real_h="22">
+				<default display=" " action="changer:symbols"/>
+				<normalimage image="switch_input_sym_p.png"/>
+				<pushimage image="switch_input_sym.png"/>
+			</key>
+			<key real_x="426" real_y="126" real_w="47" real_h="22">
+				<default display=" " action="changer:Chinese"/>
+				<normalimage image="switch_input_ch_p.png"/>
+				<pushimage image="switch_input_ch.png"/>
+			</key>
+		</row>
+	</layout>
 </keyboard>

Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/src/config-parser.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/src/config-parser.c	2007-03-05 19:53:06 UTC (rev 1251)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/src/config-parser.c	2007-03-06 07:30:14 UTC (rev 1252)
@@ -570,6 +570,7 @@
 {
   const char            *val;
   Bool                  realsize = False;
+  MBKeyboardLayoutType  type = 0;
 
   if ((val = attr_get_val("realsize", attr)) != NULL)
     {
@@ -577,6 +578,15 @@
         realsize = True;
     }
 
+  if ((val = attr_get_val("type", attr)) != NULL)
+    {
+      if ((type = config_str_to_layouttype(val)) == 0)
+        {
+          set_error (state, "Unkown layout type");
+          return;
+        }
+    }
+
   if ((val = attr_get_val("id", attr)) == NULL)
     {
       set_error(state, "Attribute 'id' is required");
@@ -584,8 +594,12 @@
     }
 
   state->current_layout = mb_kbd_layout_new(state->keyboard, val);
+
   mb_kbd_layout_set_realsize(state->current_layout, realsize);
 
+  if (type != 0)
+    mb_kbd_layout_set_type(state->current_layout, type);
+
   mb_kbd_add_layout(state->keyboard, state->current_layout);
 }
 
@@ -714,6 +728,68 @@
     }
 }
 
+static void
+config_handle_layout_changerground(MBKeyboardConfigState *state,
+                                   const char **attr)
+{
+  MBKeyboardImage *img;
+  const char *val;
+  char  buf[512];
+
+  /* only realsize mode support the changer background image */
+  if (!mb_kbd_layout_realsize(state->current_layout))
+    return;
+
+  if ((val = attr_get_val("image", attr)) == NULL)
+    {
+      set_error(state, "Changerground Attribute 'image' is required");
+      return;
+    }
+
+  if (val[0] != '/')
+    {
+      snprintf(buf, 512, "%s/%s", PKGDATADIR, val);
+
+      if (!util_file_readable(buf))
+        snprintf(buf, 512, "%s/.matchbox/%s", getenv("HOME"), val);
+
+      img = mb_kbd_image_new (state->keyboard, buf);
+    }
+  else
+    {
+      img = mb_kbd_image_new (state->keyboard, val);
+    }
+
+  if (img == NULL)
+    fprintf(stderr, "load img fail\n");
+
+  mb_kbd_layout_set_changerground(state->current_layout, img);
+
+  if ((val = attr_get_val("width", attr)) != NULL)
+    {
+      if (atoi(val) > 0)
+        mb_kbd_layout_set_changerground_w(state->current_layout, atoi(val));
+    }
+
+  if ((val = attr_get_val("height", attr)) != NULL)
+    {
+      if (atoi(val) > 0)
+        mb_kbd_layout_set_changerground_h(state->current_layout, atoi(val));
+    }
+
+  if ((val = attr_get_val("real_x", attr)) != NULL)
+    {
+      if (atoi(val) > 0)
+        mb_kbd_layout_set_changerground_x(state->current_layout, atoi(val));
+    }
+
+  if ((val = attr_get_val("real_y", attr)) != NULL)
+    {
+      if (atoi(val) > 0)
+        mb_kbd_layout_set_changerground_y(state->current_layout, atoi(val));
+    }
+}
+
 static void 
 config_xml_start_cb(void *data, const char *tag, const char **attr)
 {
@@ -754,6 +830,10 @@
     {
       config_handle_layout_background(state, attr);
     }
+  else if (streq(tag, "changerground"))
+    {
+      config_handle_layout_changerground(state, attr);
+    }
 
   if (state->error)
     {

Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-key.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-key.c	2007-03-05 19:53:06 UTC (rev 1251)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-key.c	2007-03-06 07:30:14 UTC (rev 1252)
@@ -556,7 +556,20 @@
 	*/
 	break;
       }
+    /* If the key is a layout changer key */
+    case MBKeyboardKeyActionLayoutChanger:
+      {
+        MBKeyboardLayoutType  type;
 
+        type = mb_kbd_get_changer_action(key, state);
+        if (type == mb_kbd_layout_get_type(key->kbd->selected_layout))
+          break;
+
+        if (mb_kbd_change_layout(key->kbd, type))
+          queue_full_kbd_redraw = True;
+        break;
+      }
+
     default:
       break;
     }  
@@ -624,7 +637,14 @@
 	    break;
 	  }
     }
+  else if (mb_kbd_key_get_action_type(key, state) == MBKeyboardKeyActionLayoutChanger)
+    {
+      if(mb_kbd_get_changer_action(key, state) == mb_kbd_layout_get_type(kbd->selected_layout))
+        return True;
 
+      return False;
+    }
+
   return False;
 }
 

Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-layout.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-layout.c	2007-03-05 19:53:06 UTC (rev 1251)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-layout.c	2007-03-06 07:30:14 UTC (rev 1252)
@@ -23,13 +23,21 @@
 {
   MBKeyboard       *kbd;  
   char             *id;
-  MBKeyboardImage  *background;
   List             *rows;
 
+  /* background image and changer background */
+  MBKeyboardImage  *background;
+
+  MBKeyboardImage  *changerground;
+  int              changer_x, changer_y, changer_w, changer_h;
+
   /* real size */
   Bool             realsize;
   int              width;
   int              height;
+
+  /* layout type */
+  MBKeyboardLayoutType type;
 };
 
 
@@ -47,6 +55,20 @@
 }
 
 void
+mb_kbd_layout_append_row(MBKeyboardLayout *layout,
+			 MBKeyboardRow    *row)
+{
+  layout->rows = util_list_append(layout->rows, (pointer)row);
+}
+
+List*
+mb_kbd_layout_rows(MBKeyboardLayout *layout)
+{
+  return util_list_get_first(layout->rows);
+}
+
+/* background image */
+void
 mb_kbd_layout_set_background(MBKeyboardLayout *layout,
                              MBKeyboardImage  *background)
 {
@@ -59,22 +81,76 @@
   return layout->background;
 }
 
+/* changer image */
 void
-mb_kbd_layout_append_row(MBKeyboardLayout *layout,
-			 MBKeyboardRow    *row)
+mb_kbd_layout_set_changerground(MBKeyboardLayout *layout,
+                                MBKeyboardImage  *changerground)
 {
-  layout->rows = util_list_append(layout->rows, (pointer)row);
+  layout->changerground = changerground;
 }
 
-List*
-mb_kbd_layout_rows(MBKeyboardLayout *layout)
+MBKeyboardImage *
+mb_kbd_layout_get_changerground(MBKeyboardLayout *layout)
 {
-  return util_list_get_first(layout->rows);
+  return layout->changerground;
 }
 
+void
+mb_kbd_layout_set_changerground_x(MBKeyboardLayout *layout,
+                                  int               x)
+{
+  layout->changer_x = x;
+}
+
+int
+mb_kbd_layout_get_changerground_x(MBKeyboardLayout *layout)
+{
+  return layout->changer_x;
+}
+
+void
+mb_kbd_layout_set_changerground_y(MBKeyboardLayout *layout,
+                                  int               y)
+{
+  layout->changer_y = y;
+}
+
+int
+mb_kbd_layout_get_changerground_y(MBKeyboardLayout *layout)
+{
+  return layout->changer_y;
+}
+
+void
+mb_kbd_layout_set_changerground_w(MBKeyboardLayout *layout,
+                                  int               w)
+{
+  layout->changer_w = w;
+}
+
+int
+mb_kbd_layout_get_changerground_w(MBKeyboardLayout *layout)
+{
+  return layout->changer_w;
+}
+
+void
+mb_kbd_layout_set_changerground_h(MBKeyboardLayout *layout,
+                                  int               h)
+{
+  layout->changer_h = h;
+}
+
+int
+mb_kbd_layout_get_changerground_h(MBKeyboardLayout *layout)
+{
+  return layout->changer_h;
+}
+
 /* real size */
 void
-mb_kbd_layout_set_realsize(MBKeyboardLayout *layout, int realsize)
+mb_kbd_layout_set_realsize(MBKeyboardLayout *layout,
+                           int realsize)
 {
   layout->realsize = realsize;
 }
@@ -86,7 +162,8 @@
 }
 
 void
-mb_kbd_layout_set_width(MBKeyboardLayout *layout, int width)
+mb_kbd_layout_set_width(MBKeyboardLayout *layout,
+                        int width)
 {
   layout->width = width;
 }
@@ -98,7 +175,8 @@
 }
 
 void
-mb_kbd_layout_set_height(MBKeyboardLayout *layout, int height)
+mb_kbd_layout_set_height(MBKeyboardLayout *layout,
+                         int height)
 {
   layout->height = height;
 }
@@ -108,3 +186,17 @@
 {
   return layout->height;
 }
+
+/* layout type */
+void
+mb_kbd_layout_set_type(MBKeyboardLayout     *layout,
+                       MBKeyboardLayoutType  type)
+{
+  layout->type = type;
+}
+
+MBKeyboardLayoutType
+mb_kbd_layout_get_type(MBKeyboardLayout *layout)
+{
+  return layout->type;
+}

Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-ui-xft-backend.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-ui-xft-backend.c	2007-03-05 19:53:06 UTC (rev 1251)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard-ui-xft-backend.c	2007-03-06 07:30:14 UTC (rev 1252)
@@ -308,11 +308,14 @@
 {
   MBKeyboardUIBackendXft *xft_backend = NULL;
   MBKeyboardImage        *image;
+  MBKeyboardLayout       *layout;
 
   xft_backend = (MBKeyboardUIBackendXft*)mb_kbd_ui_backend(ui);
 
-  image = mb_kbd_layout_get_background(mb_kbd_get_selected_layout(mb_kbd_ui_kbd(ui)));
+  layout = mb_kbd_get_selected_layout(mb_kbd_ui_kbd(ui));
 
+  image = mb_kbd_layout_get_background(layout);
+
   /* Background */
   if (image == NULL)
     {
@@ -335,8 +338,8 @@
     {
       int w, h;
 
-      w = mb_kbd_image_width (image);
-      h = mb_kbd_image_height (image);
+      w = mb_kbd_layout_get_width (layout);
+      h = mb_kbd_layout_get_height (layout);
 
       XRenderComposite(mb_kbd_ui_x_display(ui),
                        PictOpOver,
@@ -346,6 +349,26 @@
                        0, 0, 0, 0, 0, 0, w, h);
     }
 
+  if (mb_kbd_layout_realsize(layout))
+    {
+       if ((image = mb_kbd_layout_get_changerground(layout)) != NULL)
+         {
+           int x, y, w, h;
+
+           x = mb_kbd_layout_get_changerground_x(layout);
+           y = mb_kbd_layout_get_changerground_y(layout);
+           w = mb_kbd_layout_get_changerground_w(layout);
+           h = mb_kbd_layout_get_changerground_h(layout);
+
+           XRenderComposite(mb_kbd_ui_x_display(ui),
+                            PictOpOver,
+                            mb_kbd_image_render_picture(image),
+                            None,
+                            XftDrawPicture(xft_backend->xft_backbuffer),
+                            0, 0, 0, 0, x, y, w, h);
+         }
+    }
+
 }
 
 static int

Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard.c	2007-03-05 19:53:06 UTC (rev 1251)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard.c	2007-03-06 07:30:14 UTC (rev 1252)
@@ -192,6 +192,28 @@
   return MBKeyboardKeyStateNormal;
 }
 
+/* change the layout */
+Bool
+mb_kbd_change_layout(MBKeyboard          *kbd,
+                     MBKeyboardLayoutType type)
+{
+  int                i = 0;
+  MBKeyboardLayout  *layout;
+
+  while ((layout = (MBKeyboardLayout *)util_list_get_nth_data(kbd->layouts, i)) 
+         != NULL)
+    {
+      if (type == mb_kbd_layout_get_type(layout))
+        {
+          kbd->selected_layout = layout;
+          return True;
+        }
+      i++;
+    }
+
+  return False;
+}
+
 void
 mb_kbd_redraw(MBKeyboard *kb)
 {

Modified: trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard.h
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard.h	2007-03-05 19:53:06 UTC (rev 1251)
+++ trunk/src/target/OM-2007/applications/openmoko-keyboard/src/matchbox-keyboard.h	2007-03-06 07:30:14 UTC (rev 1252)
@@ -318,6 +318,10 @@
 MBKeyboardKeyStateType
 mb_kbd_keys_current_state(MBKeyboard *kbd);
 
+Bool
+mb_kbd_change_layout(MBKeyboard          *kbd,
+                     MBKeyboardLayoutType type);
+
 void
 mb_kbd_set_extended(MBKeyboard *kb, boolean extend);
 
@@ -366,23 +370,68 @@
 mb_kbd_layout_rows(MBKeyboardLayout *layout);
 
 void
-mb_kbd_layout_set_realsize(MBKeyboardLayout *layout, int realsize);
+mb_kbd_layout_set_realsize(MBKeyboardLayout *layout,
+                           int realsize);
 
 int
 mb_kbd_layout_realsize(MBKeyboardLayout *layout);
 
 void
-mb_kbd_layout_set_width(MBKeyboardLayout *layout, int width);
+mb_kbd_layout_set_width(MBKeyboardLayout *layout,
+                        int width);
 
 int
 mb_kbd_layout_get_width(MBKeyboardLayout *layout);
 
 void
-mb_kbd_layout_set_height(MBKeyboardLayout *layout, int height);
+mb_kbd_layout_set_height(MBKeyboardLayout *layout,
+                         int height);
 
 int
 mb_kbd_layout_get_height(MBKeyboardLayout *layout);
 
+void
+mb_kbd_layout_set_type(MBKeyboardLayout     *layout,
+                       MBKeyboardLayoutType  type);
+
+MBKeyboardLayoutType
+mb_kbd_layout_get_type(MBKeyboardLayout *layout);
+
+void
+mb_kbd_layout_set_changerground(MBKeyboardLayout *layout,
+                                MBKeyboardImage  *changerground);
+
+MBKeyboardImage *
+mb_kbd_layout_get_changerground(MBKeyboardLayout *layout);
+
+void
+mb_kbd_layout_set_changerground_x(MBKeyboardLayout *layout,
+                                  int               x);
+
+int
+mb_kbd_layout_get_changerground_x(MBKeyboardLayout *layout);
+
+void
+mb_kbd_layout_set_changerground_y(MBKeyboardLayout *layout,
+                                  int               y);
+
+int
+mb_kbd_layout_get_changerground_y(MBKeyboardLayout *layout);
+
+void
+mb_kbd_layout_set_changerground_w(MBKeyboardLayout *layout,
+                                  int               w);
+
+int
+mb_kbd_layout_get_changerground_w(MBKeyboardLayout *layout);
+
+void
+mb_kbd_layout_set_changerground_h(MBKeyboardLayout *layout,
+                                  int               h);
+
+int
+mb_kbd_layout_get_changerground_h(MBKeyboardLayout *layout);
+
 /**** Rows ******/
 
 MBKeyboardRow*





More information about the commitlog mailing list