Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // LSL-Snippet zur Schätzung der Textbreite für Dialoge
- // Inspiriert durch gängige Praktiken aus der LSL-Community und dem Second Life Wiki.
- // Diese Funktion schätzt die "Breite" eines Textes.
- // Großbuchstaben und breitere Zeichen wie 'W' oder 'M' erhalten einen höheren Wert.
- // Schmalere Zeichen wie 'i' oder 'l' erhalten einen niedrigeren Wert.
- // Der Rückgabewert ist eine Annäherung und keine exakte Pixelmessung.
- integer uGetTextWidth(string text)
- {
- integer i;
- integer len = llStringLength(text);
- integer width = 0;
- string char;
- for (i = 0; i < len; ++i)
- {
- char = llGetSubString(text, i, i);
- // Zuweisung von Breiten basierend auf dem Zeichen
- if (llStringLength(char) > 0)
- {
- // Breite Zeichen
- if (llSubStringIndex("MW", char) != -1)
- {
- width += 16;
- }
- // Schmale Zeichen
- else if (llSubStringIndex("ilI.,:;", char) != -1)
- {
- width += 7;
- }
- // Sehr schmale Zeichen
- else if (llSubStringIndex("'", char) != -1)
- {
- width += 5;
- }
- // Großbuchstaben (außer den bereits erfassten)
- else if (char == llToUpper(char) && llSubStringIndex("IL.,:;", char) == -1)
- {
- width += 12;
- }
- // Standardbreite für Kleinbuchstaben und andere Zeichen
- else
- {
- width += 10;
- }
- }
- }
- return width;
- }
- // Beispiel für die Verwendung in einem Dialog
- default
- {
- touch_start(integer total_number)
- {
- list buttons = ["Ein sehr langer Buttontext", "Kurz", "Mittel"];
- string message = "Wähle eine Option. Die Breite der Buttons wurde geschätzt:\n\n";
- integer i;
- for(i = 0; i < llGetListLength(buttons); ++i)
- {
- string button_text = llList2String(buttons, i);
- integer text_width = uGetTextWidth(button_text);
- message += "'" + button_text + "' hat eine geschätzte Breite von: " + (string)text_width + "\n";
- }
- llDialog(llDetectedKey(0), message, buttons, -1);
- }
- listen(integer channel, string name, key id, string message)
- {
- if (channel == -1 && id == llGetOwner())
- {
- llOwnerSay("Du hast '" + message + "' gewählt.");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment