示例#1
0
void CheckButton::OnRender(suic::DrawingContext * drawing)
{
    if (GetStyle())
    {
        // 
        // 先绘制背景
        //
        suic::Rect drawrect(0, 0, RenderSize().cx, RenderSize().cy);
        suic::ImageBrushPtr bkgnd(suic::Render::GetProperty(this, GetStyle().get(), InternalBackgrount()));

        if (bkgnd)
        {
            suic::Rect rectBk = bkgnd->GetContentBrounds();

            drawrect.right = drawrect.left + rectBk.Width();
            drawrect.top += (drawrect.Height() - rectBk.Height()) / 2;
            drawrect.bottom = drawrect.top + rectBk.Height();

            bkgnd->Draw(drawing, &drawrect);
        }

        //
        // 绘制文字
        //
        drawrect.top = 0;
        drawrect.bottom = RenderSize().cy;
        drawrect.left = drawrect.right + GetPadding().left;
        drawrect.right = RenderSize().cx;

        suic::Render::RenderText(drawing, this, GetText(), &drawrect, true);
    }
}
示例#2
0
void ComboBox::OnRender(suic::DrawingContext * drawing)
{
    suic::StylePtr styleArrow = FindResource(_T("ComboBox.Down"));

    suic::Point pt;
    suic::Rect drawrect(pt.x, pt.y, RenderSize().cx, RenderSize().cy);

    // 
    // 先绘制背景
    //
    if (GetBackground())
    {
        GetBackground()->Draw(drawing, &drawrect);
    }

    // 获取下拉箭头的设置
    if (styleArrow.get())
    {
        suic::BrushPtr bkgnd(suic::Render::GetProperty(this, styleArrow.get(), _T("Background")));

        if (bkgnd)
        {
            suic::Rect downRect = drawrect;

            downRect.Deflate(GetBorderThickness());
            downRect.left = downRect.right - 16;

            bkgnd->Draw(drawing, &downRect);
        }
    }

    suic::Render::RenderBorder(drawing, this, &drawrect);
}
示例#3
0
void ThumbButton::OnRender(suic::DrawingContext * drawing)
{
    // 先绘制背景
    __super::OnRender(drawing);

    suic::TriggerPtr trg(suic::UIRender::GetTriggerByStatus(this, GetStyle()));
    suic::ImageBrushPtr bkgnd = trg->GetValue(_T("Glyph"));

    if (bkgnd)
    {
        suic::Rect rect = bkgnd->GetContentBrounds();
        suic::Rect rc;

        if (rect.Width() <= RenderSize().cx 
            && rect.Height() <= RenderSize().cy)
        {
            rc.left = (RenderSize().cx - rect.Width()) / 2;
            rc.right = rc.left + rect.Width();

            rc.top = (RenderSize().cy - rect.Height()) / 2;
            rc.bottom = rc.top + rect.Height();

            bkgnd->Draw(drawing, &rc);
        }
    }
}
示例#4
0
void ScrollBar::OnHorzTrack(suic::Element* pSender, suic::MouseEventArg& e)
{
    if (!_rcTrack.Empty())
    {
        int iMin = 0;

        suic::Point ptWindow = e.MousePoint();
        suic::Point ptSelf = PointToScreen(suic::Point());

        suic::Rect rect(ptSelf.x, ptSelf.y, RenderSize().cx, RenderSize().cy);
 
        suic::Size szClamp(0, 0);
		int nThumbLength = 0;

        szClamp.cx = rect.left + (_decreaseBtn.IsVisible() ? (int)_decreaseBtn.GetWidth() : 0);
        szClamp.cy = rect.right - (_increaseBtn.IsVisible() ? (int)_increaseBtn.GetWidth() : 0);

        nThumbLength = _rcTrackStart.Width();

        szClamp.cy -= nThumbLength;

        suic::Point ptOffset(ptWindow.x - _ptTrackStart.x, ptWindow.y - _ptTrackStart.y);
        suic::Rect rectNew(_rcTrackStart);

        if (abs(ptOffset.y) < 150)
        {
            rectNew.Offset(ptOffset.x, 0);

            if (rectNew.left < szClamp.cx)
            {
                rectNew.left  = szClamp.cx;
                rectNew.right = rectNew.left + nThumbLength;
            }
            else if (szClamp.cy < rectNew.left)
            {
                rectNew.left  = szClamp.cy;
                rectNew.right = rectNew.left + nThumbLength;
            }
        }

        if (!rectNew.Equal(&_rcTrack))
		{
			_rcTrack = rectNew;
            int nPosNew = PosFromThumb(_rcTrack.left - szClamp.cx, szClamp);

			if (_scroInfo.iVisualPos != nPosNew)
            {
                _scroInfo.iVisualPos = nPosNew;

                DoScroll(true);
            }
        }
    }
}
示例#5
0
    void OnRender(suic::DrawingContext * drawing)
    {
        suic::Rect rect(0, 0, RenderSize().cx, RenderSize().cy);

        if (_expanded)
        {
            if (_bCollapsed)
            {
                _expanded->Draw(drawing, &rect);
            }
            else
            {
                _collapsed->Draw(drawing, &rect);
            }
        }
    }
示例#6
0
void Slider::HandleVertical(int pos)
{
    suic::Rect rcItem(0, 0, RenderSize().cx, RenderSize().cy);
    const suic::Size& thumbSize = _thumbBtn->GetDesiredSize();

    if (pos <= rcItem.top ) 
    {
        SetValue(Minimum());
    }
    else if (pos >= rcItem.bottom - thumbSize.cy) 
    {
        SetValue(Maximum());
    }
    else 
    {
        SetValue(Minimum() + (Maximum() - Minimum()) * (double)(pos) / (double)(rcItem.Height() - thumbSize.cy));
    }
}
示例#7
0
void Slider::HandleHorizontal(int pos)
{
    suic::Rect rcItem(0, 0, RenderSize().cx, RenderSize().cy);
    const suic::Size& thumbSize = _thumbBtn->GetDesiredSize();

    if (pos >= rcItem.right - thumbSize.cx) 
    {
        SetValue(Maximum());
    }
    else if (pos <= rcItem.left) 
    {
        SetValue(Minimum());
    }
    else 
    {
        SetValue(Minimum() + (Maximum() - Minimum()) * (double)(pos) / (double)(rcItem.Width() - thumbSize.cx));
    }
}
示例#8
0
void WebBrowser::OnVisibilityChanged(bool visible)
{
    suic::Point point = PointToScreen(suic::Point());
    suic::Rect rect(point.x, point.y, RenderSize().cx, RenderSize().cy);

    WebWrapper* pWeb = (WebWrapper*)_webHost;

    if (visible)
    {
        pWeb->SetWebRect(&rect);
    }
    else
    {
        suic::Rect rc;

        pWeb->SetWebRect(&rc);
    }
}
示例#9
0
void AnimateBox::OnRender(suic::DrawingContext * drawing)
{
    suic::ImagePtr img = CurrentFrame();
    int flag = 2;

    suic::FrameworkElement::OnRender(drawing);

    if (_frames.size() > 1)
    {
        suic::Rect rc(0, 0, RenderSize().cx, RenderSize().cy);
        flag = _frames[_curframe].flag;

        // 先恢复背景色
        if (flag == 2)
        {
            //drawing->FillRectangle(rc, _bkcolor);
        }

    //    // 如果需要,绘制前一帧
    //    //if (_frame)
    //    //{ 
    //    //    suic::Rect rcim(0, 0, _frame->Width(), _frame->Height());

    //    //    drawing->DrawImage(_frame.get(), &rc, &rcim, CurrentTransparent());
    //    //    _frame = NULL;
    //    //}

    //    //// 需要保留上一帧
    //    if (flag == 3)
    //    {
    //        _frame = img;
    //    }
    }

    if (img)
    {
        suic::Rect rect(0, 0, RenderSize().cx, RenderSize().cy);
        suic::Rect rcimg(0, 0, img->Width(), img->Height());

        drawing->DrawImage(img.get(), &rect, &rcimg, CurrentTransparent());
    }
}
示例#10
0
void ScrollBar::UpdateScrollInfo(int iVisual, int iLogic, bool bCalc)
{
    _iVisualSize = iVisual;
    _iLogicSize = iLogic;

    CalcScrollPos();

    if (bCalc)
    {
        GetScrollThumbRect(RenderSize());
    }
}
示例#11
0
void ScrollBar::OnBeginTrack(suic::Element* pSender, suic::MouseEventArg& e)
{
    suic::Point pt = PointToScreen(suic::Point());

    _rcTrackStart = GetScrollThumbRect(RenderSize(), false);

    _rcTrackStart.Offset(pt.x, pt.y);

    _rcTrack = _rcTrackStart;
    _scroInfo._iTrackPos = _scroInfo.iVisualPos;
    _ptTrackStart = e.MousePoint();
}
示例#12
0
void ProgressBar::OnRender(suic::DrawingContext * drawing)
{
    // 先绘制背景
    suic::Rect elemrect(0, 0, RenderSize().cx, RenderSize().cy);

    suic::TriggerPtr trg(suic::UIRender::GetTriggerByStatus(this, GetStyle()));
    suic::UIRender::DrawBackground(drawing, trg, &elemrect);

    //
    // 绘制进度条状态
    //
    suic::ImageBrushPtr bkgnd(trg->GetValue(_T("Thumb")));

    if (bkgnd)
    {
        suic::Rect rcdraw(elemrect);

        // 水平
        if (GetOrientation() == CoreFlags::Horizontal)
        {
            LONG iOff = (LONG)((GetValue() - Minimum()) * (double)(rcdraw.right - rcdraw.left) / (Maximum() - Minimum()));
            rcdraw.right = rcdraw.left + iOff;
        }
        else
        {
            LONG iOff = (LONG)((double)(rcdraw.bottom - rcdraw.top) * (GetValue() - Minimum()) / (Maximum() - Minimum()));
            rcdraw.top = rcdraw.bottom - iOff;
        }

        if (!rcdraw.Empty())
        {
            bkgnd->Draw(drawing, &rcdraw);
        }
    }

    suic::UIRender::DrawText(drawing, GetText(), trg, &elemrect
        , GetHorizontalContentAlignment(), GetVerticalContentAlignment());
}
示例#13
0
void TextBlock::OnRender(suic::DrawingContext * drawing)
{
    suic::Rect elemrect(0, 0, RenderSize().cx, RenderSize().cy);

    // 绘制背景
    //suic::UIRender::DrawBackground(drawing, GetStyle()->GetTrigger(), &elemrect);

    elemrect.Deflate(GetPadding());

    suic::UIRender::DrawText(drawing, GetText()
        , GetStyle()->GetTrigger(), &elemrect
        , GetHorizontalContentAlignment(), GetVerticalContentAlignment());

    //
    // 如果拥有焦点则绘制焦点虚线
    //
    if (IsFocused())
    {
        suic::Rect rect(0, 0, RenderSize().cx, RenderSize().cy);

        rect.Deflate(GetBorderThickness());
        drawing->DrawFocused(&rect);
    }
}
示例#14
0
void ComboBox::OnMouseLeftButtonDown(suic::MouseEventArg& e)
{
    __super::OnMouseLeftButtonDown(e);

    if (_popup->IsValid())
    {
        _popup->Close();
    }
    else
    {
        suic::Point point = suic::SystemHelper::CalcScreenElementPoint(this, CoreFlags::eLeftBottom);

        suic::Size availableSize;
        int iWid = RenderSize().cx;

        _list->Measure(availableSize);
        _popup->SetWidth(iWid);

        if (_list->GetDesiredSize().cy > _downHeight
            || _list->GetDesiredSize().cy <= 16)
        {
            _popup->SetHeight(_downHeight);
        }
        else
        {
            int iHei = _list->GetDesiredSize().cy 
                + _list->GetBorderThickness().top
                + _list->GetBorderThickness().bottom;

            _popup->SetHeight(iHei);
        }

        _popup->SetOwner(this);
        _popup->SetPopupRoot(_list.get());

        DropDownEventArg eo(_popup, _list);

        OnDropDownOpened(eo);
        _popup->TrackingPopup(point.x, point.y, false, 0, 0, new ComboListHookPopup(_popup));

        suic::ObjectPtr selObj = _list->SelectedItem();
        _list->UnselectAllItems();
        OnDropDownClosed(eo);
    }
}
示例#15
0
void TreeViewItem::OnMouseLeftButtonDown(suic::MouseEventArg& e)
{
    suic::Element::OnMouseLeftButtonDown(e);
    suic::ElementPtr pHeader = suic::ElementPtr::cast(GetHeader());

    if (!e.IsHandled())
    {
        suic::Rect rect = suic::VisualHelper::GetRenderRect(pHeader);
        e.SetHandled(true);

        rect.left = 0;
        rect.right = RenderSize().cx;

        if (rect.PointIn(e.MousePoint()))
        {
            Select();
        }
    }
}
示例#16
0
void TreeViewItem::OnRender(suic::DrawingContext * drawing)
{
    suic::Rect rect(0, 0, RenderSize().cx, _headerHost->RenderSize().cy);
    suic::BrushPtr bkgnd;

    if (IsFocused() || ReadFlag(CoreFlags::IsSelected))
    {
        if (GetStyle()->GetTrigger(_T("IsFocused")))
        {
            bkgnd = GetStyle()->GetTrigger(_T("IsFocused"))->GetValue(_T("Background"));
        }
    }
    else if (_headerHost->IsMouseOver() && GetStyle()->GetTrigger(_T("IsMouseOver")))
    {
        bkgnd = GetStyle()->GetTrigger(_T("IsMouseOver"))->GetValue(_T("Background"));
    }

    if (bkgnd)
    {
        bkgnd->Draw(drawing, &rect);
    }
}
示例#17
0
void Slider::OnRender(suic::DrawingContext * drawing)
{
    // 先绘制背景
    suic::Rect rcdraw(0, 0, RenderSize().cx, RenderSize().cy);
    suic::TriggerPtr trg(GetStyle()->GetTrigger());
    suic::ImageBrushPtr bkgnd(trg->GetValue(suic::BACKGROUND));

    if (!bkgnd)
    {
        if (GetOrientation() == CoreFlags::Horizontal)
        {
            rcdraw.top = (RenderSize().cy - GetDesiredSize().cy) / 2;
            rcdraw.bottom = rcdraw.top + GetDesiredSize().cy;
        }
        else
        {
            rcdraw.left = (RenderSize().cx - GetDesiredSize().cx) / 2;
            rcdraw.right = rcdraw.left + GetDesiredSize().cx;
        }

        suic::UIRender::DrawBackground(drawing, trg, &rcdraw);
    }
    else
    {
        suic::Rect rect = bkgnd->GetContentBrounds();

        if (GetOrientation() == CoreFlags::Horizontal)
        {
            rcdraw.top = (RenderSize().cy - rect.Height()) / 2;
            rcdraw.bottom = rcdraw.top + rect.Height();
        }
        else
        {
            rcdraw.left = (RenderSize().cx - rect.Width()) / 2;
            rcdraw.right = rcdraw.left + rect.Width();
        }

        bkgnd->Draw(drawing, &rcdraw);
    }
}
示例#18
0
void TabControl::OnRender(suic::DrawingContext * drawing)
{
    suic::Rect rect(0, _headerHeight, RenderSize().cx, RenderSize().cy - _headerHeight);
    suic::UIRender::DrawBackground(drawing, GetStyle()->GetTrigger(), &rect);
}