Align baselines of 2 fields

Niggemann, Bernd Bernd.Niggemann at
Mon Jun 25 04:48:22 EDT 2018

I rethought the alignment of baselines of 2 fields and did not like my previous solution to just move the fields

Here is a solution that uses the margins to do the alignment. The two fields should accommodate for the expected textSizes and should be horizontally aligned.
There are occasional differences in alignment usually 1 pixel off due to how fonts report their metrics. One could correct this but the only way to do it that I found was to use a snapshot and then adjust accordingly. Anyone interested in that feel free to mail me.

Kind regards 

on mouseUp
   local tField1, tField2
   put the long id of field "field1" into tField1
   put the long id of field "field2" into tField2
   alignFieldBaselines tField1, tField2
end mouseUp

on alignFieldBaselines pField1, pField2
   local tDescent1, tDescent2, tRefVLoc
   local tFormatRect1, tFormatRect2, tDiff1, tDiff2
   local tDefaultMargin
   put 8 into tDefaultMargin
   lock screen
   -- make sure the margins are what is expected
   set the margins of pField1 to tDefaultMargin
   set the margins of pField2 to tDefaultMargin
   -- define a reference vertical position for field 1, both fields use it
   put the bottom of pField1 - (the height of pField1 div 4) into tRefVLoc
   -- get rect of text
   put the formattedRect of char 1 of pField1 into tFormatRect1
   put the formattedRect of char 1 of pField2 into tFormatRect2
   -- find baseline of text
   put item 4 of measureText(char 1 of pField1, pField1, "bounds") + 1 into tDescent1
   put item 4 of measureText(char 1 of pField2, pField2, "bounds") + 1 into tDescent2
   -- calculate offset 
   put tRefVLoc - (item 4 of tFormatRect1 - tDescent1) into tDiff1
   put tRefVLoc - (item 4 of tFormatRect2 - tDescent2) into tDiff2
   -- adjust topMargins to align text
   set the topMargin of pField1 to tDefaultMargin + tDiff1
   set the topMargin of pField2 to tDefaultMargin + tDiff2
   unlock screen
end alignFieldBaselines

More information about the Use-livecode mailing list