#ifdef HAVE_BG_PIXMAP
bgPixmap_t::bgPixmap_t ()
{
+ // this is basically redundant as bgPixmap_t is only used in
+ // zero_initialised-derived structs
#ifdef HAVE_AFTERIMAGE
original_asim = NULL;
#endif
flags = 0;
pixmap = None;
valid_since = invalid_since = 0;
+ target = 0;
}
void
# ifdef BG_IMAGE_FROM_FILE
# ifdef HAVE_AFTERIMAGE
- if (original_asim != NULL)
+ if (original_asim)
# endif
{
if (h_scale != 0 || v_scale != 0
# ifdef BG_IMAGE_FROM_FILE
# ifdef HAVE_AFTERIMAGE
- if (original_asim != NULL)
+ if (original_asim)
# endif
{
if (h_align == rootAlign || v_align == rootAlign)
bool bgPixmap_t::need_client_side_rendering ()
{
# ifdef HAVE_AFTERIMAGE
- if (original_asim != NULL)
+ if (original_asim)
return true;
# endif
# ifdef ENABLE_TRANSPARENCY
x = -x;
y = -y;
}
+
if (h_align != rootAlign)
x = make_align_position (h_align, target_width, w > 0 ? w : (int)original_asim->width);
+
if (v_align != rootAlign)
y = make_align_position (v_align, target_height, h > 0 ? h : (int)original_asim->height);
}
- if (original_asim == NULL
+ if (!original_asim
|| x >= target_width
|| y >= target_height
|| (w > 0 && x + w <= 0)
new_pmap_width = background->width;
new_pmap_height = background->height;
result = background;
+
if (background_tint != TINT_LEAVE_SAME)
{
ASImage* tmp = tile_asimage (target->asv, background, 0, 0,
else
{
result = original_asim;
+
if ((w > 0 && w != original_asim->width)
|| (h > 0 && h != original_asim->height))
{
background ? ASA_ASImage : ASA_XImage,
100, ASIMAGE_QUALITY_DEFAULT);
}
+
if (background == NULL)
{
/* if tiling - pixmap has to be sized exactly as the image,
if (h_scale == 0 || v_scale == 0)
{
ASImage *tmp = tile_asimage (target->asv, result,
- (h_scale > 0) ? 0 : (int)result->width - x,
- (v_scale > 0) ? 0 : (int)result->height - y,
- new_pmap_width,
- new_pmap_height,
- TINT_LEAVE_SAME, ASA_XImage,
- 100, ASIMAGE_QUALITY_DEFAULT);
+ (h_scale > 0) ? 0 : (int)result->width - x,
+ (v_scale > 0) ? 0 : (int)result->height - y,
+ new_pmap_width,
+ new_pmap_height,
+ TINT_LEAVE_SAME, ASA_XImage,
+ 100, ASIMAGE_QUALITY_DEFAULT);
if (tmp)
{
if (result != original_asim)
destroy_asimage (&result);
+
result = tmp;
}
}
layers[0].clip_height = target_height;
layers[0].tint = background_tint;
layers[1].im = result;
+
if (w <= 0)
{
/* tile horizontally */
layers[1].dst_x = x;
layers[1].clip_width = result->width;
}
+
if (h <= 0)
{
while (y > 0) y -= (int)result->height;
layers[1].dst_y = y;
layers[1].clip_height = result->height;
}
+
if (target->rs[Rs_blendtype])
{
layers[1].merge_scanlines = blend_scanlines_name2func (target->rs[Rs_blendtype]);
if (layers[1].merge_scanlines == NULL)
layers[1].merge_scanlines = alphablend_scanlines;
}
+
ASImage *tmp = merge_layers (target->asv, layers, 2, target_width, target_height,
ASA_XImage, 0, ASIMAGE_QUALITY_DEFAULT);
+
if (tmp)
{
if (result != original_asim)
destroy_asimage (&result);
+
result = tmp;
}
+
free (layers);
}
}
{
char *f;
- assert (file != NULL);
+ assert (file);
- if (*file != '\0')
+ if (*file)
{
# ifdef HAVE_AFTERIMAGE
if (target->asimman == NULL)
target->asimman = create_generic_imageman (target->rs[Rs_path]);
+
if ((f = strchr (file, ';')) == NULL)
original_asim = get_asimage (target->asimman, file, 0xFFFFFFFF, 100);
else
original_asim = get_asimage (target->asimman, f, 0xFFFFFFFF, 100);
free (f);
}
- return (original_asim != NULL);
+
+ return original_asim;
# endif
}
+
return false;
}
flags |= isTransparent;
return true;
}
+
return false;
}