/*
* ion/ioncore/resize.c
*
- * Copyright (c) Tuomo Valkonen 1999-2006.
+ * Copyright (c) Tuomo Valkonen 1999-2007.
*
- * Ion is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or
- * (at your option) any later version.
+ * See the included file LICENSE for details.
*/
#include <stdio.h>
}
+static void moveresmode_setorig(WMoveresMode *mode)
+{
+ mode->dx1=0;
+ mode->dx2=0;
+ mode->dy1=0;
+ mode->dy2=0;
+ mode->origgeom=mode->geom;
+}
+
+
+static void moveresmode_do_newgeom(WMoveresMode *mode, WRQGeomParams *rq)
+{
+ if(XOR_RESIZE)
+ moveres_draw_rubberband(mode);
+
+ if(mode->reg!=NULL){
+ rq->flags|=mode->rqflags;
+ region_rqgeom(mode->reg, rq, &mode->geom);
+ }
+
+ moveres_draw_infowin(mode);
+
+ if(XOR_RESIZE)
+ moveres_draw_rubberband(mode);
+}
+
+
static void moveresmode_delta(WMoveresMode *mode,
int dx1, int dx2, int dy1, int dy2,
WRectangle *rret)
rq.geom.y+=mode->origgeom.h-rq.geom.h;
}
- if(XOR_RESIZE)
- moveres_draw_rubberband(mode);
+ moveresmode_do_newgeom(mode, &rq);
- if(mode->reg!=NULL){
- rq.flags=mode->rqflags;
- region_rqgeom(mode->reg, &rq, &mode->geom);
- }
-
- if(!mode->resize_cumulative){
- mode->dx1=0;
- mode->dx2=0;
- mode->dy1=0;
- mode->dy2=0;
- mode->origgeom=mode->geom;
- }
-
- moveres_draw_infowin(mode);
-
- if(XOR_RESIZE)
- moveres_draw_rubberband(mode);
+ if(!mode->resize_cumulative)
+ moveresmode_setorig(mode);
if(rret!=NULL)
*rret=mode->geom;
}
+void moveresmode_rqgeom(WMoveresMode *mode, WRQGeomParams *rq,
+ WRectangle *rret)
+{
+ mode->mode=MOVERES_SIZE;
+ moveresmode_do_newgeom(mode, rq);
+ moveresmode_setorig(mode);
+}
+
+
/* It is ugly to do this here, but it will have to do for now... */
static void set_saved(WMoveresMode *mode, WRegion *reg)
{
}
+void rqgeomparams_from_table(WRQGeomParams *rq,
+ const WRectangle *origg, ExtlTab g)
+{
+ rq->geom=*origg;
+ rq->flags=REGION_RQGEOM_WEAK_ALL;
+
+ if(extl_table_gets_i(g, "x", &(rq->geom.x)))
+ rq->flags&=~REGION_RQGEOM_WEAK_X;
+ if(extl_table_gets_i(g, "y", &(rq->geom.y)))
+ rq->flags&=~REGION_RQGEOM_WEAK_Y;
+ if(extl_table_gets_i(g, "w", &(rq->geom.w)))
+ rq->flags&=~REGION_RQGEOM_WEAK_W;
+ if(extl_table_gets_i(g, "h", &(rq->geom.h)))
+ rq->flags&=~REGION_RQGEOM_WEAK_H;
+
+ rq->geom.w=maxof(1, rq->geom.w);
+ rq->geom.h=maxof(1, rq->geom.h);
+}
+
+
/*EXTL_DOC
* Attempt to resize and/or move \var{reg}. The table \var{g} is a usual
* geometry specification (fields \var{x}, \var{y}, \var{w} and \var{h}),
EXTL_EXPORT_AS(WRegion, rqgeom)
ExtlTab region_rqgeom_extl(WRegion *reg, ExtlTab g)
{
- WRectangle ogeom=REGION_GEOM(reg);
WRQGeomParams rq=RQGEOMPARAMS_INIT;
+ WRectangle res;
+ rqgeomparams_from_table(&rq, ®ION_GEOM(reg), g);
- rq.geom=ogeom;
- rq.flags=REGION_RQGEOM_WEAK_ALL;
-
-
- if(extl_table_gets_i(g, "x", &(rq.geom.x)))
- rq.flags&=~REGION_RQGEOM_WEAK_X;
- if(extl_table_gets_i(g, "y", &(rq.geom.y)))
- rq.flags&=~REGION_RQGEOM_WEAK_Y;
- if(extl_table_gets_i(g, "w", &(rq.geom.w)))
- rq.flags&=~REGION_RQGEOM_WEAK_W;
- if(extl_table_gets_i(g, "h", &(rq.geom.h)))
- rq.flags&=~REGION_RQGEOM_WEAK_H;
-
- rq.geom.w=maxof(1, rq.geom.w);
- rq.geom.h=maxof(1, rq.geom.h);
-
- region_rqgeom(reg, &rq, &ogeom);
+ region_rqgeom(reg, &rq, &res);
- return extl_table_from_rectangle(&ogeom);
+ return extl_table_from_rectangle(&res);
}