Mercurial > libdvdnav.hg
annotate highlight.c @ 249:5d643668f1e3 src
I added this code myself a long time ago, but now I am quite convinced that
it is wrong: Why would we filter out SPU stream change events that switch
SPUs off? This breaks watching the trailer on the RC2 of "Girl, interrupted",
because you always get unwanted subtitles.
When I added this code, it fixed a problem with the RC2 of "Terminator", but
I cannot reproduce this problem any more. Back then, the menu highlights would
not show up, but they do now. I assume the problem really got fixed with proper
support for forced subtitles in xine, so this crappy workaround here can go
away.
After all, this way it is more symmetric to audio stream change events,
because these are not filtered.
author | mroi |
---|---|
date | Sun, 12 Sep 2004 15:12:43 +0000 |
parents | 10af49ee5118 |
children | bd734ab914d0 |
rev | line source |
---|---|
0 | 1 /* |
2 * Copyright (C) 2000 Rich Wareham <richwareham@users.sourceforge.net> | |
3 * | |
4 * This file is part of libdvdnav, a DVD navigation library. | |
5 * | |
6 * libdvdnav is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * libdvdnav is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License | |
17 * along with this program; if not, write to the Free Software | |
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA | |
19 * | |
20 * $Id$ | |
21 * | |
22 */ | |
23 | |
24 #ifdef HAVE_CONFIG_H | |
25 #include "config.h" | |
26 #endif | |
27 | |
22
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
28 #include <assert.h> |
169 | 29 #include "nav_types.h" |
0 | 30 #include "dvdnav_internal.h" |
31 | |
114 | 32 /* |
33 #define BUTTON_TESTING | |
34 */ | |
35 | |
0 | 36 #ifdef BUTTON_TESTING |
114 | 37 |
169 | 38 #include "nav_print.h" |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
39 |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
40 static void print_time(dvd_time_t *dtime) { |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
41 const char *rate; |
114 | 42 |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
43 assert((dtime->hour>>4) < 0xa && (dtime->hour&0xf) < 0xa); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
44 assert((dtime->minute>>4) < 0x7 && (dtime->minute&0xf) < 0xa); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
45 assert((dtime->second>>4) < 0x7 && (dtime->second&0xf) < 0xa); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
46 assert((dtime->frame_u&0xf) < 0xa); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
47 |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
48 fprintf(MSG_OUT,"%02x:%02x:%02x.%02x", |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
49 dtime->hour, |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
50 dtime->minute, |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
51 dtime->second, |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
52 dtime->frame_u & 0x3f); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
53 switch((dtime->frame_u & 0xc0) >> 6) { |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
54 case 1: |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
55 rate = "25.00"; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
56 break; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
57 case 3: |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
58 rate = "29.97"; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
59 break; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
60 default: |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
61 rate = "(please send a bug report)"; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
62 break; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
63 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
64 fprintf(MSG_OUT," @ %s fps", rate); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
65 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
66 |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
67 static void nav_print_PCI_GI(pci_gi_t *pci_gi) { |
196 | 68 int32_t i; |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
69 |
114 | 70 fprintf(MSG_OUT,"libdvdnav: pci_gi:\n"); |
71 fprintf(MSG_OUT,"libdvdnav: nv_pck_lbn 0x%08x\n", pci_gi->nv_pck_lbn); | |
72 fprintf(MSG_OUT,"libdvdnav: vobu_cat 0x%04x\n", pci_gi->vobu_cat); | |
73 fprintf(MSG_OUT,"libdvdnav: vobu_uop_ctl 0x%08x\n", *(uint32_t*)&pci_gi->vobu_uop_ctl); | |
74 fprintf(MSG_OUT,"libdvdnav: vobu_s_ptm 0x%08x\n", pci_gi->vobu_s_ptm); | |
75 fprintf(MSG_OUT,"libdvdnav: vobu_e_ptm 0x%08x\n", pci_gi->vobu_e_ptm); | |
76 fprintf(MSG_OUT,"libdvdnav: vobu_se_e_ptm 0x%08x\n", pci_gi->vobu_se_e_ptm); | |
77 fprintf(MSG_OUT,"libdvdnav: e_eltm "); | |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
78 print_time(&pci_gi->e_eltm); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
79 fprintf(MSG_OUT,"\n"); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
80 |
114 | 81 fprintf(MSG_OUT,"libdvdnav: vobu_isrc \""); |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
82 for(i = 0; i < 32; i++) { |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
83 char c = pci_gi->vobu_isrc[i]; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
84 if((c >= ' ') && (c <= '~')) |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
85 fprintf(MSG_OUT,"%c", c); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
86 else |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
87 fprintf(MSG_OUT,"."); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
88 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
89 fprintf(MSG_OUT,"\"\n"); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
90 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
91 |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
92 static void nav_print_NSML_AGLI(nsml_agli_t *nsml_agli) { |
196 | 93 int32_t i, j = 0; |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
94 |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
95 for(i = 0; i < 9; i++) |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
96 j |= nsml_agli->nsml_agl_dsta[i]; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
97 if(j == 0) |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
98 return; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
99 |
114 | 100 fprintf(MSG_OUT,"libdvdnav: nsml_agli:\n"); |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
101 for(i = 0; i < 9; i++) |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
102 if(nsml_agli->nsml_agl_dsta[i]) |
114 | 103 fprintf(MSG_OUT,"libdvdnav: nsml_agl_c%d_dsta 0x%08x\n", i + 1, |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
104 nsml_agli->nsml_agl_dsta[i]); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
105 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
106 |
196 | 107 static void nav_print_HL_GI(hl_gi_t *hl_gi, int32_t *btngr_ns, int32_t *btn_ns) { |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
108 |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
109 if((hl_gi->hli_ss & 0x03) == 0) |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
110 return; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
111 |
114 | 112 fprintf(MSG_OUT,"libdvdnav: hl_gi:\n"); |
113 fprintf(MSG_OUT,"libdvdnav: hli_ss 0x%01x\n", hl_gi->hli_ss & 0x03); | |
114 fprintf(MSG_OUT,"libdvdnav: hli_s_ptm 0x%08x\n", hl_gi->hli_s_ptm); | |
115 fprintf(MSG_OUT,"libdvdnav: hli_e_ptm 0x%08x\n", hl_gi->hli_e_ptm); | |
116 fprintf(MSG_OUT,"libdvdnav: btn_se_e_ptm 0x%08x\n", hl_gi->btn_se_e_ptm); | |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
117 |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
118 *btngr_ns = hl_gi->btngr_ns; |
114 | 119 fprintf(MSG_OUT,"libdvdnav: btngr_ns %d\n", hl_gi->btngr_ns); |
120 fprintf(MSG_OUT,"libdvdnav: btngr%d_dsp_ty 0x%02x\n", 1, hl_gi->btngr1_dsp_ty); | |
121 fprintf(MSG_OUT,"libdvdnav: btngr%d_dsp_ty 0x%02x\n", 2, hl_gi->btngr2_dsp_ty); | |
122 fprintf(MSG_OUT,"libdvdnav: btngr%d_dsp_ty 0x%02x\n", 3, hl_gi->btngr3_dsp_ty); | |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
123 |
114 | 124 fprintf(MSG_OUT,"libdvdnav: btn_ofn %d\n", hl_gi->btn_ofn); |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
125 *btn_ns = hl_gi->btn_ns; |
114 | 126 fprintf(MSG_OUT,"libdvdnav: btn_ns %d\n", hl_gi->btn_ns); |
127 fprintf(MSG_OUT,"libdvdnav: nsl_btn_ns %d\n", hl_gi->nsl_btn_ns); | |
128 fprintf(MSG_OUT,"libdvdnav: fosl_btnn %d\n", hl_gi->fosl_btnn); | |
129 fprintf(MSG_OUT,"libdvdnav: foac_btnn %d\n", hl_gi->foac_btnn); | |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
130 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
131 |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
132 static void nav_print_BTN_COLIT(btn_colit_t *btn_colit) { |
196 | 133 int32_t i, j; |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
134 |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
135 j = 0; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
136 for(i = 0; i < 6; i++) |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
137 j |= btn_colit->btn_coli[i/2][i&1]; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
138 if(j == 0) |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
139 return; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
140 |
114 | 141 fprintf(MSG_OUT,"libdvdnav: btn_colit:\n"); |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
142 for(i = 0; i < 3; i++) |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
143 for(j = 0; j < 2; j++) |
114 | 144 fprintf(MSG_OUT,"libdvdnav: btn_cqoli %d %s_coli: %08x\n", |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
145 i, (j == 0) ? "sl" : "ac", |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
146 btn_colit->btn_coli[i][j]); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
147 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
148 |
196 | 149 static void nav_print_BTNIT(btni_t *btni_table, int32_t btngr_ns, int32_t btn_ns) { |
150 int32_t i, j, k; | |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
151 |
114 | 152 fprintf(MSG_OUT,"libdvdnav: btnit:\n"); |
153 fprintf(MSG_OUT,"libdvdnav: btngr_ns: %i\n", btngr_ns); | |
154 fprintf(MSG_OUT,"libdvdnav: btn_ns: %i\n", btn_ns); | |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
155 |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
156 if(btngr_ns == 0) |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
157 return; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
158 |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
159 for(i = 0; i < btngr_ns; i++) { |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
160 for(j = 0; j < (36 / btngr_ns); j++) { |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
161 if(j < btn_ns) { |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
162 btni_t *btni = &btni_table[(36 / btngr_ns) * i + j]; |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
163 |
114 | 164 fprintf(MSG_OUT,"libdvdnav: group %d btni %d: ", i+1, j+1); |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
165 fprintf(MSG_OUT,"btn_coln %d, auto_action_mode %d\n", |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
166 btni->btn_coln, btni->auto_action_mode); |
114 | 167 fprintf(MSG_OUT,"libdvdnav: coords (%d, %d) .. (%d, %d)\n", |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
168 btni->x_start, btni->y_start, btni->x_end, btni->y_end); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
169 |
114 | 170 fprintf(MSG_OUT,"libdvdnav: up %d, ", btni->up); |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
171 fprintf(MSG_OUT,"down %d, ", btni->down); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
172 fprintf(MSG_OUT,"left %d, ", btni->left); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
173 fprintf(MSG_OUT,"right %d\n", btni->right); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
174 for(k = 0; k < 8; k++) { |
114 | 175 fprintf(MSG_OUT, "libdvdnav: %02x ", btni->cmd.bytes[k]); |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
176 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
177 fprintf(MSG_OUT, "| "); |
166 | 178 #ifdef TRACE |
153 | 179 vm_print_mnemonic(&btni->cmd); |
166 | 180 #endif |
114 | 181 fprintf(MSG_OUT, "\n"); |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
182 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
183 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
184 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
185 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
186 |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
187 static void nav_print_HLI(hli_t *hli) { |
196 | 188 int32_t btngr_ns = 0, btn_ns = 0; |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
189 |
114 | 190 fprintf(MSG_OUT,"libdvdnav: hli:\n"); |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
191 nav_print_HL_GI(&hli->hl_gi, & btngr_ns, & btn_ns); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
192 nav_print_BTN_COLIT(&hli->btn_colit); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
193 nav_print_BTNIT(hli->btnit, btngr_ns, btn_ns); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
194 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
195 |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
196 void nav_print_PCI(pci_t *pci) { |
114 | 197 fprintf(MSG_OUT,"libdvdnav: pci packet:\n"); |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
198 nav_print_PCI_GI(&pci->pci_gi); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
199 nav_print_NSML_AGLI(&pci->nsml_agli); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
200 nav_print_HLI(&pci->hli); |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
201 } |
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
202 |
114 | 203 #endif |
86
129ac4af16a4
Improve debugging output to help with debugging button activations.
jcdutton
parents:
76
diff
changeset
|
204 |
0 | 205 |
206 /* Highlighting API calls */ | |
207 | |
196 | 208 dvdnav_status_t dvdnav_get_current_highlight(dvdnav_t *this, int32_t *button) { |
114 | 209 |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
210 if(!this || !button) { |
114 | 211 printerr("Passed a NULL pointer."); |
193 | 212 return DVDNAV_STATUS_ERR; |
114 | 213 } |
0 | 214 |
215 /* Simply return the appropriate value based on the SPRM */ | |
205
ba43bdbb07e8
Update to allow events sent to the gui to tell it whether we are in a button or not.
jcdutton
parents:
197
diff
changeset
|
216 if(((*button) = this->position_current.button) == -1) |
ba43bdbb07e8
Update to allow events sent to the gui to tell it whether we are in a button or not.
jcdutton
parents:
197
diff
changeset
|
217 (*button) = this->vm->state.HL_BTNN_REG >> 10; |
0 | 218 |
193 | 219 return DVDNAV_STATUS_OK; |
0 | 220 } |
221 | |
114 | 222 static btni_t *get_current_button(dvdnav_t *this, pci_t *pci) { |
196 | 223 int32_t button = 0; |
0 | 224 |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
225 if(!this || !pci) { |
117 | 226 printerr("Passed a NULL pointer."); |
197
a20a5976a207
last_cmd_nav_lbn has to be initialized with an invalid value, so that the first
mroi
parents:
196
diff
changeset
|
227 return NULL; |
0 | 228 } |
166 | 229 if(!pci->hli.hl_gi.hli_ss) { |
230 printerr("Not in a menu."); | |
197
a20a5976a207
last_cmd_nav_lbn has to be initialized with an invalid value, so that the first
mroi
parents:
196
diff
changeset
|
231 return NULL; |
166 | 232 } |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
233 if(this->last_cmd_nav_lbn == pci->pci_gi.nv_pck_lbn) { |
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
234 printerr("This NAV has already been left."); |
197
a20a5976a207
last_cmd_nav_lbn has to be initialized with an invalid value, so that the first
mroi
parents:
196
diff
changeset
|
235 return NULL; |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
236 } |
117 | 237 |
238 button = this->vm->state.HL_BTNN_REG >> 10; | |
0 | 239 #ifdef BUTTON_TESTING |
166 | 240 nav_print_PCI(pci); |
0 | 241 #endif |
242 | |
98 | 243 return &(pci->hli.btnit[button-1]); |
0 | 244 } |
245 | |
114 | 246 static dvdnav_status_t button_auto_action(dvdnav_t *this, pci_t *pci) { |
247 if (get_current_button(this, pci)->auto_action_mode) | |
248 return dvdnav_button_activate(this, pci); | |
197
a20a5976a207
last_cmd_nav_lbn has to be initialized with an invalid value, so that the first
mroi
parents:
196
diff
changeset
|
249 return DVDNAV_STATUS_OK; |
29 | 250 } |
251 | |
98 | 252 dvdnav_status_t dvdnav_upper_button_select(dvdnav_t *this, pci_t *pci) { |
0 | 253 btni_t *button_ptr; |
254 | |
114 | 255 if(!(button_ptr = get_current_button(this, pci))) |
193 | 256 return DVDNAV_STATUS_ERR; |
114 | 257 |
98 | 258 dvdnav_button_select(this, pci, button_ptr->up); |
197
a20a5976a207
last_cmd_nav_lbn has to be initialized with an invalid value, so that the first
mroi
parents:
196
diff
changeset
|
259 return button_auto_action(this, pci); |
0 | 260 } |
261 | |
98 | 262 dvdnav_status_t dvdnav_lower_button_select(dvdnav_t *this, pci_t *pci) { |
0 | 263 btni_t *button_ptr; |
264 | |
114 | 265 if(!(button_ptr = get_current_button(this, pci))) |
193 | 266 return DVDNAV_STATUS_ERR; |
114 | 267 |
98 | 268 dvdnav_button_select(this, pci, button_ptr->down); |
197
a20a5976a207
last_cmd_nav_lbn has to be initialized with an invalid value, so that the first
mroi
parents:
196
diff
changeset
|
269 return button_auto_action(this, pci); |
0 | 270 } |
271 | |
98 | 272 dvdnav_status_t dvdnav_right_button_select(dvdnav_t *this, pci_t *pci) { |
0 | 273 btni_t *button_ptr; |
274 | |
114 | 275 if(!(button_ptr = get_current_button(this, pci))) |
193 | 276 return DVDNAV_STATUS_ERR; |
114 | 277 |
98 | 278 dvdnav_button_select(this, pci, button_ptr->right); |
197
a20a5976a207
last_cmd_nav_lbn has to be initialized with an invalid value, so that the first
mroi
parents:
196
diff
changeset
|
279 return button_auto_action(this, pci); |
22
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
280 } |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
281 |
98 | 282 dvdnav_status_t dvdnav_left_button_select(dvdnav_t *this, pci_t *pci) { |
22
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
283 btni_t *button_ptr; |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
284 |
114 | 285 if(!(button_ptr = get_current_button(this, pci))) |
193 | 286 return DVDNAV_STATUS_ERR; |
114 | 287 |
98 | 288 dvdnav_button_select(this, pci, button_ptr->left); |
197
a20a5976a207
last_cmd_nav_lbn has to be initialized with an invalid value, so that the first
mroi
parents:
196
diff
changeset
|
289 return button_auto_action(this, pci); |
0 | 290 } |
291 | |
114 | 292 dvdnav_status_t dvdnav_get_highlight_area(pci_t *nav_pci , int32_t button, int32_t mode, |
293 dvdnav_highlight_area_t *highlight) { | |
0 | 294 btni_t *button_ptr; |
114 | 295 |
31 | 296 #ifdef BUTTON_TESTING |
76 | 297 fprintf(MSG_OUT, "libdvdnav: Button get_highlight_area %i\n", button); |
31 | 298 #endif |
166 | 299 |
300 if(!nav_pci->hli.hl_gi.hli_ss) | |
193 | 301 return DVDNAV_STATUS_ERR; |
114 | 302 if((button <= 0) || (button > nav_pci->hli.hl_gi.btn_ns)) |
193 | 303 return DVDNAV_STATUS_ERR; |
114 | 304 |
166 | 305 |
22
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
306 button_ptr = &nav_pci->hli.btnit[button-1]; |
0 | 307 |
22
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
308 highlight->sx = button_ptr->x_start; |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
309 highlight->sy = button_ptr->y_start; |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
310 highlight->ex = button_ptr->x_end; |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
311 highlight->ey = button_ptr->y_end; |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
312 if(button_ptr->btn_coln != 0) { |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
313 highlight->palette = nav_pci->hli.btn_colit.btn_coli[button_ptr->btn_coln-1][mode]; |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
314 } else { |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
315 highlight->palette = 0; |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
316 } |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
317 highlight->pts = nav_pci->hli.hl_gi.hli_s_ptm; |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
318 highlight->buttonN = button; |
31 | 319 #ifdef BUTTON_TESTING |
114 | 320 fprintf(MSG_OUT, "libdvdnav: highlight: Highlight area is (%u,%u)-(%u,%u), display = %i, button = %u\n", |
22
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
321 button_ptr->x_start, button_ptr->y_start, |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
322 button_ptr->x_end, button_ptr->y_end, |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
323 1, |
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
324 button); |
31 | 325 #endif |
22
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
326 |
193 | 327 return DVDNAV_STATUS_OK; |
0 | 328 } |
329 | |
98 | 330 dvdnav_status_t dvdnav_button_activate(dvdnav_t *this, pci_t *pci) { |
196 | 331 int32_t button; |
26 | 332 btni_t *button_ptr = NULL; |
114 | 333 |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
334 if(!this || !pci) { |
114 | 335 printerr("Passed a NULL pointer."); |
193 | 336 return DVDNAV_STATUS_ERR; |
114 | 337 } |
166 | 338 if(!pci->hli.hl_gi.hli_ss) { |
339 printerr("Not in a menu."); | |
193 | 340 return DVDNAV_STATUS_ERR; |
166 | 341 } |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
342 if(this->last_cmd_nav_lbn == pci->pci_gi.nv_pck_lbn) { |
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
343 printerr("This NAV has already been left."); |
193 | 344 return DVDNAV_STATUS_ERR; |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
345 } |
22
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
346 pthread_mutex_lock(&this->vm_lock); |
0 | 347 |
117 | 348 button = this->vm->state.HL_BTNN_REG >> 10; |
114 | 349 |
350 if((button <= 0) || (button > pci->hli.hl_gi.btn_ns)) { | |
57 | 351 /* Special code to handle still menus with no buttons. |
166 | 352 * The navigation is expected to report to the application that a STILL is |
57 | 353 * underway. In turn, the application is supposed to report to the user |
166 | 354 * that the playback is paused. The user is then expected to undo the pause, |
57 | 355 * ie: hit play. At that point, the navigation should release the still and |
356 * go to the next Cell. | |
166 | 357 * Explanation by Mathieu Lacage <mathieu_lacage@realmagic.fr> |
57 | 358 * Code added by jcdutton. |
359 */ | |
360 if (this->position_current.still != 0) { | |
361 /* In still, but no buttons. */ | |
362 vm_get_next_cell(this->vm); | |
363 this->position_current.still = 0; | |
116 | 364 this->sync_wait = 0; |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
365 this->last_cmd_nav_lbn = pci->pci_gi.nv_pck_lbn; |
57 | 366 pthread_mutex_unlock(&this->vm_lock); |
114 | 367 /* clear error message */ |
368 printerr(""); | |
193 | 369 return DVDNAV_STATUS_OK; |
57 | 370 } |
22
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
371 pthread_mutex_unlock(&this->vm_lock); |
193 | 372 return DVDNAV_STATUS_ERR; |
0 | 373 } |
114 | 374 |
375 button_ptr = get_current_button(this, pci); | |
376 /* Finally, make the VM execute the appropriate code and probably | |
0 | 377 * scedule a jump */ |
31 | 378 #ifdef BUTTON_TESTING |
76 | 379 fprintf(MSG_OUT, "libdvdnav: Evaluating Button Activation commands.\n"); |
31 | 380 #endif |
114 | 381 if(vm_exec_cmd(this->vm, &(button_ptr->cmd)) == 1) { |
26 | 382 /* Command caused a jump */ |
383 this->vm->hop_channel++; | |
384 this->position_current.still = 0; | |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
385 this->last_cmd_nav_lbn = pci->pci_gi.nv_pck_lbn; |
0 | 386 } |
114 | 387 |
22
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
388 pthread_mutex_unlock(&this->vm_lock); |
193 | 389 return DVDNAV_STATUS_OK; |
0 | 390 } |
391 | |
91
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
392 dvdnav_status_t dvdnav_button_activate_cmd(dvdnav_t *this, int32_t button, vm_cmd_t *cmd) |
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
393 { |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
394 if(!this || !cmd) { |
114 | 395 printerr("Passed a NULL pointer."); |
193 | 396 return DVDNAV_STATUS_ERR; |
114 | 397 } |
398 | |
399 pthread_mutex_lock(&this->vm_lock); | |
400 /* make the VM execute the appropriate code and probably | |
91
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
401 * schedule a jump */ |
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
402 #ifdef BUTTON_TESTING |
114 | 403 fprintf(MSG_OUT, "libdvdnav: dvdnav_button_activate_cmd: Evaluating Button Activation commands.\n"); |
91
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
404 #endif |
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
405 if(button > 0) { |
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
406 this->vm->state.HL_BTNN_REG = (button << 10); |
114 | 407 if(vm_exec_cmd(this->vm, cmd) == 1) { |
91
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
408 /* Command caused a jump */ |
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
409 this->vm->hop_channel++; |
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
410 } |
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
411 } |
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
412 /* Always remove still, because some still menus have no buttons. */ |
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
413 this->position_current.still = 0; |
116 | 414 this->sync_wait = 0; |
91
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
415 pthread_mutex_unlock(&this->vm_lock); |
193 | 416 return DVDNAV_STATUS_OK; |
91
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
417 } |
df9712507b30
Add a new API function, to allow for more flexible menu button control.
jcdutton
parents:
86
diff
changeset
|
418 |
196 | 419 dvdnav_status_t dvdnav_button_select(dvdnav_t *this, pci_t *pci, int32_t button) { |
0 | 420 |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
421 if(!this || !pci) { |
114 | 422 printerr("Passed a NULL pointer."); |
193 | 423 return DVDNAV_STATUS_ERR; |
0 | 424 } |
166 | 425 if(!pci->hli.hl_gi.hli_ss) { |
426 printerr("Not in a menu."); | |
193 | 427 return DVDNAV_STATUS_ERR; |
166 | 428 } |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
429 if(this->last_cmd_nav_lbn == pci->pci_gi.nv_pck_lbn) { |
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
430 printerr("This NAV has already been left."); |
193 | 431 return DVDNAV_STATUS_ERR; |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
432 } |
0 | 433 |
31 | 434 #ifdef BUTTON_TESTING |
76 | 435 fprintf(MSG_OUT, "libdvdnav: Button select %i\n", button); |
31 | 436 #endif |
0 | 437 |
98 | 438 if((button <= 0) || (button > pci->hli.hl_gi.btn_ns)) { |
114 | 439 printerr("Button does not exist."); |
193 | 440 return DVDNAV_STATUS_ERR; |
0 | 441 } |
114 | 442 |
22
3c1df0cb3aee
Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents:
10
diff
changeset
|
443 this->vm->state.HL_BTNN_REG = (button << 10); |
64
2759605b41f6
We need to update the button info when moving around in menus.
mroi
parents:
57
diff
changeset
|
444 this->position_current.button = -1; /* Force Highligh change */ |
0 | 445 |
193 | 446 return DVDNAV_STATUS_OK; |
0 | 447 } |
448 | |
98 | 449 dvdnav_status_t dvdnav_button_select_and_activate(dvdnav_t *this, pci_t *pci, |
196 | 450 int32_t button) { |
0 | 451 /* A trivial function */ |
193 | 452 if(dvdnav_button_select(this, pci, button) != DVDNAV_STATUS_ERR) |
98 | 453 return dvdnav_button_activate(this, pci); |
193 | 454 return DVDNAV_STATUS_ERR; |
0 | 455 } |
456 | |
196 | 457 dvdnav_status_t dvdnav_mouse_select(dvdnav_t *this, pci_t *pci, int32_t x, int32_t y) { |
458 int32_t button, cur_button; | |
459 int32_t best,dist,d; | |
460 int32_t mx,my,dx,dy; | |
69 | 461 |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
462 if(!this || !pci) { |
114 | 463 printerr("Passed a NULL pointer."); |
193 | 464 return DVDNAV_STATUS_ERR; |
0 | 465 } |
166 | 466 if(!pci->hli.hl_gi.hli_ss) { |
467 printerr("Not in a menu."); | |
193 | 468 return DVDNAV_STATUS_ERR; |
166 | 469 } |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
470 if(this->last_cmd_nav_lbn == pci->pci_gi.nv_pck_lbn) { |
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
471 printerr("This NAV has already been left."); |
193 | 472 return DVDNAV_STATUS_ERR; |
191
dbea22936623
when a command has been issued to leave a menu, filter all further commands
mroi
parents:
169
diff
changeset
|
473 } |
0 | 474 |
117 | 475 cur_button = this->vm->state.HL_BTNN_REG >> 10; |
114 | 476 |
477 best = 0; | |
69 | 478 dist = 0x08000000; /* >> than (720*720)+(567*567); */ |
479 | |
114 | 480 /* Loop through all buttons */ |
481 for(button = 1; button <= pci->hli.hl_gi.btn_ns; button++) { | |
227
10af49ee5118
Fix a bug. We pass pci_t as a function param, so why bother looking at an
jcdutton
parents:
205
diff
changeset
|
482 btni_t *button_ptr = &(pci->hli.btnit[button-1]); |
10af49ee5118
Fix a bug. We pass pci_t as a function param, so why bother looking at an
jcdutton
parents:
205
diff
changeset
|
483 |
0 | 484 if((x >= button_ptr->x_start) && (x <= button_ptr->x_end) && |
485 (y >= button_ptr->y_start) && (y <= button_ptr->y_end)) { | |
69 | 486 mx = (button_ptr->x_start + button_ptr->x_end)/2; |
114 | 487 my = (button_ptr->y_start + button_ptr->y_end)/2; |
69 | 488 dx = mx - x; |
489 dy = my - y; | |
490 d = (dx*dx) + (dy*dy); | |
491 /* If the mouse is within the button and the mouse is closer | |
492 * to the center of this button then it is the best choice. */ | |
493 if(d < dist) { | |
114 | 494 dist = d; |
495 best = button; | |
0 | 496 } |
497 } | |
498 } | |
114 | 499 /* As an efficiency measure, only re-select the button |
500 * if it is different to the previously selected one. */ | |
501 if (best != 0 && best != cur_button) | |
502 dvdnav_button_select(this, pci, best); | |
503 | |
193 | 504 /* return DVDNAV_STATUS_OK only if we actually found a matching button */ |
505 return best ? DVDNAV_STATUS_OK : DVDNAV_STATUS_ERR; | |
0 | 506 } |
507 | |
196 | 508 dvdnav_status_t dvdnav_mouse_activate(dvdnav_t *this, pci_t *pci, int32_t x, int32_t y) { |
0 | 509 /* A trivial function */ |
193 | 510 if(dvdnav_mouse_select(this, pci, x,y) != DVDNAV_STATUS_ERR) |
98 | 511 return dvdnav_button_activate(this, pci); |
193 | 512 return DVDNAV_STATUS_ERR; |
0 | 513 } |