Files
graphic_ui/frameworks/components/ui_checkbox.cpp
T
2021-03-11 18:38:06 +08:00

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