Author: mmlr Date: 2010-02-01 14:39:06 +0100 (Mon, 01 Feb 2010) New Revision: 35379 Changeset: http://dev.haiku-os.org/changeset/35379/haiku Added: haiku/trunk/src/tests/kits/interface/TruncateString.cpp Modified: haiku/trunk/src/tests/kits/interface/Jamfile Log: Adding test that shows that B_TRUNCATE_BEGINNING mode is essentially broken. Worse yet for a small enough length it actually crashes. Modified: haiku/trunk/src/tests/kits/interface/Jamfile =================================================================== --- haiku/trunk/src/tests/kits/interface/Jamfile 2010-02-01 12:58:43 UTC (rev 35378) +++ haiku/trunk/src/tests/kits/interface/Jamfile 2010-02-01 13:39:06 UTC (rev 35379) @@ -117,6 +117,11 @@ : be $(TARGET_LIBSUPC++) ; +SimpleTest TruncateString : + TruncateString.cpp + : be $(TARGET_LIBSUPC++) + ; + SimpleTest MenuBeginningTest : MenuBeginningTest.cpp : be $(TARGET_LIBSUPC++) Added: haiku/trunk/src/tests/kits/interface/TruncateString.cpp =================================================================== --- haiku/trunk/src/tests/kits/interface/TruncateString.cpp (rev 0) +++ haiku/trunk/src/tests/kits/interface/TruncateString.cpp 2010-02-01 13:39:06 UTC (rev 35379) @@ -0,0 +1,65 @@ +#include <stdio.h> +#include <SupportDefs.h> + +#include <Application.h> +#include <String.h> +#include <View.h> +#include <Window.h> + + +class TruncateView : public BView { +public: + TruncateView(BRect frame) + : BView(frame, "TruncateView", B_FOLLOW_ALL, B_WILL_DRAW) + { + } + + void Draw(BRect updateRect) + { + const float kSpacing = 20.0; + const float kTopOffset = kSpacing + 5; + const uint32 kTruncateModes[] + = { B_TRUNCATE_BEGINNING, B_TRUNCATE_MIDDLE, B_TRUNCATE_END }; + const uint32 kTruncateModeCount + = sizeof(kTruncateModes) / sizeof(kTruncateModes[0]); + + BString theString("ö-ä-ü"); + BPoint point(10, kTopOffset); + BString truncated; + + for (float length = 25; length < 50; length += 5) { + SetHighColor(255, 0, 0); + StrokeRect(BRect(point.x, point.y - kSpacing, point.x + length, + point.y + kSpacing * (kTruncateModeCount - 1))); + SetHighColor(0, 0, 0); + + for (uint32 i = 0; i < kTruncateModeCount; i++) { + truncated = theString; + TruncateString(&truncated, kTruncateModes[i], length); + DrawString(truncated.String(), point); + point.y += kSpacing; + } + + point.x += length + kSpacing; + point.y = kTopOffset; + } + } +}; + + +int +main(int argc, char *argv[]) +{ + BApplication app("application/x-vnd.Haiku-TruncateString"); + + BRect frame(200, 200, 600, 400); + BWindow *window = new BWindow(frame, "TruncateString", B_TITLED_WINDOW, + B_QUIT_ON_WINDOW_CLOSE); + + TruncateView *view = new TruncateView(frame.OffsetToSelf(0, 0)); + window->AddChild(view); + + window->Show(); + app.Run(); + return 0; +}