Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Supported by

Text's anchor point

Dear OS community,

I'm working on a task in which the sizes of two characters are changing.

I'm presenting two letters in different sizes side-by-side, and I would like to keep the distance between their centers as constant as possible but it seems like that's not working. for example with this code:

my_canvas = Canvas()
my_canvas['LeftText'] = Text(str(var.Left), x= -100, y=0, center=True,font_size=var.SizeLeft)
my_canvas['RightText'] = Text(str(var.Right), x= 100, y=0, center=True, font_size=var.SizeRight)
my_canvas.show()

It seems that some size changes make the digit to be presented "lower" in the screen.
I think that the problem is the anchor point of the characters, which is not centered per characters (Top left maybe?).

Is there anything I can do?

Thanks,
SH

Comments

  • Hi SH,

    Indeed, the text is rendered as a bitmap that just fits around the text, and then the center of this bitmap is used as an anchor point. This can cause offsets, which is a known issue.

    For now, a workaround would be to embed both strings in a template that contains letters that use the full vertical range (like 'y' and 'X' in most fonts). To avoid these letters from being visible, you can use a <span>. Like so:

    var.SizeLeft = 32
    var.SizeRight = 32
    var.Left = 'la'
    var.Right = 'phrase'
    
    template = '<span style="color:black;">yX</span>%s<span style="color:black;">yX</span>'
    
    my_canvas = Canvas()
    my_canvas['LeftText'] = Text(template % var.Left, x= -100, y=0, center=True,font_size=var.SizeLeft)
    my_canvas['RightText'] = Text(template % var.Right, x= 100, y=0, center=True, font_size=var.SizeRight)
    my_canvas.show()
    

    Cheers!
    Sebastiaan

  • Dear Sebastiaan,

    Thanks you very much for your answer (and for OpenSesame:smile:)!

    Yet, I'm not sure it's fully answering my problem because now the stimuli are overlapping (see pic as an example) .

    Is there anything I missed? Unfortunately, I can't really change the sizes i'm using...

    Best,
    SH

  • One way I can see around that is to make the text almost transparent, using the rbga() color definition. If you make the text completely transparent (rgba(0,0,0,0)) the bounding-box issue will re-emerge. But if you use an alpha of 0.01 it should look good.

    template = '<span style="color:rgba(0,0,0,0.01);">yX</span>%s<span style="color:rgba(0,0,0,0.01);">yX</span>'
    
  • This is just perfect. Thank you so much!

  • Hello! It's been a few years since this discussion, and I've encountered this issue again.

    I'm using the most up-to-date version of OpenSesame, but for some reason, the solution doesn't seem to work as it did back in 2018. I've noticed that this problem has been marked as resolved on GitHub. However, when creating two text objects with different sizes, they still appear to have an offset from the center.

    Has there been any change in how this should be implemented, or are there any new recommendations for addressing this issue?

    Any help or insights would be greatly appreciated.

    Thank you!

Sign In or Register to comment.

agen judi bola , sportbook, casino, togel, number game, singapore, tangkas, basket, slot, poker, dominoqq, agen bola. Semua permainan bisa dimainkan hanya dengan 1 ID. minimal deposit 50.000 ,- bonus cashback hingga 10% , diskon togel hingga 66% bisa bermain di android dan IOS kapanpun dan dimana pun. poker , bandarq , aduq, domino qq , dominobet. Semua permainan bisa dimainkan hanya dengan 1 ID. minimal deposit 10.000 ,- bonus turnover 0.5% dan bonus referral 20%. Bonus - bonus yang dihadirkan bisa terbilang cukup tinggi dan memuaskan, anda hanya perlu memasang pada situs yang memberikan bursa pasaran terbaik yaitu http://45.77.173.118/ Bola168. Situs penyedia segala jenis permainan poker online kini semakin banyak ditemukan di Internet, salah satunya TahunQQ merupakan situs Agen Judi Domino66 Dan BandarQ Terpercaya yang mampu memberikan banyak provit bagi bettornya. Permainan Yang Di Sediakan Dewi365 Juga sangat banyak Dan menarik dan Peluang untuk memenangkan Taruhan Judi online ini juga sangat mudah . Mainkan Segera Taruhan Sportbook anda bersama Agen Judi Bola Bersama Dewi365 Kemenangan Anda Berapa pun akan Terbayarkan. Tersedia 9 macam permainan seru yang bisa kamu mainkan hanya di dalam 1 ID saja. Permainan seru yang tersedia seperti Poker, Domino QQ Dan juga BandarQ Online. Semuanya tersedia lengkap hanya di ABGQQ. Situs ABGQQ sangat mudah dimenangkan, kamu juga akan mendapatkan mega bonus dan setiap pemain berhak mendapatkan cashback mingguan. ABGQQ juga telah diakui sebagai Bandar Domino Online yang menjamin sistem FAIR PLAY disetiap permainan yang bisa dimainkan dengan deposit minimal hanya Rp.25.000. DEWI365 adalah Bandar Judi Bola Terpercaya & resmi dan terpercaya di indonesia. Situs judi bola ini menyediakan fasilitas bagi anda untuk dapat bermain memainkan permainan judi bola. Didalam situs ini memiliki berbagai permainan taruhan bola terlengkap seperti Sbobet, yang membuat DEWI365 menjadi situs judi bola terbaik dan terpercaya di Indonesia. Tentunya sebagai situs yang bertugas sebagai Bandar Poker Online pastinya akan berusaha untuk menjaga semua informasi dan keamanan yang terdapat di POKERQQ13. Kotakqq adalah situs Judi Poker Online Terpercayayang menyediakan 9 jenis permainan sakong online, dominoqq, domino99, bandarq, bandar ceme, aduq, poker online, bandar poker, balak66, perang baccarat, dan capsa susun. Dengan minimal deposit withdraw 15.000 Anda sudah bisa memainkan semua permaina pkv games di situs kami. Jackpot besar,Win rate tinggi, Fair play, PKV Games