tests/app_server: test some AGGTextRenderer paths

Change-Id: I099029590f5d9ee5d86fa0701c3858fc4f630df7
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9128
Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
Máximo Castañeda
2025-03-17 18:13:04 +00:00
committed by waddlesplash
parent ef67cb1ace
commit ab1f14f362
2 changed files with 172 additions and 1 deletions
+5 -1
View File
@@ -9,7 +9,11 @@ SimpleTest TextRendering :
main.cpp
: be [ TargetLibstdc++ ] [ TargetLibsupc++ ] ;
SimpleTest TextRenderer :
renderer.cpp
: be [ TargetLibstdc++ ] [ TargetLibsupc++ ] ;
if ( $(TARGET_PLATFORM) = libbe_test ) {
HaikuInstall install-test-apps : $(HAIKU_APP_TEST_DIR) : TextRendering
HaikuInstall install-test-apps : $(HAIKU_APP_TEST_DIR) : TextRendering TextRenderer
: tests!apps ;
}
@@ -0,0 +1,167 @@
#include <Application.h>
#include <CheckBox.h>
#include <GridView.h>
#include <LayoutBuilder.h>
#include <ScrollView.h>
#include <Shape.h>
#include <StringView.h>
#include <View.h>
#include <Window.h>
#define NO_AA(x) (((x) & 1) != 0)
#define DECORATION(x) (((x) & 2) != 0)
#define USE_OFFSETS(x) (((x) & 4) != 0)
#define VECTOR(x) (((x) & 8) != 0)
#define CHANGE_AA 'chaa'
static const BString kText = "De fฝbug ";
// 'ฝ' is a character needing a fallback font
extern void set_subpixel_antialiasing(bool subpix);
extern status_t get_subpixel_antialiasing(bool* subpix);
BString
test_description(int test)
{
BString description;
if (NO_AA(test))
description << "No antialias\n";
else
description << "Antialias\n";
if (DECORATION(test))
description << "With line\n";
else
description << "No line\n";
if (USE_OFFSETS(test))
description << "Offsets\n";
else
description << "Start point\n";
if (VECTOR(test))
description << "Vector";
else
description << "Scan";
return description;
}
class View : public BView {
public:
View(int clip, int test)
:
BView(BRect(0, 0, 40, 50), "", 0, B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE),
fClip(clip)
{
BFont font;
GetFont(&font);
font.SetSize(28);
// Greater than 30 forces vector data
if (NO_AA(test))
font.SetFlags(B_DISABLE_ANTIALIASING);
if (DECORATION(test))
font.SetFace(font.Face() | B_STRIKEOUT_FACE);
SetFont(&font);
fOffsets = USE_OFFSETS(test);
fVector = VECTOR(test);
}
void Draw(BRect)
{
BRect clipRect = Bounds().InsetByCopy(10, 5);
BShape s;
switch (fClip) {
case 1:
ClipToRect(clipRect);
break;
case 2:
s.MoveTo(clipRect.LeftTop());
s.LineTo(clipRect.RightBottom());
s.LineTo(clipRect.RightTop());
s.LineTo(clipRect.LeftBottom());
s.Close();
ClipToShape(&s);
break;
}
SetLowUIColor(B_PANEL_BACKGROUND_COLOR);
FillRect(Bounds().InsetByCopy(1, 1), B_SOLID_LOW);
if (fVector)
RotateBy(0.09);
if (fOffsets) {
int len = kText.CountChars();
BPoint offsets[len];
for (int i = 0; i < len; i++)
offsets[i].Set(3 + 18 * i, 40);
DrawString(kText, offsets, len);
} else {
DrawString(kText, BPoint(3, 40));
}
}
private:
int fClip;
bool fOffsets;
bool fVector;
};
class App : public BApplication {
public:
App()
:
BApplication("application/x-vnd.haiku.text-renderer-test")
{
BWindow* window = new BWindow(BRect(100, 100, 640, 400), "Text renderer test",
B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE);
BGridView* grid = new BGridView();
grid->SetResizingMode(B_FOLLOW_ALL_SIDES);
BLayoutBuilder::Grid<> layout(grid);
layout.SetInsets(B_USE_DEFAULT_SPACING);
fSubpixelAA = new BCheckBox("Subpixel AA", new BMessage(CHANGE_AA));
bool subpixel;
get_subpixel_antialiasing(&subpixel);
fSubpixelAA->SetValue(subpixel);
fSubpixelAA->SetTarget(this);
layout.Add(fSubpixelAA, 0, 0);
for (int test = 0; test < 16; test++) {
layout.Add(new BStringView("", test_description(test)), 0, test + 1);
for (int clip = 0; clip <= 2; clip++)
layout.Add(new View(clip, test), clip + 1, test + 1);
}
BScrollView* scroll
= new BScrollView("scroll", grid, B_FOLLOW_ALL_SIDES, 0, false, true, B_NO_BORDER);
window->AddChild(scroll);
scroll->ResizeTo(window->Bounds().Size());
window->Show();
}
void MessageReceived(BMessage* message)
{
if (message->what == CHANGE_AA)
set_subpixel_antialiasing(fSubpixelAA->Value());
else
BApplication::MessageReceived(message);
}
private:
BControl* fSubpixelAA;
};
int
main(int argc, char** argv)
{
App app;
app.Run();
return 0;
}