59 lines
1.6 KiB
C++
59 lines
1.6 KiB
C++
/******************************************************************************
|
|
* Copyright (c) 2018(-2023) STMicroelectronics.
|
|
* All rights reserved.
|
|
*
|
|
* This file is part of the TouchGFX 4.22.0 distribution.
|
|
*
|
|
* This software is licensed under terms that can be found in the LICENSE file in
|
|
* the root directory of this software component.
|
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
*
|
|
*******************************************************************************/
|
|
|
|
#include <touchgfx/Drawable.hpp>
|
|
#include <touchgfx/hal/HAL.hpp>
|
|
#include <touchgfx/lcd/LCD.hpp>
|
|
#include <touchgfx/widgets/SnapshotWidget.hpp>
|
|
|
|
namespace touchgfx
|
|
{
|
|
SnapshotWidget::SnapshotWidget()
|
|
: Widget(), bitmapId(BITMAP_INVALID), alpha(255)
|
|
{
|
|
}
|
|
|
|
void SnapshotWidget::draw(const Rect& invalidatedArea) const
|
|
{
|
|
if (alpha == 0 || bitmapId == BITMAP_INVALID)
|
|
{
|
|
return;
|
|
}
|
|
|
|
Rect absRect(0, 0, Bitmap(bitmapId).getWidth(), rect.height);
|
|
translateRectToAbsolute(absRect);
|
|
HAL::lcd().blitCopy((const uint16_t*)Bitmap(bitmapId).getData(), absRect, invalidatedArea, alpha, false);
|
|
}
|
|
|
|
Rect SnapshotWidget::getSolidRect() const
|
|
{
|
|
if (alpha < 255 || bitmapId == BITMAP_INVALID)
|
|
{
|
|
return Rect();
|
|
}
|
|
return Rect(0, 0, getWidth(), getHeight());
|
|
}
|
|
|
|
void SnapshotWidget::makeSnapshot()
|
|
{
|
|
makeSnapshot(BITMAP_ANIMATION_STORAGE);
|
|
}
|
|
|
|
void SnapshotWidget::makeSnapshot(const BitmapId bmp)
|
|
{
|
|
Rect visRect(0, 0, rect.width, rect.height);
|
|
getVisibleRect(visRect);
|
|
const Rect absRect = getAbsoluteRect();
|
|
bitmapId = (HAL::lcd().copyFrameBufferRegionToMemory(visRect, absRect, bmp)) ? bmp : BITMAP_INVALID;
|
|
}
|
|
} // namespace touchgfx
|