/* * Copyright (c) 2024 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #include #include #include #include #include #include #include #include using namespace Dali; namespace { const char* BACKGROUND_IMAGE(DEMO_IMAGE_DIR "background-3.jpg"); const char* SUN_CLOUD_ICON_IMAGE(DEMO_IMAGE_DIR "light-icon-front.png"); } // namespace class RenderEffectController : public Dali::ConnectionTracker { public: RenderEffectController(Application& application) : mApplication(application) { mApplication.InitSignal().Connect(this, &RenderEffectController::Create); } ~RenderEffectController() { } void Create(Dali::Application& application) { Window window = application.GetWindow(); Layer backgroundLayer = Layer::New(); Vector2 size = window.GetSize(); // Background image { backgroundLayer.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); backgroundLayer.SetProperty(Actor::Property::SIZE, size); Toolkit::ImageView backgroundImage = Toolkit::ImageView::New(BACKGROUND_IMAGE); backgroundImage.SetProperty(Actor::Property::SIZE, size); backgroundImage.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); backgroundLayer.Add(backgroundImage); window.Add(backgroundLayer); } // UI panel float unitSizeWidth = 180.0f; float unitSizeHeight = 180.0f; Toolkit::Control UIPanel = Toolkit::Control::New(); UIPanel.SetProperty(Actor::Property::SIZE, size * 0.8f); UIPanel.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); window.Add(UIPanel); UIPanel.SetRenderEffect(Toolkit::BackgroundBlurEffect::New(0.4f, 40, 10.0f)); // Welcome message { Toolkit::TextLabel label = SetUpTextLabelProperties("Welcome, You.", Vector4::ONE, "BEGIN", 20.0f); label.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER); label.SetProperty(Actor::Property::SIZE, Vector2(unitSizeWidth * 2.0f, unitSizeHeight + 20.0f)); label.SetProperty(Actor::Property::POSITION_Y, 50.0f); UIPanel.Add(label); } // Weather panel { Toolkit::Control weatherPanel = Toolkit::Control::New(); weatherPanel.SetProperty(Actor::Property::SIZE, Vector2(unitSizeWidth * 2.0f, unitSizeHeight + 10.0f)); weatherPanel.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER); weatherPanel.SetProperty(Actor::Property::POSITION, Vector2(0, size.y * 0.15f)); Property::Map colorVisualPropertyMap; colorVisualPropertyMap.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR); colorVisualPropertyMap.Insert(Toolkit::Visual::Property::MIX_COLOR, Color::BLACK); colorVisualPropertyMap.Insert(Toolkit::Visual::Property::OPACITY, 0.2f); colorVisualPropertyMap.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, 30.0f); weatherPanel.SetProperty(Toolkit::Control::Property::BACKGROUND, colorVisualPropertyMap); Toolkit::TextLabel label = SetUpTextLabelProperties("10:21", Color::WHITE, "BEGIN", 36.0f); label.SetProperty(Actor::Property::SIZE_WIDTH, 250.0f); label.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); label.SetProperty(Actor::Property::POSITION_Y, -10.0f); weatherPanel.Add(label); label = SetUpTextLabelProperties("June 4th, 2024", Color::WHITE, "BEGIN", 13.0f); label.SetProperty(Actor::Property::SIZE_WIDTH, 250.0f); label.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); label.SetProperty(Actor::Property::POSITION_Y, 30.0f); weatherPanel.Add(label); Toolkit::ImageView weatherIcon = Toolkit::ImageView::New(SUN_CLOUD_ICON_IMAGE); weatherIcon.SetProperty(Actor::Property::SIZE, Vector2(120.0f, 100.0f)); weatherIcon.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); weatherIcon.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_LEFT); weatherIcon.SetProperty(Actor::Property::POSITION, Vector2(30.0f, 30.0f)); weatherPanel.Add(weatherIcon); label = SetUpTextLabelProperties("18", Color::WHITE, "END", 25.0f); label.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_LEFT); label.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); label.SetProperty(Actor::Property::POSITION_X, 100.0f); label.SetProperty(Actor::Property::POSITION_Y, -50.0f); weatherPanel.Add(label); Toolkit::TextLabel unitLabel = SetUpTextLabelProperties("°C", Color::WHITE, "BEGIN"); unitLabel.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_RIGHT); unitLabel.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); label.Add(unitLabel); UIPanel.Add(weatherPanel); weatherPanel.SetRenderEffect(Toolkit::BackgroundBlurEffect::New(0.4f, 40, 10.0f)); } // Icon mini panels { Vector2 iconPanelSize = Vector2(unitSizeWidth, unitSizeHeight); float x_incrementer = iconPanelSize.x / 2.0f + 10.0f; float y_incrementer = iconPanelSize.y + 20.f; float y_starter = size.y * .33f; Toolkit::Control control = CreateIconPanel("Security", "4 rooms", false, DEMO_IMAGE_DIR "application-icon-7.png", iconPanelSize); control.SetProperty(Actor::Property::POSITION, Vector2(-x_incrementer, y_starter)); control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER); UIPanel.Add(control); control.SetRenderEffect(Toolkit::BackgroundBlurEffect::New(0.4f, 40, 10.0f)); control = CreateIconPanel("BlueTooth", "2 devices", true, DEMO_IMAGE_DIR "application-icon-14.png", iconPanelSize); control.SetProperty(Actor::Property::POSITION, Vector2(x_incrementer, y_starter)); control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER); UIPanel.Add(control); control.SetRenderEffect(Toolkit::BackgroundBlurEffect::New(0.4f, 40, 10.0f)); control = CreateIconPanel("Wi-Fi", "TizenUIFW", true, DEMO_IMAGE_DIR "application-icon-55.png", iconPanelSize); control.SetProperty(Actor::Property::POSITION, Vector2(-x_incrementer, y_starter + y_incrementer)); control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER); UIPanel.Add(control); control.SetRenderEffect(Toolkit::BackgroundBlurEffect::New(0.4f, 40, 10.0f)); control = CreateIconPanel("Lighting", "5 devices", true, DEMO_IMAGE_DIR "application-icon-21.png", iconPanelSize); control.SetProperty(Actor::Property::POSITION, Vector2(x_incrementer, y_starter + y_incrementer)); control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER); UIPanel.Add(control); control.SetRenderEffect(Toolkit::BackgroundBlurEffect::New(0.4f, 40, 10.0f)); } // Air conditioner { Toolkit::Control airConPanel = Toolkit::Control::New(); airConPanel.SetProperty(Actor::Property::SIZE, Vector2(unitSizeWidth * 2.0f, unitSizeHeight + 10.0f)); airConPanel.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_CENTER); airConPanel.SetProperty(Actor::Property::POSITION_Y, -unitSizeHeight + 20.0f); airConPanel.SetProperty(DevelActor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN); Toolkit::TextLabel label = SetUpTextLabelProperties("Air Conditioner", Color::WHITE, "BEGIN", 15.0f); label.SetProperty(Actor::Property::SIZE_WIDTH, unitSizeWidth * 2.0f - 50.0f); label.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); label.SetProperty(Actor::Property::POSITION_Y, -unitSizeHeight * 0.3f); airConPanel.Add(label); label = SetUpTextLabelProperties("24", Color::WHITE, "END", 36.0f); label.SetProperty(Actor::Property::SIZE_WIDTH, 36.0f * 2.0f); // maximum two characters label.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); label.SetProperty(Actor::Property::POSITION_Y, unitSizeHeight * 0.05f); label.SetProperty(Actor::Property::POSITION_X, -unitSizeWidth * 0.75f); airConPanel.Add(label); Toolkit::TextLabel unitLabel = SetUpTextLabelProperties("°C", Color::WHITE, "BEGIN"); unitLabel.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_RIGHT); unitLabel.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); label.Add(unitLabel); label = SetUpTextLabelProperties("Living room", Color::WHITE, "BEGIN", 13.0f); label.SetProperty(Actor::Property::SIZE_WIDTH, unitSizeWidth * 2.0f - 50.0f); label.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); label.SetProperty(Actor::Property::POSITION_Y, unitSizeHeight * 0.3f); airConPanel.Add(label); Toolkit::ImageView airConImage = Toolkit::ImageView::New(DEMO_IMAGE_DIR "application-icon-24.png"); airConImage.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); airConImage.SetProperty(Actor::Property::SIZE, Vector2(unitSizeWidth, unitSizeHeight) * 0.5f); airConImage.SetProperty(Actor::Property::POSITION_X, unitSizeWidth * .5f); airConPanel.Add(airConImage); Property::Map airConPanelDimmer; airConPanelDimmer.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR); airConPanelDimmer.Insert(Toolkit::Visual::Property::MIX_COLOR, Color::BLACK); airConPanelDimmer.Insert(Toolkit::Visual::Property::OPACITY, 0.2f); airConPanelDimmer.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, 30.0f); airConPanel.SetProperty(Toolkit::Control::Property::BACKGROUND, airConPanelDimmer); UIPanel.Add(airConPanel); airConPanel.SetRenderEffect(Toolkit::BackgroundBlurEffect::New(0.4f, 40, 10.0f)); } // lower background layer backgroundLayer.LowerBelow(window.GetRootLayer()); // Connect signals application.GetWindow().KeyEventSignal().Connect(this, &RenderEffectController::OnKeyEvent); } Toolkit::Control CreateIconPanel(std::string title, std::string detail, bool isOn, std::string iconURL, Vector2 size) { Toolkit::Control panel = Toolkit::Control::New(); panel.SetProperty(Actor::Property::SIZE, size); Property::Map colorVisualPropertyMap; colorVisualPropertyMap.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::COLOR); colorVisualPropertyMap.Insert(Toolkit::Visual::Property::OPACITY, 0.3f); colorVisualPropertyMap.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, 30.0f); panel.SetProperty(Toolkit::Control::Property::BACKGROUND, colorVisualPropertyMap); // TOP Toolkit::ImageView icon = Toolkit::ImageView::New(iconURL); icon.SetProperty(Actor::Property::SIZE, Vector2(50.0f, 50.0f)); icon.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); icon.SetProperty(Actor::Property::POSITION, size * 0.05f); panel.Add(icon); Toolkit::TextLabel isOnLabel; if(isOn) { isOnLabel = SetUpTextLabelProperties("On", Vector4::ONE, "END", 13.0f); } else { isOnLabel = SetUpTextLabelProperties("Off", Vector4::ONE, "END", 13.0f); } isOnLabel.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER); isOnLabel.SetProperty(Actor::Property::POSITION_Y, size.y * 0.15f); isOnLabel.SetProperty(Actor::Property::SIZE_WIDTH, size.x * 0.7f); panel.Add(isOnLabel); // MIDDLE Toolkit::TextLabel textLabel = SetUpTextLabelProperties(title, Vector4::ONE, "BEGIN"); textLabel.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); textLabel.SetProperty(Actor::Property::PADDING, Vector4(20.0f, 20.0f, 20.0f, 20.0f)); panel.Add(textLabel); Toolkit::TextLabel detailLabel = SetUpTextLabelProperties(detail, Vector4::ONE, "BEGIN", 13.0f); detailLabel.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); detailLabel.SetProperty(Actor::Property::PADDING, Vector4(20.0f, 20.0f, 20.0f, 20.0f)); detailLabel.SetProperty(Actor::Property::POSITION_Y, 30.0f); panel.Add(detailLabel); return panel; } Toolkit::TextLabel SetUpTextLabelProperties(std::string text, Vector4 color, std::string alignment, float fontSize = 15.0f) { Toolkit::TextLabel label = Toolkit::TextLabel::New(text); label.SetProperty(Toolkit::TextLabel::Property::TEXT_COLOR, color); label.SetProperty(Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, alignment); label.SetProperty(Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER"); label.SetProperty(Toolkit::TextLabel::Property::POINT_SIZE, fontSize); return label; } void OnKeyEvent(const KeyEvent& event) { if(event.GetState() == KeyEvent::DOWN) { if(IsKey(event, DALI_KEY_ESCAPE) || IsKey(event, DALI_KEY_BACK)) { mApplication.Quit(); } } } private: Application& mApplication; }; int DALI_EXPORT_API main(int argc, char** argv) { Application application = Application::New(&argc, &argv, DEMO_THEME_PATH); RenderEffectController test(application); application.MainLoop(); return 0; }