annotate highlight.c @ 64:2759605b41f6 src

We need to update the button info when moving around in menus. Otherwise the application might highlight the wrong button when jumping from menu to menu.
author mroi
date Wed, 17 Jul 2002 15:04:28 +0000
parents e1505b603eb8
children 61c0ee1bbb7a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
1 /*
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
2 * Copyright (C) 2000 Rich Wareham <richwareham@users.sourceforge.net>
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
3 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
4 * This file is part of libdvdnav, a DVD navigation library.
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
5 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
6 * libdvdnav is free software; you can redistribute it and/or modify
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
9 * (at your option) any later version.
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
10 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
11 * libdvdnav is distributed in the hope that it will be useful,
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
14 * GNU General Public License for more details.
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
15 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
19 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
20 * $Id$
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
21 *
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
22 */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
23
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
24 #ifdef HAVE_CONFIG_H
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
25 #include "config.h"
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
26 #endif
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
27
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
28 /*
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
29 #define BUTTON_TESTING
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
30 */
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
31 #include <assert.h>
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
32
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
33 #include <dvdnav.h>
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
34 #include "dvdnav_internal.h"
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
35
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
36 #include "vm.h"
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
37 #
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
38 #include <dvdread/nav_types.h>
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
39
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
40 #ifdef BUTTON_TESTING
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
41 #include <dvdread/nav_print.h>
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
42 #endif
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
43
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
44 /* Highlighting API calls */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
45
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
46 dvdnav_status_t dvdnav_get_current_highlight(dvdnav_t *this, int* button) {
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
47 if(!this)
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
48 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
49
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
50 /* Simply return the appropriate value based on the SPRM */
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
51 (*button) = (this->vm->state.HL_BTNN_REG) >> 10;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
52
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
53 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
54 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
55
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
56 pci_t* dvdnav_get_current_nav_pci(dvdnav_t *this) {
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
57 if (!this ) assert(0);
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
58 return &this->pci;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
59 }
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
60
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
61 btni_t *__get_current_button(dvdnav_t *this) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
62 int button = 0;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
63
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
64 if(dvdnav_get_current_highlight(this, &button) != S_OK) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
65 printerrf("Unable to get information on current highlight.");
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
66 return NULL;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
67 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
68 #ifdef BUTTON_TESTING
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
69 navPrint_PCI(&(this->pci));
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
70 #endif
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
71
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
72 return &(this->pci.hli.btnit[button-1]);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
73 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
74
29
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
75 dvdnav_status_t dvdnav_button_auto_action(dvdnav_t *this) {
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
76 btni_t *button_ptr;
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
77
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
78 if(!this)
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
79 return S_ERR;
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
80
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
81 if((button_ptr = __get_current_button(this)) == NULL) {
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
82 return S_ERR;
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
83 }
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
84 if (button_ptr->auto_action_mode == 1) {
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
85 return S_OK;
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
86 }
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
87 return S_ERR;
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
88 }
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
89
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
90
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
91 dvdnav_status_t dvdnav_upper_button_select(dvdnav_t *this) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
92 btni_t *button_ptr;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
93
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
94 if(!this)
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
95 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
96
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
97 if((button_ptr = __get_current_button(this)) == NULL) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
98 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
99 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
100
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
101 dvdnav_button_select(this, button_ptr->up);
29
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
102 if (dvdnav_button_auto_action(this) ) {
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
103 dvdnav_button_activate(this);
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
104 }
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
105
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
106 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
107 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
108
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
109 dvdnav_status_t dvdnav_lower_button_select(dvdnav_t *this) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
110 btni_t *button_ptr;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
111
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
112 if(!this)
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
113 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
114
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
115 if((button_ptr = __get_current_button(this)) == NULL) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
116 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
117 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
118
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
119 dvdnav_button_select(this, button_ptr->down);
29
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
120 if (dvdnav_button_auto_action(this) ) {
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
121 dvdnav_button_activate(this);
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
122 }
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
123
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
124 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
125 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
126
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
127 dvdnav_status_t dvdnav_right_button_select(dvdnav_t *this) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
128 btni_t *button_ptr;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
129
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
130 if(!this)
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
131 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
132
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
133 if((button_ptr = __get_current_button(this)) == NULL) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
134 printerr("Error fetching information on current button.");
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
135 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
136 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
137
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
138 dvdnav_button_select(this, button_ptr->right);
29
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
139 if (dvdnav_button_auto_action(this) ) {
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
140 dvdnav_button_activate(this);
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
141 }
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
142
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
143 return S_OK;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
144 }
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
145
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
146 dvdnav_status_t dvdnav_left_button_select(dvdnav_t *this) {
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
147 btni_t *button_ptr;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
148
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
149 if(!this)
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
150 return S_ERR;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
151
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
152 if((button_ptr = __get_current_button(this)) == NULL) {
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
153 return S_ERR;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
154 }
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
155
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
156 dvdnav_button_select(this, button_ptr->left);
29
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
157 if (dvdnav_button_auto_action(this) ) {
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
158 dvdnav_button_activate(this);
c3c8b98d7e95 Enable auto action buttons.
jcdutton
parents: 26
diff changeset
159 }
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
160
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
161 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
162 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
163
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
164 dvdnav_status_t dvdnav_get_highlight_area(pci_t* nav_pci , int32_t button, int32_t mode,
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
165 dvdnav_highlight_area_t* highlight) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
166 btni_t *button_ptr;
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
167 #ifdef BUTTON_TESTING
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
168 fprintf(stderr,"Button get_highlight_area %i\n", button);
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
169 #endif
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
170
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
171 /* Set the highlight SPRM if the passed button was valid*/
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
172 if((button <= 0) || (button > nav_pci->hli.hl_gi.btn_ns)) {
30
630b6733e492 Some more cleanups.
jcdutton
parents: 29
diff changeset
173 fprintf(stderr,"Unable to select button number %i as it doesn't exist\n",
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
174 button);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
175 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
176 }
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
177 button_ptr = &nav_pci->hli.btnit[button-1];
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
178
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
179 highlight->sx = button_ptr->x_start;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
180 highlight->sy = button_ptr->y_start;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
181 highlight->ex = button_ptr->x_end;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
182 highlight->ey = button_ptr->y_end;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
183 if(button_ptr->btn_coln != 0) {
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
184 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
185 } else {
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
186 highlight->palette = 0;
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
187 }
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
188 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
189 highlight->buttonN = button;
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
190 #ifdef BUTTON_TESTING
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
191 fprintf(stderr,"highlight.c:Highlight area is (%u,%u)-(%u,%u), display = %i, button = %u\n",
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
192 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
193 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
194 1,
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
195 button);
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
196 #endif
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
197
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
198 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
199 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
200
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
201 dvdnav_status_t dvdnav_button_activate(dvdnav_t *this) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
202 int button;
26
794d2e16a4d4 Removed un-needed variables.
jcdutton
parents: 22
diff changeset
203 btni_t *button_ptr = NULL;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
204
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
205 if(!this)
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
206 return S_ERR;
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
207 pthread_mutex_lock(&this->vm_lock);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
208
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
209 /* Precisely the same as selecting a button except we want
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
210 * a different palette */
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
211 if(dvdnav_get_current_highlight(this, &button) != S_OK) {
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
212 pthread_mutex_unlock(&this->vm_lock);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
213 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
214 }
57
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
215 /* FIXME: dvdnav_button_select should really return a
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
216 * special case for explicit NO-BUTTONS.
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
217 */
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
218 if(dvdnav_button_select(this, button) != S_OK) {
57
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
219 /* Special code to handle still menus with no buttons.
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
220 * the navigation is expected to report to the appicatino that a STILL is
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
221 * underway. In turn, the application is supposed to report to the user
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
222 * that the playback is pause. The user is then expected to undo the pause.
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
223 * ie: hit play. At that point, the navigation should release the still and
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
224 * go to the next Cell.
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
225 * Explanation by Mathieu Lavage <mathieu_lacage@realmagic.fr>
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
226 * Code added by jcdutton.
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
227 */
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
228 if (this->position_current.still != 0) {
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
229 /* In still, but no buttons. */
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
230 vm_get_next_cell(this->vm);
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
231 this->position_current.still = 0;
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
232 pthread_mutex_unlock(&this->vm_lock);
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
233 return S_OK;
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
234 }
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
235 pthread_mutex_unlock(&this->vm_lock);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
236 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
237 }
26
794d2e16a4d4 Removed un-needed variables.
jcdutton
parents: 22
diff changeset
238 /* FIXME: The button command should really be passed in the API instead. */
794d2e16a4d4 Removed un-needed variables.
jcdutton
parents: 22
diff changeset
239 button_ptr = __get_current_button(this);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
240 /* Finally, make the VM execute the appropriate code and
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
241 * scedule a jump */
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
242 #ifdef BUTTON_TESTING
10
6f0fb88d1463 Added some debug info, to hopefully help in tracking bugs in libdvdnav.
jcdutton
parents: 3
diff changeset
243 fprintf(stderr, "libdvdnav: Evaluating Button Activation commands.\n");
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
244 #endif
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
245 if(vm_eval_cmd(this->vm, &(button_ptr->cmd)) == 1) {
26
794d2e16a4d4 Removed un-needed variables.
jcdutton
parents: 22
diff changeset
246 /* Command caused a jump */
794d2e16a4d4 Removed un-needed variables.
jcdutton
parents: 22
diff changeset
247 this->vm->hop_channel++;
794d2e16a4d4 Removed un-needed variables.
jcdutton
parents: 22
diff changeset
248 this->position_current.still = 0;
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
249 }
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
250 pthread_mutex_unlock(&this->vm_lock);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
251 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
252 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
253
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
254 dvdnav_status_t dvdnav_button_select(dvdnav_t *this, int button) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
255
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
256 if(!this) {
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
257 printerrf("Unable to select button number %i as this state bad",
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
258 button);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
259 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
260 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
261
31
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
262 #ifdef BUTTON_TESTING
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
263 fprintf(stderr,"libdvdnav: Button select %i\n", button);
8b08ee66cbff Quiet please!!!
jcdutton
parents: 30
diff changeset
264 #endif
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
265
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
266 /* Set the highlight SPRM if the passed button was valid*/
57
e1505b603eb8 Fix problem with Still menus that have NO BUTTONS.
jcdutton
parents: 42
diff changeset
267 /* FIXME: this->pci should be provided by the application. */
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
268 if((button <= 0) || (button > this->pci.hli.hl_gi.btn_ns)) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
269 printerrf("Unable to select button number %i as it doesn't exist",
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
270 button);
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
271 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
272 }
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
273 this->vm->state.HL_BTNN_REG = (button << 10);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
274
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
275 this->hli_state = 1; /* Selected */
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
276
64
2759605b41f6 We need to update the button info when moving around in menus.
mroi
parents: 57
diff changeset
277 this->position_current.button = -1; /* Force Highligh change */
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
278
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
279 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
280 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
281
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
282 dvdnav_status_t dvdnav_button_select_and_activate(dvdnav_t *this,
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
283 int button) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
284 /* A trivial function */
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
285 if(dvdnav_button_select(this, button) != S_ERR) {
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
286 return dvdnav_button_activate(this);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
287 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
288
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
289 /* Should never get here without an error */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
290 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
291 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
292
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
293 dvdnav_status_t dvdnav_mouse_select(dvdnav_t *this, int x, int y) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
294 int button, cur_button;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
295
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
296 /* FIXME: At the moment, the case of no button matchin (x,y) is
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
297 * silently ignored, is this OK? */
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
298 if(!this)
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
299 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
300
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
301 if(dvdnav_get_current_highlight(this, &cur_button) != S_OK) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
302 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
303 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
304
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
305 /* Loop through each button */
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
306 for(button=1; button <= this->pci.hli.hl_gi.btn_ns; button++) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
307 btni_t *button_ptr = NULL;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
308
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
309 button_ptr = &(this->pci.hli.btnit[button-1]);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
310 if((x >= button_ptr->x_start) && (x <= button_ptr->x_end) &&
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
311 (y >= button_ptr->y_start) && (y <= button_ptr->y_end)) {
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
312 /* As an efficiency measure, only re-select the button
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
313 * if it is different to the previously selected one. */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
314 if(button != cur_button) {
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
315 dvdnav_button_select(this, button);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
316 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
317 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
318 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
319
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
320 return S_OK;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
321 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
322
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
323 dvdnav_status_t dvdnav_mouse_activate(dvdnav_t *this, int x, int y) {
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
324 /* A trivial function */
22
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
325 if(dvdnav_mouse_select(this, x,y) != S_ERR) {
3c1df0cb3aee Start of rewrite of libdvdnav. Still need to re-implement seeking.
jcdutton
parents: 10
diff changeset
326 return dvdnav_button_activate(this);
0
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
327 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
328
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
329 /* Should never get here without an error */
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
330 return S_ERR;
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
331 }
3ddf0eaece51 Initial revision
richwareham
parents:
diff changeset
332