#include "mfcpch.h"
#include "grphshm.h"
#include "evntlst.h"
#include "evnts.h"
Go to the source code of this file.
#define EXTERN |
* (C) Copyright 1990, Hewlett-Packard Ltd. ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** http://www.apache.org/licenses/LICENSE-2.0 ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License.
Wait for click.
Wait (or check) for a click on the given (or all) fd and return it.
Definition at line 83 of file evnts.cpp.
References await_event, DESTROY_EVENT, DOWN_EVENT, NULL, graphicsevent::type, graphicsevent::x, and graphicsevent::y.
00088 { 00089 GRAPHICS_EVENT event; /*return event */ 00090 00091 win = await_event (win, wait, DOWN_EVENT, &event); 00092 if (event.type == DESTROY_EVENT) 00093 return NULL; //was destroyed 00094 if (win != NULL) { 00095 x = event.x; /*get coords */ 00096 y = event.y; 00097 } 00098 return win; 00099 }
Wait for key.
Wait (or check) for a key on the given (or all) fd and return it.
Definition at line 107 of file evnts.cpp.
References await_event, DESTROY_EVENT, graphicsevent::key, KEYPRESS_EVENT, NULL, and graphicsevent::type.
00111 { 00112 GRAPHICS_EVENT event; /*return event */ 00113 00114 win = await_event (win, wait, KEYPRESS_EVENT, &event); 00115 if (event.type == DESTROY_EVENT) 00116 return NULL; //was destroyed 00117 if (win != NULL) 00118 c = event.key; /*get keypress */ 00119 return win; 00120 }
DLLSYM WINDOW await_selection | ( | WINDOW | win, | |
BOOL8 | wait, | |||
float & | xmin, | |||
float & | ymin, | |||
float & | xmax, | |||
float & | ymax | |||
) |
Wait for selection.
Wait (or check) for a selection on the given (or all) fd and return it.
Definition at line 55 of file evnts.cpp.
References await_event, DESTROY_EVENT, NULL, SELECT_EVENT, graphicsevent::type, graphicsevent::x, graphicsevent::xmax, graphicsevent::y, and graphicsevent::ymax.
00062 { 00063 GRAPHICS_EVENT event; /*return event */ 00064 00065 win = await_event (win, wait, SELECT_EVENT, &event); 00066 if (event.type == DESTROY_EVENT) 00067 return NULL; //was destroyed 00068 if (win != NULL) { 00069 xmin = event.x; /*get coords */ 00070 ymin = event.y; 00071 xmax = event.xmax; /*get coords */ 00072 ymax = event.ymax; 00073 } 00074 return win; 00075 }
DLLSYM WINDOW def_await_event | ( | WINDOW | win, | |
BOOL8 | wait, | |||
INT8 | event_type, | |||
GRAPHICS_EVENT * | out_event | |||
) |
Wait for event.
Wait (or check) for a event on the given (or all) fd and return it.
Definition at line 128 of file evnts.cpp.
References DESTROY_EVENT, graphicsevent::fd, find_event(), WINFD::get_fd(), NULL, and graphicsevent::type.
00133 { 00134 GRAPHICS_EVENT *event; /*return event */ 00135 INT16 fd; //file descriptor 00136 00137 if (win == NULL) 00138 fd = 0; 00139 else 00140 fd = win->get_fd (); 00141 /*look for one */ 00142 event = find_event (fd, wait, event_type); 00143 if (event == NULL) 00144 return NULL; /*not found */ 00145 else { 00146 *out_event = *event; /*copy event */ 00147 if (event->type != DESTROY_EVENT) 00148 delete event; //free the element 00149 return out_event->fd; 00150 } 00151 }
GRAPHICS_EVENT * find_event | ( | INT16 & | fd, | |
BOOL8 | wait, | |||
INT8 | event_type | |||
) |
Wait for event.
Search the queue for an event of a given type, and return it. Read or wait until one turns up if there is not one already.
Definition at line 160 of file evnts.cpp.
References event_waiting, NULL, and search_event_queue().
Referenced by def_await_event().
00164 { 00165 GRAPHICS_EVENT *event; /*return event */ 00166 00167 /*look for one */ 00168 event = search_event_queue (fd, event_type); 00169 if (event == NULL) { 00170 do { 00171 #ifdef __UNIX__ 00172 if (check_event (fd, wait)) 00173 #elif defined (__MSW32__) 00174 if (wait) 00175 Sleep (50); 00176 if (event_waiting) 00177 #endif 00178 { 00179 // fprintf(stderr,"Got an event:searching queue %d\n",fd); 00180 /*try after reading */ 00181 event = search_event_queue (fd, event_type); 00182 } 00183 } 00184 while (wait && event == NULL); 00185 } 00186 // if (event!=NULL) 00187 // event->fd=&sbfds[fd]; 00188 return event; /*event located */ 00189 }
GRAPHICS_EVENT * search_event_queue | ( | INT16 & | fd, | |
INT8 | event_type | |||
) |
Search for event.
Search the event queue(s) for events of a particular type. If found, it is removed from the queue and returned.
Definition at line 198 of file evnts.cpp.
References maxsbfd, NULL, sbfds, and search_single_queue().
Referenced by find_event().
00201 { 00202 GRAPHICS_EVENT *event; /*event from daemon */ 00203 INT16 testfd; /*test window */ 00204 00205 if (fd < 0 || fd > maxsbfd || fd > 0 && sbfds[fd].used != 1) { 00206 return NULL; 00207 } 00208 if (fd > 0) 00209 /*just one to search */ 00210 return search_single_queue (fd, event_type); 00211 else { 00212 for (testfd = 1; testfd < maxsbfd; testfd++) { 00213 if (sbfds[testfd].used) { 00214 event = search_single_queue (testfd, event_type); 00215 if (event != NULL) { 00216 fd = testfd; /*successful window */ 00217 return event; /*got one */ 00218 } 00219 } 00220 } 00221 } 00222 return NULL; /*found nothing */ 00223 }
GRAPHICS_EVENT * search_single_queue | ( | INT16 | fd, | |
INT8 | event_type | |||
) |
Search for event.
Search the event queue for events of a particular type. If found, it is removed from the queue and returned.
Definition at line 232 of file evnts.cpp.
References ANY_EVENT, DESTROY_EVENT, DOWN_EVENT, event_waiting, WINFD::events, FALSE, lock_events(), graphicsevent::next, NULL, sbfds, SELECT_EVENT, TRUE, graphicsevent::type, unlock_events(), and UP_EVENT.
Referenced by search_event_queue().
00235 { 00236 GRAPHICS_EVENT *event; /*event from daemon */ 00237 GRAPHICS_EVENT *prev; /*previous event */ 00238 GRAPHICS_EVENT *event2; /*2nd event */ 00239 GRAPHICS_EVENT *prev2; /*2nd previous */ 00240 GRAPHICS_EVENT *nextevent; /*next event in list */ 00241 BOOL8 any_destroy = FALSE; 00242 00243 lock_events(); 00244 event_waiting = FALSE; //done a scan 00245 prev = NULL; /*previous event */ 00246 event2 = NULL; /*2nd event */ 00247 if (event_type == ANY_EVENT) { 00248 event = sbfds[fd].events; /*start of queue */ 00249 } 00250 else if (event_type == SELECT_EVENT) { 00251 for (prev = NULL, event = sbfds[fd].events; event != NULL 00252 && event->type != DOWN_EVENT; event = nextevent) { 00253 //Delete up events that are in the list prior to a down event 00254 nextevent = event->next; /*next in list */ 00255 if (event->type == UP_EVENT) { 00256 if (prev == NULL) 00257 /*new head */ 00258 sbfds[fd].events = nextevent; 00259 else 00260 prev->next = nextevent;/*delete event */ 00261 if (nextevent == NULL) 00262 /*new last element */ 00263 sbfds[fd].lastevent = prev; 00264 delete event; 00265 } 00266 else 00267 prev = event; 00268 if (event->type == DESTROY_EVENT) 00269 any_destroy = TRUE; 00270 } 00271 if (event == NULL) { 00272 unlock_events(); 00273 if (any_destroy) 00274 return search_single_queue (fd, DESTROY_EVENT); 00275 return NULL; /*no good */ 00276 } 00277 for (prev2 = event, event2 = event->next; event2 != NULL 00278 && event2->type != UP_EVENT; 00279 prev2 = event2, event2 = event2->next); 00280 if (event2 == NULL) { 00281 unlock_events(); 00282 return NULL; /*no good */ 00283 } 00284 if (prev2 != event) { /*got some intervening */ 00285 for (prev2 = event->next; prev2 != event2; prev2 = nextevent) { 00286 nextevent = prev2->next; 00287 delete prev2; 00288 } 00289 } 00290 event->next = event2->next; /*cut out event2 */ 00291 event2->next = NULL; /*event is new end */ 00292 00293 event->xmax = event2->x; /*get coords */ 00294 event->ymax = event2->y; 00295 if (event->x > event->xmax) { 00296 event->xmax = event->x; 00297 event->x = event2->x; /*get coords */ 00298 } 00299 if (event->y > event->ymax) { 00300 event->ymax = event->y; 00301 event->y = event2->y; 00302 } 00303 delete event2; //free the element 00304 } 00305 else { 00306 for (prev = NULL, event = sbfds[fd].events; event != NULL 00307 && event->type != DESTROY_EVENT 00308 && event->type != event_type; event = nextevent) { 00309 nextevent = event->next; /*next in list */ 00310 /*delete up in front of down */ 00311 if (event->type == UP_EVENT && event_type == DOWN_EVENT) { 00312 if (prev == NULL) 00313 /*new head */ 00314 sbfds[fd].events = nextevent; 00315 else 00316 prev->next = nextevent;/*delete event */ 00317 if (nextevent == NULL) 00318 /*new last element */ 00319 sbfds[fd].lastevent = prev; 00320 delete event; 00321 } 00322 else 00323 prev = event; /*trailing ptr */ 00324 } 00325 } 00326 if (event == NULL) { 00327 unlock_events(); 00328 return NULL; /*no good */ 00329 } 00330 if (event->type != DESTROY_EVENT) { 00331 if (prev == NULL) 00332 /*new head */ 00333 sbfds[fd].events = event->next; 00334 else 00335 prev->next = event->next; /*delete event */ 00336 if (event->next == NULL) 00337 sbfds[fd].lastevent = prev;/*new last event */ 00338 event->next = NULL; /*possible 2nd event */ 00339 } 00340 unlock_events(); 00341 return event; /*got one!! */ 00342 }
WINDOW(*) await_event_func(WINDOW, BOOL8, INT8, GRAPHICS_EVENT *) |
* (C) Copyright 1990, Hewlett-Packard Ltd. ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** http://www.apache.org/licenses/LICENSE-2.0 ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License.
Definition at line 31 of file evnts.cpp.
Referenced by create_edges_window().