소스 검색

fix text with and height calulation

Kolja Strohm 6 달 전
부모
커밋
6a765f94e0
2개의 변경된 파일47개의 추가작업 그리고 16개의 파일을 삭제
  1. 44 16
      Schrift.cpp
  2. 3 0
      Schrift.h

+ 44 - 16
Schrift.cpp

@@ -584,8 +584,11 @@ void TextRenderer::renderChar(int& x,
             if (selected)
             {
                 int br = getCharWidth(c) + zeichenAbstand;
-                zRObj.alphaRegion(
-                    x, y, br, getZeilenHeight(), selectedBackgroundColor);
+                zRObj.alphaRegion(x,
+                    y,
+                    br,
+                    getZeilenHeight() + zeilenAbstand,
+                    selectedBackgroundColor);
             }
             if (b->getBuff())
             {
@@ -652,7 +655,7 @@ void TextRenderer::renderChar(int& x,
             zRObj.alphaRegion(x,
                 y,
                 schriftSize / 2 + zeichenAbstand,
-                getZeilenHeight(),
+                getZeilenHeight() + zeilenAbstand,
                 selectedBackgroundColor);
         if (underlined)
             zRObj.drawLinieHAlpha(x - (int)(zeichenAbstand / 2.0 + 0.5),
@@ -668,7 +671,7 @@ void TextRenderer::renderChar(int& x,
             zRObj.alphaRegion(x,
                 y,
                 schriftSize + zeichenAbstand,
-                getZeilenHeight(),
+                getZeilenHeight() + zeilenAbstand,
                 selectedBackgroundColor);
         if (underlined)
             zRObj.drawLinieHAlpha(x - (int)(zeichenAbstand / 2.0 + 0.5),
@@ -741,6 +744,16 @@ int TextRenderer::getCharWidth(const char c) const
     return charWidths[(unsigned char)c];
 }
 
+int Framework::TextRenderer::getMaxCharWidth() const
+{
+    int result = 0;
+    for (int i = 0; i < 256; i++)
+    {
+        result = MAX(result, getCharWidth((char)i));
+    }
+    return result;
+}
+
 // Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Text
 // vollständig darzustellen
 //  c: Der Buchstabe, von dem die Höhe in Pixeln ermitelt werden soll
@@ -787,10 +800,19 @@ int TextRenderer::textPos(const char* txt, int mausX, int mausY) const
             tx = 0;
             if (mausY < ty) return i;
         }
-        if (txt[i] == '\t') tx += schriftSize + zeichenAbstand;
-        if (txt[i] == ' ') tx += schriftSize / 2 + zeichenAbstand;
-        tx += getCharWidth(txt[i]);
-        int txpl = getCharWidth(txt[i + 1]) / 2;
+        if (txt[i] == '\t')
+        {
+            tx += schriftSize + zeichenAbstand;
+        }
+        else if (txt[i] == ' ')
+        {
+            tx += schriftSize / 2 + zeichenAbstand;
+        }
+        else
+        {
+            tx += getCharWidth(txt[i]) + zeichenAbstand;
+        }
+        int txpl = getCharWidth(txt[i]) / 2;
         if (mausX < tx - txpl && mausY < ty + sh + zeilenAbstand) return i;
     }
     if (mausY < ty + sh + zeilenAbstand) return textLength(txt);
@@ -838,8 +860,11 @@ void GravurTextRenderer::renderChar(int& x,
             if (selected)
             {
                 int br = getCharWidth(c) + zeichenAbstand;
-                zRObj.alphaRegion(
-                    x, y, br, getZeilenHeight(), selectedBackgroundColor);
+                zRObj.alphaRegion(x,
+                    y,
+                    br,
+                    getZeilenHeight() + zeilenAbstand,
+                    selectedBackgroundColor);
             }
             if (b->getBuff())
             {
@@ -941,7 +966,7 @@ void GravurTextRenderer::renderChar(int& x,
             zRObj.alphaRegion(x,
                 y,
                 schriftSize / 2 + zeichenAbstand,
-                getZeilenHeight(),
+                getZeilenHeight() + zeilenAbstand,
                 selectedBackgroundColor);
         if (underlined)
             zRObj.drawLinieHAlpha(x - (int)(zeichenAbstand / 2.0 + 0.5),
@@ -957,7 +982,7 @@ void GravurTextRenderer::renderChar(int& x,
             zRObj.alphaRegion(x,
                 y,
                 schriftSize + zeichenAbstand,
-                getZeilenHeight(),
+                getZeilenHeight() + zeilenAbstand,
                 selectedBackgroundColor);
         if (underlined)
             zRObj.drawLinieHAlpha(x - (int)(zeichenAbstand / 2.0 + 0.5),
@@ -1027,8 +1052,11 @@ void KursivTextRenderer::renderChar(int& x,
             if (selected)
             {
                 int br = getCharWidth(c) + zeichenAbstand;
-                zRObj.alphaRegion(
-                    x, y, br, getZeilenHeight(), selectedBackgroundColor);
+                zRObj.alphaRegion(x,
+                    y,
+                    br,
+                    getZeilenHeight() + zeilenAbstand,
+                    selectedBackgroundColor);
             }
             if (b->getBuff())
             {
@@ -1111,7 +1139,7 @@ void KursivTextRenderer::renderChar(int& x,
             zRObj.alphaRegion(x,
                 y,
                 schriftSize / 2 + zeichenAbstand,
-                getZeilenHeight(),
+                getZeilenHeight() + zeilenAbstand,
                 selectedBackgroundColor);
         if (underlined)
             zRObj.drawLinieHAlpha(x - (int)(zeichenAbstand / 2.0 + 0.5),
@@ -1127,7 +1155,7 @@ void KursivTextRenderer::renderChar(int& x,
             zRObj.alphaRegion(x,
                 y,
                 schriftSize + zeichenAbstand,
-                getZeilenHeight(),
+                getZeilenHeight() + zeilenAbstand,
                 selectedBackgroundColor);
         if (underlined)
             zRObj.drawLinieHAlpha(x - (int)(zeichenAbstand / 2.0 + 0.5),

+ 3 - 0
Schrift.h

@@ -286,6 +286,9 @@ namespace Framework
         //! Buchstaben vollständig darzustellen \param c Der Buchstabe, von dem
         //! die Breite in Pixeln ermitelt werden soll
         DLLEXPORT virtual int getCharWidth(const char c) const;
+        //! Ermittelt, wie viele Pixel maximal benötigt werden, um einen
+        //! Buchstaben vollständig darzustellen
+        DLLEXPORT virtual int getMaxCharWidth() const;
         //! Ermittelt, wie viele Pixel benötigt werden, um einen Bestimmten Text
         //! vollständig darzustellen \param c Der Buchstabe, von dem die Höhe in
         //! Pixeln ermitelt werden soll