MIN/MAX macros -> elm_priv.h

+elm_win_center
+elm_win_screen_constrain_get/set


SVN revision: 65859
This commit is contained in:
Mike Blumenkrantz 2011-12-03 22:51:12 +00:00
parent a1f1635499
commit d3b755cbe6
3 changed files with 73 additions and 0 deletions

View File

@ -4545,6 +4545,22 @@ extern "C" {
* @return EINA_TRUE if the window exists and has focus, else EINA_FALSE
*/
EAPI Eina_Bool elm_win_focus_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
* Constrain the maximum width and height of a window to the width and height of its screen
*
* When @p constrain is true, @p obj will never resize larger than the screen.
* @param obj The window object
* @param constrain EINA_TRUE to restrict the window's maximum size, EINA_FALSE to disable restriction
*/
EAPI void elm_win_screen_constrain_set(Evas_Object *obj, Eina_Bool constrain) EINA_ARG_NONNULL(1);
/**
* Retrieve the constraints on the maximum width and height of a window relative to the width and height of its screen
*
* When this function returns true, @p obj will never resize larger than the screen.
* @param obj The window object
* @return EINA_TRUE to restrict the window's maximum size, EINA_FALSE to disable restriction
*/
EAPI Eina_Bool elm_win_screen_constrain_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
/**
* Get screen geometry details for the screen that a window is on
* @param obj The window to query

View File

@ -95,6 +95,11 @@ extern const char *_elm_engines[];
#define ELM_ACCESS_MODE_OFF 0
#define ELM_ACCESS_MODE_ON 1
#undef MIN
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
#undef MAX
#define MAX(x, y) (((x) > (y)) ? (x) : (y))
struct _Elm_Config
{
int config_version;

View File

@ -25,6 +25,7 @@ struct _Elm_Win
int shot_counter;
} shot;
Eina_Bool autodel : 1;
Eina_Bool constrain : 1;
int *autodel_clear, rot;
int show_count;
struct {
@ -640,6 +641,13 @@ _elm_win_obj_callback_resize(void *data, Evas *e __UNUSED__, Evas_Object *obj, v
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
if (w < 1) w = 1;
if (h < 1) h = 1;
if (win->constrain)
{
int sw, sh;
ecore_evas_screen_geometry_get(win->ee, NULL, NULL, &sw, &sh);
w = MIN(w, sw);
h = MIN(h, sh);
}
evas_object_image_size_set(win->img_obj, w, h);
}
}
@ -673,6 +681,13 @@ _elm_win_resize_job(void *data)
win->deferred_resize_job = NULL;
ecore_evas_request_geometry_get(win->ee, NULL, NULL, &w, &h);
if (win->constrain)
{
int sw, sh;
ecore_evas_screen_geometry_get(win->ee, NULL, NULL, &sw, &sh);
w = MIN(w, sw);
h = MIN(h, sh);
}
evas_object_resize(win->win_obj, w, h);
if (win->frame_obj)
{
@ -1754,6 +1769,23 @@ elm_win_raise(Evas_Object *obj)
ecore_evas_raise(win->ee);
}
EAPI void
elm_win_center(Evas_Object *obj, Eina_Bool h, Eina_Bool v)
{
Elm_Win *win;
int win_w, win_h, screen_w, screen_h, nx, ny;
ELM_CHECK_WIDTYPE(obj, widtype);
win = elm_widget_data_get(obj);
if (!win) return;
ecore_evas_screen_geometry_get(win->ee, NULL, NULL, &screen_w, &screen_h);
evas_object_geometry_get(obj, NULL, NULL, &win_w, &win_h);
if (h) nx = win_w >= screen_w ? 0 : (screen_w / 2) - (win_w / 2);
else nx = win->screen.x;
if (v) ny = win_h >= screen_h ? 0 : (screen_h / 2) - (win_h / 2);
else ny = win->screen.y;
evas_object_move(obj, nx, ny);
}
EAPI void
elm_win_borderless_set(Evas_Object *obj, Eina_Bool borderless)
{
@ -2185,6 +2217,26 @@ elm_win_focus_get(const Evas_Object *obj)
return ecore_evas_focus_get(win->ee);
}
EAPI void
elm_win_screen_constrain_set(Evas_Object *obj, Eina_Bool constrain)
{
Elm_Win *win;
ELM_CHECK_WIDTYPE(obj, widtype);
win = elm_widget_data_get(obj);
if (!win) return;
win->constrain = !!constrain;
}
EAPI Eina_Bool
elm_win_screen_constrain_get(Evas_Object *obj)
{
Elm_Win *win;
ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE;
win = elm_widget_data_get(obj);
if (!win) return EINA_FALSE;
return win->constrain;
}
EAPI void
elm_win_screen_size_get(const Evas_Object *obj, int *x, int *y, int *w, int *h)
{