+ event.AddPoint(GetPointUpInside());
+ application.ProcessEvent(event);
+
+ DALI_TEST_CHECK(!gPushButtonSelectedState);
+ END_TEST;
+}
+
+int UtcDaliPushButtonPropertySetLabelPadding(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPushButtonPropertySetLabelPadding");
+
+ PushButton pushButton = PushButton::New();
+ pushButton.SetProperty(Toolkit::PushButton::Property::LABEL_PADDING, Vector4(1.0f, 1.0f, 1.0f, 1.0f));
+ DALI_TEST_EQUALS(pushButton.GetProperty<Vector4>(Toolkit::PushButton::Property::LABEL_PADDING), Vector4(1.0f, 1.0f, 1.0f, 1.0f), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
+ pushButton.SetProperty(Toolkit::PushButton::Property::LABEL_PADDING, Vector4(10.0f, 10.0f, 10.0f, 10.0f));
+ DALI_TEST_EQUALS(pushButton.GetProperty<Vector4>(Toolkit::PushButton::Property::LABEL_PADDING), Vector4(10.0f, 10.0f, 10.0f, 10.0f), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPushButtonPropertySetIconPadding(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPushButtonPropertySetIconPadding");
+
+ PushButton pushButton = PushButton::New();
+ pushButton.SetProperty(Toolkit::PushButton::Property::ICON_PADDING, Vector4(1.0f, 1.0f, 1.0f, 1.0f));
+ DALI_TEST_EQUALS(pushButton.GetProperty<Vector4>(Toolkit::PushButton::Property::ICON_PADDING), Vector4(1.0f, 1.0f, 1.0f, 1.0f), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
+ pushButton.SetProperty(Toolkit::PushButton::Property::ICON_PADDING, Vector4(10.0f, 10.0f, 10.0f, 10.0f));
+ DALI_TEST_EQUALS(pushButton.GetProperty<Vector4>(Toolkit::PushButton::Property::ICON_PADDING), Vector4(10.0f, 10.0f, 10.0f, 10.0f), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPushButtonPaddingLayout(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPushButtonPaddingLayout");
+
+ // This test creates padding for an icon and a label.
+ // The icon and label are each enabled and disabled to confirm the correct padding is used.
+ PushButton pushButton = PushButton::New();
+
+ const Vector4 TEST_ICON_PADDING(20.0f, 20.0f, 20.0f, 20.0f);
+ const Vector4 TEST_LABEL_PADDING(10.0f, 10.0f, 10.0f, 10.0f);
+
+ // Get actual size of test image
+ ImageDimensions testImageSize = Dali::GetClosestImageSize(TEST_IMAGE_ONE);
+ const Vector2 TEST_IMAGE_SIZE(testImageSize.GetWidth(), testImageSize.GetHeight());
+
+ pushButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+ pushButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+ pushButton.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f));
+ pushButton.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS);
+
+ application.GetScene().Add(pushButton);
+
+ application.SendNotification();
+ application.Render();
+
+ // First test the size is zero.
+ // No padding should be added as there is no label or icon.
+ Vector2 size(Vector2::ZERO);
+ size.width = pushButton.GetRelayoutSize(Dimension::WIDTH);
+ size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+ tet_printf("Button Natural Size(%f,%f)\n", pushButton.GetNaturalSize().width, pushButton.GetNaturalSize().height);
+
+ DALI_TEST_EQUALS(size, Vector2::ZERO, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
+ // Check label only padding
+ pushButton.SetProperty(Toolkit::Button::Property::LABEL, "Label");
+
+ application.SendNotification();
+ application.Render();
+
+ Vector2 sizeWithLabelWithoutPadding(Vector2::ZERO);
+ sizeWithLabelWithoutPadding.width = pushButton.GetRelayoutSize(Dimension::WIDTH);
+ sizeWithLabelWithoutPadding.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+
+ tet_printf("Button RelayoutSize label without padding (%f,%f)\n", sizeWithLabelWithoutPadding.width, sizeWithLabelWithoutPadding.height);
+
+ // Add label padding to label
+ pushButton.SetProperty(Toolkit::PushButton::Property::LABEL_PADDING, TEST_LABEL_PADDING);
+ application.SendNotification();
+ application.Render();
+
+ Vector2 sizeLabelAndPadding(Vector2::ZERO);
+ sizeLabelAndPadding.width = pushButton.GetRelayoutSize(Dimension::WIDTH);
+ sizeLabelAndPadding.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+ tet_printf("Button RelayoutSize after label padding(%f,%f)\n", sizeLabelAndPadding.width, sizeLabelAndPadding.height);
+
+ // If control size has increased beyond size of just label then padding has been applied
+ DALI_TEST_GREATER(sizeLabelAndPadding.width, sizeWithLabelWithoutPadding.width + TEST_LABEL_PADDING.x, TEST_LOCATION);
+ DALI_TEST_GREATER(sizeLabelAndPadding.height, sizeWithLabelWithoutPadding.height + TEST_LABEL_PADDING.w, TEST_LOCATION);
+
+ // Re-initialise the button so we can setup icon-only padding.
+ pushButton.Unparent();
+ pushButton = PushButton::New();
+
+ pushButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+ pushButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+ pushButton.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f));
+ pushButton.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS);
+
+ application.GetScene().Add(pushButton);
+
+ pushButton.SetProperty(Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT, "BEGIN");
+ pushButton.SetProperty(Toolkit::Button::Property::UNSELECTED_VISUAL, TEST_IMAGE_ONE);
+ pushButton.SetProperty(Toolkit::Button::Property::SELECTED_VISUAL, TEST_IMAGE_ONE);
+
+ application.SendNotification();
+ application.Render();
+
+ // Size of button with just icon
+ size.width = pushButton.GetRelayoutSize(Dimension::WIDTH);
+ size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+ tet_printf("Button RelayoutSize with icon(%f,%f)\n", size.width, size.height);
+
+ pushButton.SetProperty(Toolkit::PushButton::Property::ICON_PADDING, TEST_ICON_PADDING);
+
+ application.SendNotification();
+ application.Render();
+ DALI_TEST_EQUALS(size, TEST_IMAGE_SIZE, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
+ size.width = pushButton.GetRelayoutSize(Dimension::WIDTH);
+ size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+ tet_printf("Button RelayoutSize after icon padding(%f,%f)\n", size.width, size.height);
+ const Vector2 expectedIconAndPaddingSize(TEST_ICON_PADDING.x + TEST_ICON_PADDING.y + TEST_IMAGE_SIZE.width, TEST_ICON_PADDING.w + TEST_ICON_PADDING.z + TEST_IMAGE_SIZE.height);
+ DALI_TEST_EQUALS(size, expectedIconAndPaddingSize, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
+ // Now test padding for both label and icon simultaneously.
+ pushButton.SetProperty(Toolkit::Button::Property::LABEL, "Label");
+
+ application.SendNotification();
+ application.Render();
+
+ size.width = pushButton.GetRelayoutSize(Dimension::WIDTH);
+ size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+ tet_printf("Button RelayoutSize after label added(%f,%f)\n", size.width, size.height);
+
+ pushButton.SetProperty(Toolkit::PushButton::Property::LABEL_PADDING, TEST_LABEL_PADDING);
+
+ application.SendNotification();
+ application.Render();
+
+ size.width = pushButton.GetRelayoutSize(Dimension::WIDTH);
+ size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+ tet_printf("Button RelayoutSize after icon and label padding(%f,%f)\n", size.width, size.height);
+
+ DALI_TEST_EQUALS(size.width, sizeLabelAndPadding.width + expectedIconAndPaddingSize.width, TEST_LOCATION);
+ // Test height of control is same as icon and padding, as Text is smaller than icon
+ DALI_TEST_EQUALS(size.height, expectedIconAndPaddingSize.height, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPushButtonAlignmentLayout(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliPushButtonAlignmentLayout");
+
+ /*
+ * This test checks different alignments for the icon against the label.
+ * The icon is then moved around the label in each of it's alignments.
+ * The final relayed out size is checked to confirm the layout has been done correctly.
+ *
+ * There is an Icon which has 0 width and height, but with 75 padding on all sides.
+ * - Therefore total width and height are both 150.
+ *
+ * There is a Label which has "an unknown" width and height, but with 30 padding on all sides.
+ * - Therefore total width and height are 60+x and 60+y respectively.
+ * Where x & y are the width and height of the text.
+ *
+ * The width of the button will always expand to the largest of the icon and label sizes (plus padding).
+ * So We use the padding to help us determine the orientation is correct for each alignment.
+ *
+ * |<- 150 ->| |<-- 60+x -->|
+ *
+ * +---------+ -
+ * | | ^ +------------+ -
+ * | | | | | ^
+ * | Icon | 150 | Label | 60+y
+ * | | | | | v
+ * | | v +------------+ -
+ * +---------+ -
+ */
+
+ const Vector4 TEST_ICON_PADDING(70.0f, 70.0f, 70.0f, 70.0f);
+ const Vector4 TEST_LABEL_PADDING(30.0f, 30.0f, 30.0f, 30.0f);
+
+ // Get actual size of test image
+ ImageDimensions testImageSize = Dali::GetClosestImageSize(TEST_IMAGE_ONE);
+ const Vector2 TEST_IMAGE_SIZE(testImageSize.GetWidth(), testImageSize.GetHeight());
+
+ PushButton pushButton = PushButton::New();
+
+ pushButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+ pushButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+ pushButton.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f));
+ pushButton.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS);
+
+ application.GetScene().Add(pushButton);
+
+ // Add a label and get size of control
+ pushButton.SetProperty(Toolkit::Button::Property::LABEL, "Label");
+ application.SendNotification();
+ application.Render();
+
+ // First get the size of control with just label
+ Vector2 justLabelSize(Vector2::ZERO);
+ justLabelSize.width = pushButton.GetRelayoutSize(Dimension::WIDTH);
+ justLabelSize.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+ tet_printf("Button RelayoutSize with just label and no padding(%f,%f)\n", justLabelSize.width, justLabelSize.height);
+
+ pushButton.SetProperty(Toolkit::PushButton::Property::LABEL_PADDING, TEST_LABEL_PADDING);
+ application.SendNotification();
+ application.Render();
+
+ // Size of Label and Padding
+ Vector2 expectedLabelAndPaddingSize(Vector2::ZERO);
+ expectedLabelAndPaddingSize.width = justLabelSize.width + TEST_LABEL_PADDING.x + TEST_LABEL_PADDING.y;
+ expectedLabelAndPaddingSize.height = justLabelSize.height + TEST_LABEL_PADDING.w + TEST_LABEL_PADDING.z;
+
+ Vector2 labelAndPaddingSize(Vector2::ZERO);
+ labelAndPaddingSize.width = pushButton.GetRelayoutSize(Dimension::WIDTH);
+ labelAndPaddingSize.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+
+ DALI_TEST_EQUALS(labelAndPaddingSize, expectedLabelAndPaddingSize, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
+ const Vector2 testImageWithPaddingSize = Vector2((TEST_IMAGE_SIZE.width + TEST_ICON_PADDING.x + TEST_ICON_PADDING.y),
+ (TEST_IMAGE_SIZE.height + TEST_ICON_PADDING.w + TEST_ICON_PADDING.z));
+
+ // Add Icon and set its alignment
+ pushButton.SetProperty(Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT, "BEGIN");
+ pushButton.SetProperty(Toolkit::Button::Property::UNSELECTED_VISUAL, TEST_IMAGE_ONE);
+ pushButton.SetProperty(Toolkit::Button::Property::SELECTED_VISUAL, TEST_IMAGE_ONE);
+ pushButton.SetProperty(Toolkit::PushButton::Property::ICON_PADDING, TEST_ICON_PADDING);
+
+ application.SendNotification();
+ application.Render();
+
+ Vector2 size(Vector2::ZERO);
+ size.width = pushButton.GetRelayoutSize(Dimension::WIDTH);
+ size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+
+ /*
+ * Test Icon right alignment.
+ * Height grows to largest of Icon or Label (+ padding).
+ * Normally this will be Icons height, except with very large font sizes.
+ *
+ * +------------+---------+
+ * |............+ |
+ * | | |
+ * | Label | Icon |
+ * | | |
+ * |............+ |
+ * +------------+---------+
+ */
+ DALI_TEST_EQUALS(size.width, (testImageWithPaddingSize.width + labelAndPaddingSize.width), TEST_LOCATION);
+ DALI_TEST_EQUALS(size.height, (std::max(testImageWithPaddingSize.height, labelAndPaddingSize.height)), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
+ // Now test left alignment matches right for size.
+ pushButton.SetProperty(Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT, "END");
+
+ application.SendNotification();
+ application.Render();
+
+ size.width = pushButton.GetRelayoutSize(Dimension::WIDTH);
+ size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+
+ /*
+ * Test Icon left alignment.
+ * Height grows to largest of Icon or Label (+ padding).
+ * Normally this will be Icons height, except with very large font sizes.
+ *
+ * +---------+------------+
+ * | +............|
+ * | | |
+ * | Icon | Label |
+ * | | |
+ * | +............|
+ * +---------+------------+
+ */
+ DALI_TEST_EQUALS(size.width, (testImageWithPaddingSize.width + labelAndPaddingSize.width), TEST_LOCATION);
+ DALI_TEST_EQUALS(size.height, (std::max(testImageWithPaddingSize.height, labelAndPaddingSize.height)), Math::MACHINE_EPSILON_1000, TEST_LOCATION);
+
+ tet_infoline(" Test Icon TOP alignment - Width grows to largest of Icon or label (plus padding)");
+ /*
+ *
+ * +---------+
+ * | |
+ * | |
+ * | Icon |
+ * | |
+ * | |
+ * +---------+
+ * | |
+ * | Label |
+ * | |
+ * +---------+
+ *
+ */
+
+ tet_infoline("SetProperty on LABEL_RELATIVE_ALIGNMENT should relayout the Button");
+ pushButton.SetProperty(Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT, "BOTTOM");
+
+ application.SendNotification();
+ application.Render();
+
+ size.width = pushButton.GetRelayoutSize(Dimension::WIDTH);
+ size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+
+ tet_printf("Natural width (%f)\n", pushButton.GetNaturalSize().width);
+ tet_printf("Natural height (%f)\n", pushButton.GetNaturalSize().height);
+
+ tet_printf(" UtcDaliPushButtonAlignmentLayout Top layout - Image and Padding size (%f,%f)\n", testImageWithPaddingSize.width, testImageWithPaddingSize.height);
+ tet_printf(" UtcDaliPushButtonAlignmentLayout Top layout - Text and Padding size (%f,%f)\n", labelAndPaddingSize.width, labelAndPaddingSize.height);
+
+ DALI_TEST_EQUALS(size.width, (std::max(testImageWithPaddingSize.width, labelAndPaddingSize.width)), TEST_LOCATION);
+
+ DALI_TEST_EQUALS(size.height, (testImageWithPaddingSize.height + labelAndPaddingSize.height), TEST_LOCATION);
+
+ /*
+ * Test Icon bottom alignment.
+ * Width grows to largest of Icon or Label (+ padding).
+ *
+ * +---------+
+ * | |
+ * | Label |
+ * | |
+ * +---------+
+ * | |
+ * | |
+ * | Icon |
+ * | |
+ * | |
+ * +---------+
+ */
+ tet_infoline(" Test Icon BOTTOM alignment - Width grows to largest of Icon or label (plus padding)");
+ pushButton.SetProperty(Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT, "TOP");
+
+ application.SendNotification();
+ application.Render();
+
+ size.width = pushButton.GetRelayoutSize(Dimension::WIDTH);
+ size.height = pushButton.GetRelayoutSize(Dimension::HEIGHT);
+
+ DALI_TEST_EQUALS(size.width, (std::max(testImageWithPaddingSize.width, labelAndPaddingSize.width)), TEST_LOCATION);
+ DALI_TEST_EQUALS(size.height, (testImageWithPaddingSize.height + labelAndPaddingSize.height), TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPushButtonSetUnSelectedVisual01P(void)
+{
+ tet_infoline(" Test adding a visual for the UNSELECTED_VISUAL property, removing Button from stage and counting renderers\n");
+ ToolkitTestApplication application;
+
+ PushButton pushButton = PushButton::New();
+ pushButton.SetProperty(Actor::Property::SIZE, Vector2(BUTTON_SIZE_TO_GET_INSIDE_TOUCH_EVENTS));
+
+ application.GetScene().Add(pushButton);
+
+ Property::Map propertyMap;
+ propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
+ propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
+
+ pushButton.SetProperty(Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL, propertyMap);
+
+ tet_infoline(" UNSELECTED_VISUAL Added to button\n");
+
+ application.SendNotification();
+ application.Render(0);
+
+ unsigned int rendererCount = pushButton.GetRendererCount();
+ tet_printf("After adding UNSELECTED_BACKGROUND_VISUAL the renderer count is(%d)\n", rendererCount);
+
+ DALI_TEST_EQUALS(pushButton.GetRendererCount(), 1, TEST_LOCATION);
+
+ tet_printf("Remove button from stage\n");
+
+ application.GetScene().Remove(pushButton);
+
+ rendererCount = pushButton.GetRendererCount();
+ tet_printf("After removing pushbutton from stage the renderer count is(%d)\n ", rendererCount);
+
+ DALI_TEST_EQUALS(pushButton.GetRendererCount(), 0, TEST_LOCATION);
+
+ tet_printf("After removing pushbutton from stage the renderer count is(%d)\n ", rendererCount);
+
+ Property::Map propertyMap2;
+ propertyMap2.Insert(Visual::Property::TYPE, Visual::COLOR);
+ propertyMap2.Insert(ColorVisual::Property::MIX_COLOR, Color::RED);
+ pushButton.SetProperty(Toolkit::Button::Property::UNSELECTED_VISUAL, propertyMap2);
+
+ tet_printf("Added UNSELECTED_VISUAL and add button back to Stage\n");
+
+ application.GetScene().Add(pushButton);
+
+ tet_printf("With UNSELECTED_BACKGROUND_VISUAL and UNSELECTED_VISUAL the renderer count is(%d)\n", pushButton.GetRendererCount());
+
+ DALI_TEST_EQUALS(pushButton.GetRendererCount(), 2, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPushButtonSetSelectedVisualN(void)
+{
+ tet_infoline(" Test adding a broken visual for the UNSELECTED_VISUAL property");
+
+ ToolkitTestApplication application;
+
+ PushButton pushButton = PushButton::New();
+
+ pushButton.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+ pushButton.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
+ pushButton.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS);
+
+ application.GetScene().Add(pushButton);
+ application.SendNotification();
+ application.Render(0);
+
+ unsigned int preRendererCount = pushButton.GetRendererCount();
+ tet_printf("RendererCount prior to adding visual(%d)\n", preRendererCount);
+ DALI_TEST_EQUALS(preRendererCount, 0, TEST_LOCATION);
+
+ application.GetScene().Remove(pushButton);
+ application.SendNotification();
+ application.Render(0);
+
+ Property::Map colorMap;
+ const int BROKEN_VISUAL_TYPE = 999999999;
+
+ colorMap.Insert(Visual::Property::TYPE, BROKEN_VISUAL_TYPE);
+ colorMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
+ colorMap.Insert(BorderVisual::Property::SIZE, 5.f);
+ pushButton.SetProperty(Toolkit::Button::Property::UNSELECTED_VISUAL, colorMap);
+
+ application.GetScene().Add(pushButton);
+ application.SendNotification();
+ application.Render(0);
+
+ unsigned int postRendererCount = pushButton.GetRendererCount();
+ tet_printf("RendererCount post broken visual (%d)\n", postRendererCount);
+ DALI_TEST_EQUALS(postRendererCount, 0, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliPushButtonToggleSignalP(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline(" UtcDaliButtonToggleSignalP Ensure Signals emitted");
+
+ PushButton button = PushButton::New();
+ button.SetProperty(Button::Property::TOGGLABLE, true);
+
+ SetupButtonForTestTouchEvents(application, button, true);
+
+ application.GetScene().Add(button);
+
+ application.SendNotification();
+ application.Render();
+
+ // connect to its signal
+ button.ClickedSignal().Connect(&PushButtonClicked);
+ gPushButtonClicked = false;
+
+ tet_infoline(" Touch down and up within button");
+ Dali::Integration::TouchEvent event;
+ event = Dali::Integration::TouchEvent();
+ event.AddPoint(GetPointDownInside());
+ application.ProcessEvent(event);