mirror of
https://github.com/openharmony/graphic_ui.git
synced 2026-06-30 23:17:56 -04:00
96 lines
2.8 KiB
C++
Executable File
96 lines
2.8 KiB
C++
Executable File
/*
|
|
* Copyright (c) 2020-2021 Huawei Device 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 "common/image.h"
|
|
#include "components/ui_checkbox.h"
|
|
#include "default_resource/check_box_res.h"
|
|
#include "draw/draw_image.h"
|
|
#include "draw/draw_rect.h"
|
|
#include "imgdecode/cache_manager.h"
|
|
|
|
namespace OHOS {
|
|
UICheckBox::UICheckBox()
|
|
: state_(UNSELECTED), onStateChangeListener_(nullptr)
|
|
{
|
|
touchable_ = true;
|
|
style_ = &(StyleDefault::GetBackgroundTransparentStyle());
|
|
image_[UNSELECTED].SetSrc(GetCheckBoxOffInfo());
|
|
image_[SELECTED].SetSrc(GetCheckBoxOnInfo());
|
|
ImageHeader header = { 0 };
|
|
image_[UNSELECTED].GetHeader(header);
|
|
Resize(header.width, header.height);
|
|
}
|
|
|
|
UICheckBox::~UICheckBox()
|
|
{
|
|
}
|
|
|
|
void UICheckBox::SetState(UICheckBoxState state)
|
|
{
|
|
if (state != state_) {
|
|
state_ = state;
|
|
if (onStateChangeListener_ != nullptr) {
|
|
onStateChangeListener_->OnChange(state);
|
|
}
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
void UICheckBox::ReverseState()
|
|
{
|
|
state_ = (state_ == SELECTED) ? UNSELECTED : SELECTED;
|
|
}
|
|
|
|
bool UICheckBox::OnClickEvent(const ClickEvent& event)
|
|
{
|
|
ReverseState();
|
|
Invalidate();
|
|
return UIView::OnClickEvent(event);
|
|
}
|
|
|
|
void UICheckBox::SetImages(const char* selectedImageSrc, const char* unselectedImageSrc)
|
|
{
|
|
image_[SELECTED].SetSrc(selectedImageSrc);
|
|
image_[UNSELECTED].SetSrc(unselectedImageSrc);
|
|
}
|
|
|
|
void UICheckBox::SetImages(const ImageInfo* selectedImageSrc, const ImageInfo* unselectedImageSrc)
|
|
{
|
|
image_[SELECTED].SetSrc(selectedImageSrc);
|
|
image_[UNSELECTED].SetSrc(unselectedImageSrc);
|
|
}
|
|
|
|
void UICheckBox::OnDraw(const Rect& invalidatedArea)
|
|
{
|
|
ImageHeader header = {0};
|
|
image_[state_].GetHeader(header);
|
|
int16_t imgWidth = header.width;
|
|
int16_t imgHeight = header.height;
|
|
Rect coords = GetContentRect();
|
|
coords.SetWidth(imgWidth);
|
|
coords.SetHeight(imgHeight);
|
|
DrawRect::Draw(GetRect(), invalidatedArea, *style_, opaScale_);
|
|
|
|
int16_t offsetLeft = (GetWidth() - imgWidth) / 2; // 2 : half
|
|
int16_t offsetTop = (GetHeight() - imgHeight) / 2; // 2 : half
|
|
coords.SetX(coords.GetX() + offsetLeft);
|
|
coords.SetY(coords.GetY() + offsetTop);
|
|
Rect trunc = invalidatedArea;
|
|
if (trunc.Intersect(trunc, coords)) {
|
|
image_[state_].DrawImage(coords, trunc, *style_, opaScale_);
|
|
}
|
|
}
|
|
} // namespace OHOS
|