/* * Copyright (c) 2020 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 using namespace Dali; namespace { const char* const IMAGE_PATH_1(DEMO_IMAGE_DIR "people-small-7b.jpg"); // 100x100 const char* const IMAGE_PATH_2(DEMO_IMAGE_DIR "people-medium-7.jpg"); const char* const IMAGE_PATH_3(DEMO_IMAGE_DIR "people-medium-7-rgb565.png"); // is compressed const char* const IMAGE_PATH_4(DEMO_IMAGE_DIR "people-medium-7-masked.png"); // has alpha channel const char* const MASK_IMAGE_PATH_1(DEMO_IMAGE_DIR "store_mask_profile_n.png"); // 300x300 const char* const MASK_IMAGE_PATH_2(DEMO_IMAGE_DIR "store_mask_profile_f.png"); } // namespace class ImageViewAlphaBlendApp : public ConnectionTracker { public: ImageViewAlphaBlendApp(Application& application) : mApplication(application), mImageCombinationIndex(0) { // Connect to the Application's Init signal mApplication.InitSignal().Connect(this, &ImageViewAlphaBlendApp::Create); } ~ImageViewAlphaBlendApp() { // Nothing to do here; } private: // The Init signal is received once (only) during the Application lifetime void Create(Application& application) { // This creates an image view with one of 3 images, and one of 2 masks. // Clicking the screen will cycle through each combination of mask and image. // Get a handle to the window Window window = application.GetWindow(); window.KeyEventSignal().Connect(this, &ImageViewAlphaBlendApp::OnKeyEvent); window.SetBackgroundColor(Color::WHITE); mImageView = Toolkit::ImageView::New(); mImageView.SetProperty(Actor::Property::SIZE, Vector2(200, 200)); mImageView.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); window.Add(mImageView); mImageLabel = Toolkit::TextLabel::New(); mImageLabel.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_CENTER); mImageLabel.SetProperty(Actor::Property::ANCHOR_POINT, ParentOrigin::BOTTOM_CENTER); mImageLabel.SetProperty(Actor::Property::POSITION, Vector3(0.0f, -50.0f, 0.0f)); mImageLabel.SetProperty(Toolkit::TextLabel::Property::TEXT_COLOR, Color::BLACK); window.Add(mImageLabel); mMaskLabel = Toolkit::TextLabel::New(); mMaskLabel.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_CENTER); mMaskLabel.SetProperty(Actor::Property::ANCHOR_POINT, ParentOrigin::BOTTOM_CENTER); mMaskLabel.SetProperty(Actor::Property::POSITION, Vector3(0.0f, 0.0f, 0.0f)); mMaskLabel.SetProperty(Toolkit::TextLabel::Property::TEXT_COLOR, Color::BLACK); window.Add(mMaskLabel); LoadImages(); window.TouchedSignal().Connect(this, &ImageViewAlphaBlendApp::OnTouched); } void OnTouched(const TouchEvent& touch) { static bool touched = false; if(touch.GetState(0) == PointState::DOWN) { touched = true; } if(touch.GetState(0) == PointState::UP && touched) { mImageCombinationIndex++; touched = false; LoadImages(); } } void LoadImages() { const char* images[4] = {IMAGE_PATH_1, IMAGE_PATH_2, IMAGE_PATH_3, IMAGE_PATH_4}; const char* masks[2] = {MASK_IMAGE_PATH_1, MASK_IMAGE_PATH_2}; const char* mask = masks[mImageCombinationIndex % 2]; // Cycle through masks const char* image = images[(mImageCombinationIndex / 2) % 4]; // then images Property::Map map; map.Add(Toolkit::Visual::Property::TYPE, Toolkit::Visual::Type::IMAGE); map.Add(Toolkit::ImageVisual::Property::URL, image); map.Add(Toolkit::ImageVisual::Property::ALPHA_MASK_URL, mask); if(mImageCombinationIndex % 2 == 0) { map.Add(Toolkit::ImageVisual::Property::MASK_CONTENT_SCALE, 1.f); map.Add(Toolkit::ImageVisual::Property::CROP_TO_MASK, false); } else { map.Add(Toolkit::ImageVisual::Property::MASK_CONTENT_SCALE, 1.6f); map.Add(Toolkit::ImageVisual::Property::CROP_TO_MASK, true); } mImageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map); mImageLabel.SetProperty(Toolkit::TextLabel::Property::TEXT, strrchr(image, '/')); mMaskLabel.SetProperty(Toolkit::TextLabel::Property::TEXT, strrchr(mask, '/')); } void OnKeyEvent(const KeyEvent& event) { if(event.GetState() == KeyEvent::DOWN) { if(IsKey(event, Dali::DALI_KEY_ESCAPE) || IsKey(event, Dali::DALI_KEY_BACK)) { mApplication.Quit(); } } } private: Application& mApplication; Toolkit::ImageView mImageView; Toolkit::TextLabel mImageLabel; Toolkit::TextLabel mMaskLabel; int mImageCombinationIndex; }; int DALI_EXPORT_API main(int argc, char** argv) { Application application = Application::New(&argc, &argv); ImageViewAlphaBlendApp test(application); application.MainLoop(); return 0; }