aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--generic/Item.c259
1 files changed, 128 insertions, 131 deletions
diff --git a/generic/Item.c b/generic/Item.c
index 95580d1..a9a5e3a 100644
--- a/generic/Item.c
+++ b/generic/Item.c
@@ -2041,12 +2041,16 @@ GetFieldBBox(FieldSet field_set,
unsigned int index,
ZnBBox *field_bbox)
{
+ ZnReal ox, oy;
+
if (field_set->label_format) {
+ ox = REAL_TO_INT(field_set->label_pos.x);
+ oy = REAL_TO_INT(field_set->label_pos.y);
ComputeFieldAttachment(field_set, index, field_bbox);
- field_bbox->orig.x += field_set->label_pos.x;
- field_bbox->orig.y += field_set->label_pos.y;
- field_bbox->corner.x += field_set->label_pos.x;
- field_bbox->corner.y += field_set->label_pos.y;
+ field_bbox->orig.x += ox;
+ field_bbox->orig.y += oy;
+ field_bbox->corner.x += ox;
+ field_bbox->corner.y += oy;
}
else {
ResetBBox(field_bbox);
@@ -2077,7 +2081,7 @@ ComputeFieldTextLocation(Field field_ptr,
Tk_GetFontMetrics(field_ptr->font, &fm);
w = ZnTextWidth(field_ptr->font, field_ptr->text, strlen(field_ptr->text));
h = fm.ascent + fm.descent;
- text_bbox->orig.y = (bbox->orig.y + bbox->corner.y - h) / 2;
+ text_bbox->orig.y = (bbox->orig.y + bbox->corner.y - h) / 2.0;
text_bbox->corner.y = text_bbox->orig.y + h;
pos->y = text_bbox->orig.y + fm.ascent;
@@ -2089,7 +2093,7 @@ ComputeFieldTextLocation(Field field_ptr,
text_bbox->orig.x = bbox->corner.x - w - 2;
break;
default:
- text_bbox->orig.x = (bbox->orig.x + bbox->corner.x - w) / 2;
+ text_bbox->orig.x = (bbox->orig.x + bbox->corner.x - w) / 2.0;
break;
}
text_bbox->corner.x = text_bbox->orig.x + w;
@@ -2912,7 +2916,7 @@ ComposeTransform(ZnTransfo *transfo,
else {
ZnPoint scale, trans, local_scale, local_trans;
ZnReal local_rot, rot;
- ZnTransfo t, t2;
+ ZnTransfo t, t2;
/*
* Need to decompose the local transform in translation,
@@ -3026,10 +3030,6 @@ PushTransform(WidgetInfo *wi,
ZnTransfo *next_t;
int num_t;
- if (transfo == NULL) {
- return;
- }
-
/*
* Push the current transform and concatenate
* the new transform taking into account the
@@ -3852,8 +3852,7 @@ ConfigureField(FieldSet field_set,
field_ptr->gradient = ZnGetReliefGradient(wi->interp, wi->win,
ZnNameOfColor(ZnGetGradientColor(wi->win,
field_ptr->fill_color,
- 50.0,
- NULL)));
+ 50.0, NULL)));
if (field_ptr->gradient == NULL) {
return ZN_ERROR;
}
@@ -4070,24 +4069,22 @@ FieldsEngine(FieldSet field_set,
ZnReal val;
if (field_set->label_format && LabelFormatNumFields(field_set->label_format)) {
- bbox.orig = field_set->label_pos;
+ bbox.orig.x = REAL_TO_INT(field_set->label_pos.x);
+ bbox.orig.y = REAL_TO_INT(field_set->label_pos.y);
GetLabelBBox(field_set, &lwidth, &lheight);
- bbox.corner.x = field_set->label_pos.x + lwidth;
- bbox.corner.y = field_set->label_pos.y + lheight;
+ bbox.corner.x = bbox.orig.x + lwidth;
+ bbox.corner.y = bbox.orig.y + lheight;
CurrentClip(wi, NULL, &global_clip_box, NULL);
-#if GLX
+
if (!wi->render) {
-#endif
IntersectBBox(global_clip_box, &bbox, &label_clip_box);
if (IsEmptyBBox(&label_clip_box)) {
return;
}
-#if GLX
}
else {
label_clip_box = bbox;
}
-#endif
num = LabelFormatNumFields(field_set->label_format);
for (i = 0; i < num; i++) {
@@ -4350,7 +4347,7 @@ RenderField(WidgetInfo *wi,
XColor *color;
int alpha, alpha2;
- alpha2 = 65535*wi->alpha/100;
+ alpha2 = 100*wi->alpha*65535/100;
/*
* Draw the background.
*/
@@ -4399,7 +4396,7 @@ RenderField(WidgetInfo *wi,
*/
if (field_ptr->image != ZnUnspecifiedImage) {
RenderImage(wi, GetImageTexture(wi->win, field_ptr->image_name, field_ptr->image),
- NULL, 255, &(pm_bbox->orig));
+ NULL, 100, &(pm_bbox->orig));
}
}
else {
@@ -4410,17 +4407,19 @@ RenderField(WidgetInfo *wi,
if (!field_ptr->txf) {
field_ptr->txf = GetTexFont(wi->win, field_ptr->font);
}
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- glEnable(GL_TEXTURE_2D);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- color = field_ptr->color;
- glColor4us(color->red, color->green, color->blue, alpha2);
- glBindTexture(GL_TEXTURE_2D, field_ptr->txf->texobj);
- glPushMatrix();
- glTranslatef(text_pos->x, text_pos->y, 0.0);
- txfRenderString(field_ptr->txf, field_ptr->text, strlen(field_ptr->text));
- glPopMatrix();
- glDisable(GL_TEXTURE_2D);
+ if (field_ptr->txf) {
+ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+ glEnable(GL_TEXTURE_2D);
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ color = field_ptr->color;
+ glColor4us(color->red, color->green, color->blue, alpha2);
+ glBindTexture(GL_TEXTURE_2D, field_ptr->txf->texobj);
+ glPushMatrix();
+ glTranslatef(text_pos->x, text_pos->y, 0.0);
+ txfRenderString(field_ptr->txf, field_ptr->text, strlen(field_ptr->text));
+ glPopMatrix();
+ glDisable(GL_TEXTURE_2D);
+ }
}
}
}
@@ -4430,15 +4429,18 @@ RenderField(WidgetInfo *wi,
*/
if ((field_ptr->relief != RELIEF_FLAT) && (field_ptr->relief_thickness > 1)) {
ZnPoint p[5];
- p[0] = bbox->orig;
- p[2] = bbox->corner;
- p[3].x = p[0].x;
- p[3].y = p[2].y;
- p[1].x = p[2].x;
- p[1].y = p[0].y;
+
+ p[0].x = bbox->orig.x;
+ p[0].y = bbox->orig.y;
+ p[2].x = bbox->corner.x;
+ p[2].y = bbox->corner.y;
+ p[1].x = p[0].x;
+ p[1].y = p[2].y;
+ p[3].x = p[2].x;
+ p[3].y = p[0].y;
p[4] = p[0];
RenderPolygonRelief(wi, field_ptr->relief, field_ptr->gradient,
- 255, 0, p, 5, field_ptr->relief_thickness);
+ 100, 0, p, 5, field_ptr->relief_thickness);
}
/*
@@ -4709,107 +4711,102 @@ Repair(WidgetInfo *wi)
ZnPoint pts[2];
ZnPoly poly;
- /* To be done only if we are realized and
- there is something to update. */
- if (wi->realized && !IsEmptyBBox(&wi->damaged_area)) {
-
- if (wi->render) {
+ if (wi->render) {
#ifdef GLX
- ZnReal int_width, int_height;
-
- int_width = Tk_Width(wi->win) - 2*wi->inset;
- int_height = Tk_Height(wi->win) - 2*wi->inset;
-
- /*
- * We do not use the samaged area for GL rendering,
- * set it to the whole area.
- */
- wi->damaged_area.orig.x = wi->damaged_area.orig.y = 0.0;
- wi->damaged_area.corner.x = int_width;
- wi->damaged_area.corner.y = int_height;
-
- /* Set the viewport (should be moved to the resize code) */
- /*glViewport(0, 0, (GLsizei) Tk_Width(wi->win), (GLsizei) Tk_Height(wi->win));*/
- glViewport(wi->inset, wi->inset, (GLsizei) int_width, (GLsizei) int_height);
- /* Set the base coord system to the X device coord system. */
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluOrtho2D(0.0, int_width, int_height, 0.0);
- glMatrixMode(GL_MODELVIEW);
-
- /* Clear the GL buffers. */
- glClearColor(wi->back_color->red/65536.0, wi->back_color->green/65536.0,
- wi->back_color->blue/65536.0, 0.0);
- glClearStencil(0);
- glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
- glEnable(GL_BLEND);
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+ ZnReal int_width, int_height;
+
+ int_width = Tk_Width(wi->win) - 2*wi->inset;
+ int_height = Tk_Height(wi->win) - 2*wi->inset;
+
+ /*
+ * We do not use the damaged area for GL rendering,
+ * set it to the whole area.
+ */
+ wi->damaged_area.orig.x = wi->damaged_area.orig.y = 0.0;
+ wi->damaged_area.corner.x = int_width;
+ wi->damaged_area.corner.y = int_height;
+
+ /* Set the viewport (should be moved to the resize code) */
+ /*glViewport(0, 0, (GLsizei) Tk_Width(wi->win), (GLsizei) Tk_Height(wi->win));*/
+ glViewport(wi->inset, wi->inset, (GLsizei) int_width, (GLsizei) int_height);
+ /* Set the base coord system to the X device coord system. */
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluOrtho2D(0.0, int_width, int_height, 0.0);
+ glMatrixMode(GL_MODELVIEW);
+
+ /* Clear the GL buffers. */
+ glClearColor(wi->back_color->red/65536.0, wi->back_color->green/65536.0,
+ wi->back_color->blue/65536.0, 0.0);
+ glClearStencil(0);
+ glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+ glEnable(GL_BLEND);
+ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+
+ /*
+ * Setup the background tile if needed.
+ */
+ if (wi->tile != ZnUnspecifiedImage) {
+ ZnBBox bbox;
- /*
- * Setup the background tile if needed.
- */
- if (wi->tile != ZnUnspecifiedImage) {
- ZnBBox bbox;
-
- bbox.orig.x = bbox.orig.y = 0.0;
- bbox.corner.x = int_width;
- bbox.corner.y = int_height;
-
- RenderTile(wi, GetImageTexture(wi->win, wi->tile_name, wi->tile),
- NULL, NULL, NULL, (ZnPoint *) &bbox);
- }
- /*
- * Init the composite group alpha.
- */
- wi->alpha = 100;
+ bbox.orig.x = bbox.orig.y = 0.0;
+ bbox.corner.x = int_width;
+ bbox.corner.y = int_height;
- glEnable(GL_POINT_SMOOTH);
- glEnable(GL_LINE_SMOOTH);
+ RenderTile(wi, GetImageTexture(wi->win, wi->tile_name, wi->tile),
+ NULL, NULL, NULL, (ZnPoint *) &bbox);
+ }
+ /*
+ * Init the composite group alpha.
+ */
+ wi->alpha = 100;
+
+ glEnable(GL_POINT_SMOOTH);
+ glEnable(GL_LINE_SMOOTH);
#if 0
- glEnable(GL_POLYGON_SMOOTH); /* expensive ? */
+ glEnable(GL_POLYGON_SMOOTH); /* expensive ? */
#endif
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- wi->top_group->class->Render(wi->top_group);
- glFlush();
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ wi->top_group->class->Render(wi->top_group);
+ glFlush();
#endif
+ }
+ else {
+ /* Set the whole damaged area as clip rect. */
+ wi->damaged_area.orig.x = r.x = REAL_TO_INT(wi->damaged_area.orig.x);
+ wi->damaged_area.orig.y = r.y = REAL_TO_INT(wi->damaged_area.orig.y);
+ wi->damaged_area.corner.x = REAL_TO_INT(wi->damaged_area.corner.x);
+ wi->damaged_area.corner.y = REAL_TO_INT(wi->damaged_area.corner.y);
+ r.width = wi->damaged_area.corner.x - wi->damaged_area.orig.x;
+ r.height = wi->damaged_area.corner.y - wi->damaged_area.orig.y;
+ pts[0] = wi->damaged_area.orig;
+ pts[1] = wi->damaged_area.corner;
+ POLY_CONTOUR1(&poly, pts, 2);
+ PushClip(wi, &poly, True, True);
+
+ /* Fill the background of the double buffer pixmap. */
+ if (wi->tile == ZnUnspecifiedImage) {
+ values.foreground = ZnPixel(wi->back_color);
+ values.fill_style = FillSolid;
+ XChangeGC(wi->dpy, wi->gc, GCFillStyle|GCForeground, &values);
}
else {
- /* Set the whole damaged area as clip rect. */
- wi->damaged_area.orig.x = r.x = REAL_TO_INT(wi->damaged_area.orig.x);
- wi->damaged_area.orig.y = r.y = REAL_TO_INT(wi->damaged_area.orig.y);
- wi->damaged_area.corner.x = REAL_TO_INT(wi->damaged_area.corner.x);
- wi->damaged_area.corner.y = REAL_TO_INT(wi->damaged_area.corner.y);
- r.width = wi->damaged_area.corner.x - wi->damaged_area.orig.x;
- r.height = wi->damaged_area.corner.y - wi->damaged_area.orig.y;
- pts[0] = wi->damaged_area.orig;
- pts[1] = wi->damaged_area.corner;
- POLY_CONTOUR1(&poly, pts, 2);
- PushClip(wi, &poly, True, True);
+ values.fill_style = FillTiled;
+ values.tile = GetImagePixmap(wi->win, wi->tile_name, wi->tile, NULL);
+ values.ts_x_origin = values.ts_y_origin = 0;
+ XChangeGC(wi->dpy, wi->gc,
+ GCFillStyle|GCTile|GCTileStipXOrigin|GCTileStipYOrigin,
+ &values);
+ }
+ /*printf("Repair : filling rectangle: %d %d %d %d\n", r.x, r.y, r.width, r.height);*/
+ XFillRectangle(wi->dpy, wi->draw_buffer, wi->gc, r.x, r.y, r.width, r.height);
- /* Fill the background of the double buffer pixmap. */
- if (wi->tile == ZnUnspecifiedImage) {
- values.foreground = ZnPixel(wi->back_color);
- values.fill_style = FillSolid;
- XChangeGC(wi->dpy, wi->gc, GCFillStyle|GCForeground, &values);
- }
- else {
- values.fill_style = FillTiled;
- values.tile = GetImagePixmap(wi->win, wi->tile_name, wi->tile, NULL);
- values.ts_x_origin = values.ts_y_origin = 0;
- XChangeGC(wi->dpy, wi->gc,
- GCFillStyle|GCTile|GCTileStipXOrigin|GCTileStipYOrigin,
- &values);
- }
- /*printf("Repair : filling rectangle: %d %d %d %d\n", r.x, r.y, r.width, r.height);*/
- XFillRectangle(wi->dpy, wi->draw_buffer, wi->gc, r.x, r.y, r.width, r.height);
-
- /* Draw the items */
- /*printf("Drawing\n");*/
- wi->top_group->class->Draw(wi->top_group);
+ /* Draw the items */
+ /*printf("Drawing\n");*/
+ wi->top_group->class->Draw(wi->top_group);
- PopClip(wi, True);
- }
+ PopClip(wi, True);
}
}