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
|
main.cpp
|
||||||
: be [ TargetLibstdc++ ] [ TargetLibsupc++ ] ;
|
: be [ TargetLibstdc++ ] [ TargetLibsupc++ ] ;
|
||||||
|
|
||||||
|
SimpleTest TextRenderer :
|
||||||
|
renderer.cpp
|
||||||
|
: be [ TargetLibstdc++ ] [ TargetLibsupc++ ] ;
|
||||||
|
|
||||||
if ( $(TARGET_PLATFORM) = libbe_test ) {
|
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 ;
|
: 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