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:
committed by
waddlesplash
parent
ef67cb1ace
commit
ab1f14f362
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user