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="<"/>
+ <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=">"/>
+ <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="&"/>
+ <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="<"/>
+ <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=">"/>
+ <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