зеркало из https://github.com/mozilla/gecko-dev.git
Improve column resizing.
This commit is contained in:
Родитель
ca544cb873
Коммит
b40eb43250
|
@ -230,6 +230,7 @@ static void UnhideAction(Widget w, XEvent *event, String *, Cardinal *);
|
||||||
static void setHideUnhideSensitivity(Widget w);
|
static void setHideUnhideSensitivity(Widget w);
|
||||||
static void MenuArm(Widget w, XEvent *event, String *, Cardinal *);
|
static void MenuArm(Widget w, XEvent *event, String *, Cardinal *);
|
||||||
static void MenuDisarm(Widget w, XEvent *event, String *, Cardinal *);
|
static void MenuDisarm(Widget w, XEvent *event, String *, Cardinal *);
|
||||||
|
static void ResizeColumnToFit(XmLGridWidget g, int x);
|
||||||
static int SizeColumnsToFit(XmLGridWidget g, int start_at);
|
static int SizeColumnsToFit(XmLGridWidget g, int start_at);
|
||||||
static void GridCrossingEH(Widget w, XtPointer closure, XEvent *event,
|
static void GridCrossingEH(Widget w, XtPointer closure, XEvent *event,
|
||||||
Boolean *ctd);
|
Boolean *ctd);
|
||||||
|
@ -2149,6 +2150,8 @@ DrawResizeLine(XmLGridWidget g,
|
||||||
{
|
{
|
||||||
if (g->grid.inMode != InResize)
|
if (g->grid.inMode != InResize)
|
||||||
return;
|
return;
|
||||||
|
if (g->grid.hsPolicy == XmRESIZE_IF_POSSIBLE && !g->grid.resizeIsVert)
|
||||||
|
return;
|
||||||
DrawXORRect(g, xy, 2, g->grid.resizeIsVert, erase);
|
DrawXORRect(g, xy, 2, g->grid.resizeIsVert, erase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6967,7 +6970,11 @@ ButtonMotion(Widget w,
|
||||||
if (g->grid.resizeIsVert)
|
if (g->grid.resizeIsVert)
|
||||||
DrawResizeLine(g, me->y, 0);
|
DrawResizeLine(g, me->y, 0);
|
||||||
else
|
else
|
||||||
|
{
|
||||||
DrawResizeLine(g, me->x, 0);
|
DrawResizeLine(g, me->x, 0);
|
||||||
|
if (g->grid.hsPolicy == XmRESIZE_IF_POSSIBLE)
|
||||||
|
ResizeColumnToFit(g, me->x);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* drag scrolling */
|
/* drag scrolling */
|
||||||
|
@ -7750,17 +7757,6 @@ Select(Widget w,
|
||||||
(rect.width - GetColWidth(g, c));
|
(rect.width - GetColWidth(g, c));
|
||||||
if (width < 6 && g->grid.allowColHide == False)
|
if (width < 6 && g->grid.allowColHide == False)
|
||||||
width = 6;
|
width = 6;
|
||||||
if (g->grid.hsPolicy == XmRESIZE_IF_POSSIBLE)
|
|
||||||
{
|
|
||||||
/* Resize all columns to the right */
|
|
||||||
XmLGridColumn colp;
|
|
||||||
colp = (XmLGridColumn)XmLArrayGet(g->grid.colArray,
|
|
||||||
cbs.column);
|
|
||||||
colp->grid.width = width;
|
|
||||||
SizeColumnsToFit(g, cbs.column + 1);
|
|
||||||
HorizLayout(g, 0);
|
|
||||||
DrawArea(g, DrawAll, 0, 0);
|
|
||||||
}
|
|
||||||
XtVaSetValues((Widget)g,
|
XtVaSetValues((Widget)g,
|
||||||
XmNcolumnType, cbs.columnType,
|
XmNcolumnType, cbs.columnType,
|
||||||
XmNcolumn, cbs.column,
|
XmNcolumn, cbs.column,
|
||||||
|
@ -11095,6 +11091,33 @@ MenuDisarm(Widget w,
|
||||||
g->grid.inMode = InNormal;
|
g->grid.inMode = InNormal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ResizeColumnToFit(XmLGridWidget g, int new_x)
|
||||||
|
{
|
||||||
|
XmLGridColumn colp;
|
||||||
|
int width = 0;
|
||||||
|
XRectangle rect;
|
||||||
|
if (!RowColToXY(g, 0, g->grid.resizeCol, False, &rect))
|
||||||
|
{
|
||||||
|
if (new_x > rect.x)
|
||||||
|
width = (new_x - rect.x) -
|
||||||
|
(rect.width - GetColWidth(g, g->grid.resizeCol));
|
||||||
|
if (width < g->grid.minColWidth)
|
||||||
|
width = g->grid.minColWidth;
|
||||||
|
|
||||||
|
/*printf("col(%d) resize_xy(%3d) colx(%3d) colw(%3d) column_width(%3d) new_width(%3d)\n", g->grid.resizeCol, g->grid.resizeLineXY, rect.x, rect.width, GetColWidth(g, g->grid.resizeCol), width);*/
|
||||||
|
|
||||||
|
/* Resize all columns to the right */
|
||||||
|
colp = (XmLGridColumn)XmLArrayGet(g->grid.colArray,
|
||||||
|
g->grid.resizeCol);
|
||||||
|
colp->grid.width = width;
|
||||||
|
SizeColumnsToFit(g, g->grid.resizeCol + 1);
|
||||||
|
HorizLayout(g, 0);
|
||||||
|
DrawArea(g, DrawAll, 0, 0);
|
||||||
|
g->grid.resizeLineXY = rect.x + width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
SizeColumnsToFit(XmLGridWidget g, int starting_at)
|
SizeColumnsToFit(XmLGridWidget g, int starting_at)
|
||||||
|
@ -11156,7 +11179,7 @@ SizeColumnsToFit(XmLGridWidget g, int starting_at)
|
||||||
{
|
{
|
||||||
int col_width;
|
int col_width;
|
||||||
int col_delta;
|
int col_delta;
|
||||||
Dimension new_col_width;
|
int new_col_width;
|
||||||
|
|
||||||
colp = (XmLGridColumn)XmLArrayGet(g->grid.colArray, ii);
|
colp = (XmLGridColumn)XmLArrayGet(g->grid.colArray, ii);
|
||||||
col_width = colp->grid.width;
|
col_width = colp->grid.width;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче