Some questions and request for Athens

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Some questions and request for Athens

Tristan Bourgois-2
Hi!

I have some questions and request for Athens :)

1 Do exist a possibility in Athens to draw a Surface on a Surface?
This is an example of what I search:
aSurf drawSurface: anOtherSurface at: aPosition
(I need it for draw image on a surface)

2 About my first question, I try to draw a png image on a Surface and
I get some strange behavior. When nothing is applied on my first
surface and draw the image in a rectangle path I crash the VM!
This an example I tried and crash my VM:

|surf pharoLogo ref path patternPaint|
surf := AthensCairoSurface extent: 600@600.

ref := 'pharo.png' asFileReference.
pharoLogo := AthensCairoSurface createFromFile: ref fullName ifFailed:[nil].

surf drawDuring: [:can|
        surf clear.
        patternPaint := can setPaint: pharoLogo.
        patternPaint setExtend: #None.
        can drawShape: (0@0 extent: pharoLogo extent).
].
Display getCanvas drawImage: surf asForm at: 0@0.

If you need more information about the crash and my environment ask it :)

3. Do exist something in Athens to create some text and get the extent
of the text? I tried to draw text but I only succeed to draw a text
without font (only width) and I don't found how to get the extent of
this text :( This is really important for the next of the porting
because I'm blocking on that and the textModel is not necessary for
the next of my work because they already have a layoutManager for the
text.

Thanks :)

Tristan

PS: The porting advance as well :) I have animation and that's really amazing :)

Reply | Threaded
Open this post in threaded view
|

Re: Some questions and request for Athens

Igor Stasenko
On 25 March 2013 11:45, Tristan Bourgois <[hidden email]> wrote:
> Hi Igor!
>
> I have some questions and request for Athens :)
>
> 1 Do exist a possibility in Athens to draw a Surface on a Surface?
> For example :
> aSurf drawSurface: anOtherSurface at: aPosition
> (I need it for draw image on a surface)

yes. You can use Forms or surfaces as paints so they act like 2D textures:

canvas setPaint: someSurface.
canvas drawShape: myRect.

>
> 2 About my first question, I try to draw a png image on a Surface and
> I get some strange behavior. When nothing is applied on my first
> surface and draw the image in a rectangle path I crash the VM!
> This an example I tried and crash my VM:
>
> |surf pharoLogo ref path patternPaint|
> surf := AthensCairoSurface extent: 600@600.
>
> ref := 'pharo.png' asFileReference.
> pharoLogo := AthensCairoSurface createFromFile: ref fullName ifFailed:[nil].
>
> surf drawDuring: [:can|
>         surf clear.
>         patternPaint := can setPaint: pharoLogo.
>         patternPaint setExtend: #None.
>         can drawShape: (0@0 extent: pharoLogo extent).
> ].
> Display getCanvas drawImage: surf asForm at: 0@0.
>
> If you need more information about the crash and my environment ask it :)
>
weird... it should be working fine.

> 3. Do exist something in Athens to create some text and get the extent
> of the text? I tried to draw text but I only succeed to draw a text
> without font (only width) and I don't found how to get the extent of
> this text :( This is really important for the next of the porting
> because I'm blocking on that and the textModel is not necessary for
> the next of my work because they already have a layoutManager for the
> text.
>
You can use freetype to measure text extent. Please look how i doing it with
AthensTextScanner.
Because the default methods of freetype using rounding for font size(s),
which is not really nice.
I added more precise methods, which do not do any rounding and using
them for measuring
text extent.

Try this:

text := 'asdsdgs' asText.
lines := (AthensTextComposer scan: text for: AthensTextScanner new) lines.

lines first width.

will give you the width.

But for that to work, your default font should be TTF font, or set the
text font via text attributes, e.g.:

text addAttribute: (TextFontReference toFont: (LogicalFont familyName:
'Arial' pointSize: 10))


--
Best regards,
Igor Stasenko.