YSTest
PreAlpha_b400_20130424
The YSLib Test Project
首页
相关页面
模块
命名空间
类
文件
文件列表
文件成员
全部
类
命名空间
文件
函数
变量
类型定义
枚举
枚举值
友元
宏定义
组
页
progress.cpp
浏览该文件的文档.
1
/*
2
Copyright by FrankHB 2011 - 2013.
3
4
This file is part of the YSLib project, and may only be used,
5
modified, and distributed under the terms of the YSLib project
6
license, LICENSE.TXT. By continuing to use, modify, or distribute
7
this file you indicate that you have read the license and
8
understand and accept it fully.
9
*/
10
28
#include "
YSLib/UI/progress.h
"
29
#include "
YSLib/UI/ygui.h
"
30
#include "
YSLib/UI/YBrush.h
"
31
32
YSL_BEGIN
33
34
YSL_BEGIN_NAMESPACE
(UI)
35
36
ProgressBar::ProgressBar(const Rect& r, ValueType m)
37
: Control(r,
NoBackgroundTag
()), GMRange<
float
>(m == 0 ? 1 : m, 0)
38
{
39
auto
& pal(
FetchGUIState
().Colors);
40
BorderStyle
style
;
41
42
style.ActiveColor = pal[
Styles::InactiveBorder
];
43
yunseq
(
44
Background = SolidBrush(pal[
Styles::Track
]),
45
ForeColor = pal[
Styles::HotTracking
],
46
FetchEvent<Paint>(*this).Add(BorderBrush(style),
BoundaryPriority
)
47
);
48
}
49
50
void
51
ProgressBar::SetMaxValue(
ValueType
m)
52
{
53
if
(
YB_LIKELY
(m > 0))
54
{
55
if
(
YB_LIKELY
(value > m))
56
value = m;
57
max_value = m;
58
}
59
}
60
61
void
62
ProgressBar::Refresh(
PaintEventArgs
&& e)
63
{
64
const
auto
& g(e.Target);
65
auto
pt(e.Location);
66
Size
s(
GetSizeOf
(*
this
));
67
68
e.ClipArea =
Rect
(pt, s);
69
if
(
YB_LIKELY
(s.
Width
> 2 && s.
Height
> 2))
70
{
71
yunseq
(s.
Width
-= 2, s.
Height
-= 2, pt.X += 1, pt.Y += 1);
72
73
const
SDst
w_bar(round(value * s.
Width
/ max_value));
74
75
FillRect
(g, pt,
Size
(w_bar, s.
Height
), ForeColor);
76
pt.X += w_bar;
77
if
(s.
Width
> w_bar)
78
// TODO: Finish drawing with non-solid brushes.
79
if
(
const
auto
p = Background.target<
SolidBrush
>())
80
FillRect
(g, pt,
Size
(s.
Width
- w_bar, s.
Height
), p->Color);
81
}
82
}
83
84
YSL_END_NAMESPACE
(UI)
85
86
YSL_END
87
YFramework
source
YSLib
UI
progress.cpp
生成于 2013年 四月 24日 星期三 18:41:27 , 为 YSTest使用
1.8.2