; ----------------------------- ; Draws a button with a text label ; input: pLabel - pointer to the LABEL structure ; id - button identifier ; xPosition - button position X ; yPosition - button position Y ; bWidth - button width ; bHeight - button height ; ----------------------------- proc draw.Button pLabel, id, xPosition, yPosition, bWidth, bHeight mcall 8, <[xPosition], [bWidth]>, <[yPosition], [bHeight]>, [id], [button_color] ; position X for text positioning mov eax, [bHeight] shr eax, 1 add [yPosition], eax ; position Y for text positioning mov eax, [pLabel] mov eax, [eax+LABEL.size] neg eax mul [configFont.width] add eax, [bWidth] add eax, 4 shr eax, 1 add [xPosition], eax ; draw text on the button stdcall draw.Label, [pLabel], [xPosition], [yPosition] ret endp ; ----------------------------- ; Draws text on position yPosition and centered on the width of the screen ; considering the length of the text and the offset in symbols ; input: pLabel - pointer to the LABEL structure ; yPosition - text position Y ; countOffset - number of symbols for offset ; ----------------------------- proc draw.Label pLabel, yPosition, countOffset mov eax, [pLabel] mov eax, [eax + LABEL.size] sub eax, [countOffset] stdcall draw.GetNavigationX, eax stdcall draw.Label, [pLabel], eax, [yPosition], 0 ret endp ; ----------------------------- ; Draws a number on position yPosition and centered on the width of the screen ; considering the length of the number and the offset in symbols ; input: pLabel - pointer to the LABEL structure ; yPosition - text position Y ; countOffset - number of symbols for offset ; ----------------------------- proc draw.NavigationNumber pLabel, yPosition, countOffset mov eax, [pLabel] mov eax, [eax + LABEL.size] sub eax, [countOffset] stdcall draw.GetNavigationX, eax stdcall draw.Number, [pLabel], eax, [yPosition], 0 ret endp ; ----------------------------- ; Returns the X coordinate for the text positioning on the center of the screen ; considering the offset in symbols ; input: countOffset - number of symbols for offset ; output: eax - X coordinate ; ----------------------------- proc draw.GetNavigationX countOffset mov eax, [countOffset] neg eax mul [configFont.width] add eax, [window_width] sub eax, 10 shr eax, 1 ret endp ; ----------------------------- ; Builds the coordinates of the text label adding the offset in symbols along X ; input: xPosition - X coordinate ; yPosition - Y coordinate ; countOffset - number of symbols for offset ; output: eax - X coordinate in format X*65536+Y ; ----------------------------- proc draw._prepareCoord xPosition, yPosition, countOffset mov eax, [countOffset] mul [configFont.width] add eax, [xPosition] shl eax, 16 mov ebx, [configFont.height] shr ebx, 1 sub [yPosition], ebx add eax, [yPosition] ret endp ; ----------------------------- ; Draws the text at the X and Y positions and shifts the offset in symbols along X ; input: pLabel - pointer to the LABEL structure ; xPosition - text position X ; yPosition - text position Y ; countOffset - number of symbols for offset ; ----------------------------- proc draw.Label pLabel, xPosition, yPosition, countOffset stdcall draw._prepareCoord, [xPosition], [yPosition], [countOffset] mov ebx, eax mov eax, [pLabel] mov ecx, [configFont.mask] or ecx, [eax + LABEL.color] mov edx, [eax + LABEL.value] mcall 4 ret endp ; ----------------------------- ; Draws the number at the X and Y positions and shifts the offset in symbols along X ; input: pLabel - pointer to the LABEL structure ; xPosition - text position X ; yPosition - text position Y ; countOffset - number of symbols for offset ; ----------------------------- proc draw.Number pLabel, xPosition, yPosition, countOffset stdcall draw._prepareCoord, [xPosition], [yPosition], [countOffset] mov edx, eax mov eax, [pLabel] mov ebx, [eax + LABEL.size] shl ebx, 16 mov ecx, [eax + LABEL.value] mov esi, [configFont.maskNumber] or esi, [eax + LABEL.color] mcall 47, , , , ,[background_color] ret endp ; ----------------------------- ; Set configuration of the font depending on the size of the square side ; setting the font size and the font mask text and number ; input: squareSideLength - size of the square side ; ----------------------------- proc draw.setConfigFont squareSideLength cmp [squareSideLength], MIN_SQUARE_SIDE_LENGTH_FONT jg @f cmp [configFont.flag], FONT_SMALL je .return mov [configFont.flag], FONT_SMALL jmp .set @@: cmp [configFont.flag], FONT_LARGE je .return mov [configFont.flag], FONT_LARGE .set: mov eax, [configFont.flag] lea ebx, [eax + 8] shl ebx, 28 mov [configFont.mask], ebx lea ebx, [eax*2 + 6] mov [configFont.width], ebx lea ebx, [7 + eax*4] lea ebx, [ebx + eax*2] mov [configFont.height], ebx lea ebx, [eax + 4] shl ebx, 28 mov [configFont.maskNumber], ebx .return: ret endp