I have a screen with a logo on it, I would like the logo to scale with
screen size. I have tried more than a couple variations on:
# Construct an image
@logo = FXPNGImage.new(getApp(), File.open("logo.png", "rb").read,
IMAGE_KEEP)
# Prep an image Frame
image = FXImageFrame.new(self, @logo, LAYOUT_FILL_X | LAYOUT_FILL_Y)
image.backColor = FXColor::Blue
image.connect(SEL_CONFIGURE) do |sender, sel, evt|
if image.width > 100 && image.height > 100
@logo.scale(image.width, image.height)
end
end
This works, but the image "degrades" from all the scaling. How would I
go about keeping the original image? Any sort of "dup" on the FXImage
results in an exception (at least for me).
Thanks in advance
pth
Ok I am still very interested if there is a better solution, but this
works for me:
# Construct an image
@logo = FXPNGImage.new(getApp(), File.open("logo.png", "rb").read,
IMAGE_KEEP)
stream = FXMemoryStream.open(FXStreamSave,nil)
@logo.savePixels(stream)
puts stream
@buffer = stream.takeBuffer
stream.close
p @buffer
# Prep an image Frame
image = FXImageFrame.new(self, @logo, LAYOUT_FILL_X | LAYOUT_FILL_Y)
image.backColor = FXColor::Blue
image.connect(SEL_CONFIGURE) do |sender, sel, evt|
if image.width > 100 && image.height > 100
stream = FXMemoryStream.open(FXStreamLoad, @buffer)
@logo.loadPixels(stream)
@logo.scale(image.width, image.height)
stream.close
end
end
end
···
On 2/2/06, Patrick Hurley <phurley@gmail.com> wrote:
I have a screen with a logo on it, I would like the logo to scale with
screen size. I have tried more than a couple variations on:
# Construct an image
@logo = FXPNGImage.new(getApp(), File.open("logo.png", "rb").read,
IMAGE_KEEP)
# Prep an image Frame
image = FXImageFrame.new(self, @logo, LAYOUT_FILL_X | LAYOUT_FILL_Y)
image.backColor = FXColor::Blue
image.connect(SEL_CONFIGURE) do |sender, sel, evt|
if image.width > 100 && image.height > 100
@logo.scale(image.width, image.height)
end
end
This works, but the image "degrades" from all the scaling. How would I
go about keeping the original image? Any sort of "dup" on the FXImage
results in an exception (at least for me).
Thanks in advance
pth
At the risk of talking to myself too much. Here is the cleaned up solution:
class FXScaledImageFrame < FXImageFrame
def initialize(parent, img, opts =
FRAME_SUNKEN|FRAME_THICK,x=0,y=0,w=0,h=0,pl=0,pr=0,pt=0,pb=0)
@img = img
FXMemoryStream.open(FXStreamSave, nil) do |stream|
@img.savePixels(stream)
@buffer = stream.takeBuffer
end
super
self.connect(SEL_CONFIGURE) do |sender, sel, evt|
if width > 1 and height > 1
FXMemoryStream.open(FXStreamLoad, @buffer) do |stream|
@img.loadPixels(stream)
end
@img.scale(width, height)
end
end
yield self if block_given?
end
end
···
On 2/2/06, Patrick Hurley <phurley@gmail.com> wrote:
On 2/2/06, Patrick Hurley <phurley@gmail.com> wrote:
> I have a screen with a logo on it, I would like the logo to scale with
> screen size. I have tried more than a couple variations on:
>
> # Construct an image
> @logo = FXPNGImage.new(getApp(), File.open("logo.png", "rb").read,
> IMAGE_KEEP)
>
> # Prep an image Frame
> image = FXImageFrame.new(self, @logo, LAYOUT_FILL_X | LAYOUT_FILL_Y)
> image.backColor = FXColor::Blue
>
> image.connect(SEL_CONFIGURE) do |sender, sel, evt|
> if image.width > 100 && image.height > 100
> @logo.scale(image.width, image.height)
> end
> end
>
> This works, but the image "degrades" from all the scaling. How would I
> go about keeping the original image? Any sort of "dup" on the FXImage
> results in an exception (at least for me).
>
> Thanks in advance
> pth
>
>
Ok I am still very interested if there is a better solution, but this
works for me:
# Construct an image
@logo = FXPNGImage.new(getApp(), File.open("logo.png", "rb").read,
IMAGE_KEEP)
stream = FXMemoryStream.open(FXStreamSave,nil)
@logo.savePixels(stream)
puts stream
@buffer = stream.takeBuffer
stream.close
p @buffer
# Prep an image Frame
image = FXImageFrame.new(self, @logo, LAYOUT_FILL_X | LAYOUT_FILL_Y)
image.backColor = FXColor::Blue
image.connect(SEL_CONFIGURE) do |sender, sel, evt|
if image.width > 100 && image.height > 100
stream = FXMemoryStream.open(FXStreamLoad, @buffer)
@logo.loadPixels(stream)
@logo.scale(image.width, image.height)
stream.close
end
end
end