[cairo] problem with scaling images
Bill Spitzak
spitzak at d2.com
Thu Jul 14 11:54:10 PDT 2005
Though I can't get them now, I did see his sample images before when
this was first posted.
It looks like the alpha for each image he draws is replaced with a
gradient with 1,1 in the upper-left corner and 0,0 in the lower-right.
His buttons are drawn by cutting the image into 9 pieces in a
tic-tac-toe pattern and scaling each piece differently, with the corners
unscaled, the edges scaled in one direction, and the center scaled in both.
Though I did not look at the code, I would suspect a bug in Cairo
itself, as the color part of the image appears to be correct.
Kristian Høgsberg wrote:
> Benjamin Berg wrote:
>
>> Hello,
>>
>> I am currently trying to port my gtk engine to cairo.
>
>
> Good news!
>
>> Everything worked
>> pretty smoothly, but I ran into a problem.
>>
>> I am trying to draw scaled images, but somehow they fade out at one
>> side, and are placed at the wrong position. For an example see:
>> http://benjamin.sipsolutions.net/screenshots/zenity-wrong.png
>> as a reference, an old version not rendered with cairo:
>> http://benjamin.sipsolutions.net/screenshots/zenity-correct.png
>>
>> For example look at the top of the buttons. The line should have full
>> opacity everywhere, but at the left it transparent.
>>
>>
>> I have attached image.c, which is, where I think the problem is in. The
>> draw_image_part function in image.c:313 should draw an image at a
>> certain position and scale. But as soon as the the image needs to be
>> scaled it does not work correctly. The corners, which are not scaled,
>> are drawn correctly.
>> To demonstrate this, here a screenshot where only the corners are drawn:
>> http://benjamin.sipsolutions.net/screenshots/zenity-corners-only.png
>
>
> Hi,
>
> I wasn't able to view any of your sipsolutions.net screenshots or get
> the theme source code, I got "Document contains no data". From your
> description of the problem, it sounds like a workaround could be setting
> the pattern filtering to be CAIRO_FILTER_NEAREST:
>
> cairo_pattern_set_filter (pattern, CAIRO_FILTER_NEAREST);
>
> but I think the real problem could be an off-by-one error in the width
> calculation in your code, or in possibly in cairo. If you can put the
> code and the screenshots up somewhere where I can get them, I'll take a
> look.
>
> cheers,
> Kristian
> _______________________________________________
> cairo mailing list
> cairo at cairographics.org
> http://lists.freedesktop.org/mailman/listinfo/cairo
>
More information about the cairo
mailing list