From 07afabbaf1462e88c90bc611113a193f88677f2a Mon Sep 17 00:00:00 2001 From: Luigi Rizzo Date: Thu, 27 Dec 2007 00:48:38 +0000 Subject: more steps to decouple the gui from the rest of the code. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@94823 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/console_gui.c | 71 ++++++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 34 deletions(-) (limited to 'channels/console_gui.c') diff --git a/channels/console_gui.c b/channels/console_gui.c index b8ae5998d..0d3a19add 100644 --- a/channels/console_gui.c +++ b/channels/console_gui.c @@ -381,26 +381,27 @@ static int kp_match_area(const struct keypad_entry *e, int x, int y); static void handle_button_event(struct video_desc *env, SDL_MouseButtonEvent button) { uint8_t index = KEY_OUT_OF_KEYPAD; /* the key or region of the display we clicked on */ + struct gui_info *gui = env->gui; #if 0 ast_log(LOG_WARNING, "event %d %d have %d/%d regions at %p\n", - button.x, button.y, env->gui->kp_used, env->gui->kp_size, env->gui->kp); + button.x, button.y, gui->kp_used, gui->kp_size, gui->kp); #endif /* for each click we come back in normal mode */ - env->gui->text_mode = 0; + gui->text_mode = 0; /* define keypad boundary */ if (button.x < env->in.rem_dpy.w) index = KEY_REM_DPY; /* click on remote video */ - else if (button.x > env->in.rem_dpy.w + env->gui->keypad->w) + else if (button.x > env->in.rem_dpy.w + gui->keypad->w) index = KEY_LOC_DPY; /* click on local video */ - else if (button.y > env->gui->keypad->h) + else if (button.y > gui->keypad->h) index = KEY_OUT_OF_KEYPAD; /* click outside the keypad */ - else if (env->gui->kp) { + else if (gui->kp) { int i; - for (i = 0; i < env->gui->kp_used; i++) { - if (kp_match_area(&env->gui->kp[i], button.x - env->in.rem_dpy.w, button.y)) { - index = env->gui->kp[i].c; + for (i = 0; i < gui->kp_used; i++) { + if (kp_match_area(&gui->kp[i], button.x - env->in.rem_dpy.w, button.y)) { + index = gui->kp[i].c; break; } } @@ -477,20 +478,21 @@ static void handle_button_event(struct video_desc *env, SDL_MouseButtonEvent but */ static void handle_keyboard_input(struct video_desc *env, SDLKey key) { - if (env->gui->text_mode) { + struct gui_info *gui = env->gui; + if (gui->text_mode) { /* append in the text-message buffer */ if (key == SDLK_RETURN) { /* send the text message and return in normal mode */ - env->gui->text_mode = 0; + gui->text_mode = 0; keypad_send_command(env, "send text"); } else { /* accumulate the key in the message buffer */ - append_char(env->gui->msgbuf, &env->gui->msgbuf_pos, key); + append_char(gui->msgbuf, &gui->msgbuf_pos, key); } } else { /* append in the dial buffer */ - append_char(env->gui->inbuf, &env->gui->inbuf_pos, key); + append_char(gui->inbuf, &gui->inbuf_pos, key); } return; @@ -573,7 +575,7 @@ static void eventhandler(struct video_desc *env, const char *caption) handle_keyboard_input(env, ev[i].key.keysym.sym); break; case SDL_MOUSEMOTION: - if (env->gui->drag_mode != 0) + if (gui->drag_mode != 0) move_capture_source(env, ev[i].motion.x, ev[i].motion.y); break; case SDL_MOUSEBUTTONDOWN: @@ -582,7 +584,7 @@ static void eventhandler(struct video_desc *env, const char *caption) case SDL_MOUSEBUTTONUP: if (gui->drag_mode != 0) { move_capture_source(env, ev[i].button.x, ev[i].button.y); - env->gui->drag_mode = 0; + gui->drag_mode = 0; } break; } @@ -743,6 +745,7 @@ static void sdl_setup(struct video_desc *env) const SDL_VideoInfo *info; int kp_w = 0, kp_h = 0; /* keypad width and height */ int sdl_ok = 0; + struct gui_info *gui = env->gui; /* * initialize the SDL environment. We have one large window @@ -755,7 +758,7 @@ static void sdl_setup(struct video_desc *env) * SDL window, because the size is only known here. */ - if (env->gui == NULL && SDL_Init(SDL_INIT_VIDEO)) { + if (gui == NULL && SDL_Init(SDL_INIT_VIDEO)) { ast_log(LOG_WARNING, "Could not initialize SDL - %s\n", SDL_GetError()); /* again not fatal, just we won't display anything */ @@ -768,39 +771,39 @@ static void sdl_setup(struct video_desc *env) depth = info->vfmt->BitsPerPixel; if (depth < 16) depth = 16; - if (!env->gui) - env->gui = gui_init(); - if (!env->gui) + if (!gui) + env->gui = gui = gui_init(); + if (!gui) goto no_sdl; /* initialize grab coordinates */ env->out.loc_src.x = 0; env->out.loc_src.y = 0; - keypad_setup(env->gui, env->keypad_file); + keypad_setup(gui, env->keypad_file); #if 0 ast_log(LOG_WARNING, "keypad_setup returned %p %d\n", - env->gui->keypad, env->gui->kp_used); + gui->keypad, gui->kp_used); #endif - if (env->gui->keypad) { - kp_w = env->gui->keypad->w; - kp_h = env->gui->keypad->h; + if (gui->keypad) { + kp_w = gui->keypad->w; + kp_h = gui->keypad->h; } #define BORDER 5 /* border around our windows */ maxw = env->in.rem_dpy.w + env->out.loc_dpy.w + kp_w; maxh = MAX( MAX(env->in.rem_dpy.h, env->out.loc_dpy.h), kp_h); maxw += 4 * BORDER; maxh += 2 * BORDER; - env->gui->screen = SDL_SetVideoMode(maxw, maxh, depth, 0); - if (!env->gui->screen) { + gui->screen = SDL_SetVideoMode(maxw, maxh, depth, 0); + if (!gui->screen) { ast_log(LOG_ERROR, "SDL: could not set video mode - exiting\n"); goto no_sdl; } SDL_WM_SetCaption("Asterisk console Video Output", NULL); - if (set_win(env->gui->screen, &env->gui->win[WIN_REMOTE], dpy_fmt, + if (set_win(gui->screen, &gui->win[WIN_REMOTE], dpy_fmt, env->in.rem_dpy.w, env->in.rem_dpy.h, BORDER, BORDER)) goto no_sdl; - if (set_win(env->gui->screen, &env->gui->win[WIN_LOCAL], dpy_fmt, + if (set_win(gui->screen, &gui->win[WIN_LOCAL], dpy_fmt, env->out.loc_dpy.w, env->out.loc_dpy.h, 3*BORDER+env->in.rem_dpy.w + kp_w, BORDER)) goto no_sdl; @@ -808,14 +811,14 @@ static void sdl_setup(struct video_desc *env) /* display the skin, but do not free it as we need it later to * restore text areas and maybe sliders too. */ - if (env->gui && env->gui->keypad) { - struct SDL_Rect *dest = &env->gui->win[WIN_KEYPAD].rect; + if (gui && gui->keypad) { + struct SDL_Rect *dest = &gui->win[WIN_KEYPAD].rect; dest->x = 2*BORDER + env->in.rem_dpy.w; dest->y = BORDER; - dest->w = env->gui->keypad->w; - dest->h = env->gui->keypad->h; - SDL_BlitSurface(env->gui->keypad, NULL, env->gui->screen, dest); - SDL_UpdateRects(env->gui->screen, 1, dest); + dest->w = gui->keypad->w; + dest->h = gui->keypad->h; + SDL_BlitSurface(gui->keypad, NULL, gui->screen, dest); + SDL_UpdateRects(gui->screen, 1, dest); } env->in.dec_in_cur = &env->in.dec_in[0]; env->in.dec_in_dpy = NULL; /* nothing to display */ @@ -823,7 +826,7 @@ static void sdl_setup(struct video_desc *env) no_sdl: if (!sdl_ok) /* free resources in case of errors */ - env->gui = cleanup_sdl(env->gui); + env->gui = cleanup_sdl(gui); } /* -- cgit v1.2.3