aboutsummaryrefslogtreecommitdiffstats
path: root/channels/console_gui.c
diff options
context:
space:
mode:
authorrizzo <rizzo@f38db490-d61c-443f-a65b-d21fe96a405b>2007-12-27 00:48:38 +0000
committerrizzo <rizzo@f38db490-d61c-443f-a65b-d21fe96a405b>2007-12-27 00:48:38 +0000
commit3873b83f2891081cbb7f0912709ed03ebd33548a (patch)
tree98ccd458ae118a1e416b9383f919a0935bc7df61 /channels/console_gui.c
parent3362e1caef747faab26ea586833ef61cfe0f012f (diff)
more steps to decouple the gui from the rest of the code.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@94823 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/console_gui.c')
-rw-r--r--channels/console_gui.c71
1 files changed, 37 insertions, 34 deletions
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);
}
/*