Add a test for #13664
Interaction between ConstrainClippingRegion and transforms leads to button frames and background not being drawn at all. Also shows another problem with rounded corner buttons when mixed with transforms.
This commit is contained in:
@@ -0,0 +1,207 @@
|
||||
/*
|
||||
* Copyright 2017, Adrien Destugues, [email protected]
|
||||
* Distributed under terms of the MIT license.
|
||||
*/
|
||||
|
||||
|
||||
#include <Application.h>
|
||||
#include <ControlLook.h>
|
||||
#include <View.h>
|
||||
#include <Window.h>
|
||||
|
||||
|
||||
class View : public BView {
|
||||
public:
|
||||
View(BRect r);
|
||||
void Draw(BRect update);
|
||||
void DrawButtonFrames(BRect r, BRect update);
|
||||
|
||||
};
|
||||
|
||||
|
||||
View::View(BRect r)
|
||||
: BView(r, "test", B_FOLLOW_ALL_SIDES, B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE)
|
||||
{
|
||||
SetLowColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
||||
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
View::Draw(BRect update)
|
||||
{
|
||||
// - DrawButtonFrame (rounded + square)
|
||||
// - DrawMenuFieldFrame + Background
|
||||
// - DrawActiveTab
|
||||
// - DrawSliderBar
|
||||
|
||||
MovePenTo(20, 20);
|
||||
DrawString("TEST");
|
||||
|
||||
// Reference line
|
||||
BRect r(20, 30, 80, 60);
|
||||
DrawButtonFrames(r, update);
|
||||
|
||||
PushState();
|
||||
|
||||
// Positive translation
|
||||
TranslateBy(0, 35);
|
||||
DrawButtonFrames(r, update);
|
||||
|
||||
// Null, then negative translations
|
||||
for (int i = 0; i < 10; i++) {
|
||||
r.OffsetBy(0, 70);
|
||||
TranslateBy(0, -35);
|
||||
DrawButtonFrames(r, update);
|
||||
}
|
||||
|
||||
PopState();
|
||||
r = BRect(20, 30, 80, 60);
|
||||
|
||||
// Scale
|
||||
PushState();
|
||||
ScaleBy(2, 2);
|
||||
TranslateBy(350 / 2, 0);
|
||||
DrawButtonFrames(r, update);
|
||||
|
||||
PopState();
|
||||
|
||||
// Rotation
|
||||
TranslateBy(420, 110);
|
||||
RotateBy(M_PI / 4);
|
||||
DrawButtonFrames(r, update);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
View::DrawButtonFrames(BRect r, BRect update)
|
||||
{
|
||||
BRect r1 = r;
|
||||
be_control_look->DrawButtonFrame(this, r1, update,
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR),
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR));
|
||||
be_control_look->DrawButtonBackground(this, r1, update,
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR));
|
||||
|
||||
MovePenTo(r1.left + 5, r1.top + 15);
|
||||
DrawString("BUTTON");
|
||||
|
||||
r.OffsetBy(70, 0);
|
||||
r1 = r;
|
||||
be_control_look->DrawButtonFrame(this, r1, update,
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR),
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR), BControlLook::B_DISABLED);
|
||||
be_control_look->DrawButtonBackground(this, r1, update,
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR), BControlLook::B_DISABLED);
|
||||
|
||||
MovePenTo(r1.left + 5, r1.top + 15);
|
||||
DrawString("Disabled");
|
||||
|
||||
r.OffsetBy(70, 0);
|
||||
r1 = r;
|
||||
be_control_look->DrawButtonFrame(this, r1, update,
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR),
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR), BControlLook::B_ACTIVATED);
|
||||
be_control_look->DrawButtonBackground(this, r1, update,
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR), BControlLook::B_ACTIVATED);
|
||||
|
||||
MovePenTo(r1.left + 5, r1.top + 15);
|
||||
DrawString("Active");
|
||||
|
||||
r.OffsetBy(70, 0);
|
||||
r1 = r;
|
||||
be_control_look->DrawButtonFrame(this, r1, update,
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR),
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR),
|
||||
BControlLook::B_DISABLED | BControlLook:: B_ACTIVATED);
|
||||
be_control_look->DrawButtonBackground(this, r1, update,
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR),
|
||||
BControlLook::B_DISABLED | BControlLook::B_ACTIVATED);
|
||||
|
||||
MovePenTo(r1.left + 5, r1.top + 15);
|
||||
DrawString("Act+Disa");
|
||||
|
||||
r.OffsetBy(70, 0);
|
||||
r1 = r;
|
||||
be_control_look->DrawButtonFrame(this, r1, update, 8,
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR),
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR), 0);
|
||||
be_control_look->DrawButtonBackground(this, r1, update, 8,
|
||||
ui_color(B_PANEL_BACKGROUND_COLOR), 0);
|
||||
|
||||
MovePenTo(r1.left + 5, r1.top + 15);
|
||||
DrawString("Rounded");
|
||||
|
||||
/* TODO test various border sets
|
||||
* TODO test with multiple radius on each corner (including 0 on some)
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
class Window : public BWindow {
|
||||
public:
|
||||
Window();
|
||||
|
||||
virtual bool QuitRequested();
|
||||
};
|
||||
|
||||
|
||||
Window::Window()
|
||||
: BWindow(BRect(50, 100, 1150, 500), "ControlLook-Test",
|
||||
B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS)
|
||||
{
|
||||
AddChild(new View(Bounds()));
|
||||
|
||||
// TODO Add transformed variations:
|
||||
// - Normal
|
||||
// - Translated
|
||||
// - Scaled
|
||||
// - Rotated
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
Window::QuitRequested()
|
||||
{
|
||||
be_app->PostMessage(B_QUIT_REQUESTED);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
class Application : public BApplication {
|
||||
public:
|
||||
Application();
|
||||
|
||||
virtual void ReadyToRun(void);
|
||||
};
|
||||
|
||||
|
||||
Application::Application()
|
||||
: BApplication("application/x-vnd.haiku-test-controllook")
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Application::ReadyToRun(void)
|
||||
{
|
||||
BWindow *window = new Window();
|
||||
window->Show();
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
Application app;
|
||||
|
||||
app.Run();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -91,6 +91,11 @@ SimpleTest CheckBoxTest :
|
||||
: be [ TargetLibsupc++ ]
|
||||
;
|
||||
|
||||
SimpleTest ControlLookTest :
|
||||
ControlLookTest.cpp
|
||||
: be [ TargetLibsupc++ ]
|
||||
;
|
||||
|
||||
SimpleTest ListViewTest :
|
||||
ListViewTest.cpp
|
||||
: be [ TargetLibsupc++ ]
|
||||
|
||||
Reference in New Issue
Block a user