2 * ion/mod_query/input.c
4 * Copyright (c) Tuomo Valkonen 1999-2007.
6 * See the included file LICENSE for details.
9 #include <libmainloop/defer.h>
10 #include <ioncore/common.h>
11 #include <ioncore/window.h>
12 #include <ioncore/global.h>
13 #include <ioncore/regbind.h>
14 #include <ioncore/event.h>
15 #include <ioncore/names.h>
23 * Scroll input \var{input} text contents up.
26 void input_scrollup(WInput *input)
28 CALL_DYN(input_scrollup, input, (input));
33 * Scroll input \var{input} text contents down.
36 void input_scrolldown(WInput *input)
38 CALL_DYN(input_scrolldown, input, (input));
42 void input_calc_size(WInput *input, WRectangle *geom)
44 *geom=input->last_fp.g;
46 CALL_DYN(input_calc_size, input, (input, geom));
51 const char *input_style(WInput *input)
53 const char *ret="input";
54 CALL_DYN_RET(ret, const char*, input_style, input, (input));
62 /*{{{ Resize and draw config update */
65 static void input_do_refit(WInput *input, WWindow *par)
68 input_calc_size(input, &g);
69 window_do_fitrep(&input->win, par, &g);
73 void input_refit(WInput *input)
75 input_do_refit(input, NULL);
79 void input_fitrep(WInput *input, WWindow *par, const WFitParams *fp)
82 input_do_refit(input, par);
86 void input_updategr(WInput *input)
90 brush=gr_get_brush(input->win.win,
91 region_rootwin_of((WRegion*)input),
97 if(input->brush!=NULL)
98 grbrush_release(input->brush);
102 region_updategr_default((WRegion*)input);
104 window_draw((WWindow*)input, TRUE);
114 bool input_init(WInput *input, WWindow *par, const WFitParams *fp)
120 if(!window_init((WWindow*)input, par, fp))
125 input->brush=gr_get_brush(win, region_rootwin_of((WRegion*)par),
128 if(input->brush==NULL)
132 window_select_input(&(input->win), IONCORE_EVENTMASK_NORMAL);
134 region_add_bindmap((WRegion*)input, mod_query_input_bindmap);
136 region_register((WRegion*)input);
141 window_deinit((WWindow*)input);
146 void input_deinit(WInput *input)
148 if(input->brush!=NULL)
149 grbrush_release(input->brush);
151 window_deinit((WWindow*)input);
156 * Close input not calling any possible finish handlers.
159 void input_cancel(WInput *input)
161 region_defer_rqdispose((WRegion*)input);
171 static void input_inactivated(WInput *input)
173 window_draw((WWindow*)input, FALSE);
177 static void input_activated(WInput *input)
179 window_draw((WWindow*)input, FALSE);
189 void mod_query_get_minimum_extents(GrBrush *brush, bool with_spacing,
196 grbrush_get_border_widths(brush, &bdw);
197 grbrush_get_font_extents(brush, &fnte);
199 spc=(with_spacing ? bdw.spacing : 0);
201 *h=(fnte.max_height+bdw.top+bdw.bottom+spc);
202 *w=(bdw.left+bdw.right+spc);
209 /*{{{ Dynamic function table and class implementation */
212 static DynFunTab input_dynfuntab[]={
213 {(DynFun*)region_fitrep, (DynFun*)input_fitrep},
214 {region_updategr, input_updategr},
215 {region_activated, input_activated},
216 {region_inactivated, input_inactivated},
222 IMPLCLASS(WInput, WWindow, input_deinit, input_dynfuntab);