属性浏览器 - 画刷设置

QQ: 282397369

画笔与画刷

在TUniCanvas中,已定义画笔画刷

	TUniCanvasPen* FPen;
	TUniCanvasBrush* FBrush;

再看一下,这两个类还有点关系:

TUniCanvasPen
TUniPen
TUniBrush
Color
Opacity
Width
TUniCanvasBrush

其实也很简单的关系。
但从HTML5 Canvas的角度来看,画刷也就一个属性:fillStyle,只不过该属性可以有三种形式:color|gradient|pattern
搞明白这个,界面实现就有思路。把画笔与画刷合在一起,能共用的就共用。
再借鉴Windows中的画刷体验,把画刷的填充模式设置为五种:无填充、纯色填充、线性渐变、雷达渐变、图案纹理。这应该足够用的了。

效果

逐个实现填充模式。
基于时间与需求,图片纹理暂不实现,先支持软件的初步使用效果即可,不用花太多时间去抠界面及其易用性。所以线性渐变与雷达渐变,也先不处理图形设计方式。等后续时间充足了再优化这块。
其实,根本原因在于还没有彻底理解线性渐变与雷达渐变各参数的含义,现在做出来也是浪费,以后会觉得,都编了些什么垃圾代码,不爽。

无填充

在这里插入图片描述

纯色填充

在这里插入图片描述
颜色选择这块,uniGUI有个TUniColorBUtton控件,让我省了一些事。该控件可以自定义可选择的颜色项。不过系统缺省提供的选项已大体够用。
在这里插入图片描述

线性渐变

在这里插入图片描述

雷达渐变

在这里插入图片描述
所有的实现,均采用格式化JS代码输出方式。比如填充效果

	int fillIndex = UniPageControl_Fill->ActivePageIndex;
	if(fillIndex > 1) {
		UnicodeString colorStopsString = UniEdit_ColorStops_Linear->Text;
		if(fillIndex == 2)
			jsCode += THelper::FormatString(L"var gradient=ctx.createLinearGradient(%s);", UniEdit_LinearRect->Text.Trim());
		else {
			jsCode += THelper::FormatString(L"var gradient=ctx.createRadialGradient(%s);", UniEdit_RadiarRect->Text.Trim());
			colorStopsString = UniEdit_ColorStops_Radiar->Text;
		}
		TStrings * list = TTypeConvert::String2List(colorStopsString, L";");
		for(int i = 0; i < list->Count; ++i) {
			UnicodeString text = list->Strings[i];
			double pos = THelper::String::GetStringAt(text, L",", 0).Trim().ToDouble();
			UnicodeString value = THelper::String::GetStringAt(text, L",", 1).Trim();
			jsCode += THelper::FormatString(L"gradient.addColorStop(%3.2f, %s);", pos, value);
		}
		delete list;
	}

明天再处理下字体,就可以着手图元类库搭建。想想还有点期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值