using System; using HDL_ON.DriverLayer; using HDL_ON.Entity; using Shared; namespace HDL_ON.UI { public partial class RGBPage { /// /// 更新功能状态 /// public static void UpdataStates(Function updateTemp) { Application.RunOnMainThread((() => { try { if (bodyView == null) return; if (updateTemp.spk == bodyView.function.spk && updateTemp.sid == bodyView.function.sid) { if (updateTemp.trait_on_off.curValue.ToString() == "on") { //解决部分安卓手机,刷新图片时会变小问题 if (bodyView.colorPicker.ColorImagePath != "FunctionIcon/Light/ColorWheel.png") { bodyView.colorPicker.ColorImagePath = "FunctionIcon/Light/ColorWheel.png"; } bodyView.dimmerBar.ProgressBarColor = CSS.CSS_Color.AuxiliaryColor1; bodyView.btnSwitch.IsSelected = true; if (!bodyView.onDimmerBar) { bodyView.dimmerBar.Progress = Convert.ToInt32(updateTemp.GetAttrState(FunctionAttributeKey.Brightness)); } } //状态一样时,不再刷新视图 else if (updateTemp.trait_on_off.curValue.ToString() == "off" && bodyView.btnSwitch.IsSelected == true) { //解决部分安卓手机,刷新图片时会变小问题 if (bodyView.colorPicker.ColorImagePath != "FunctionIcon/Light/ColorWheelGray.png") { bodyView.colorPicker.ColorImagePath = "FunctionIcon/Light/ColorWheelGray.png"; } //bodyView.colorPicker.ColorImagePath = "FunctionIcon/Light/ColorWheelGray.png"; bodyView.dimmerBar.ProgressBarColor = CSS.CSS_Color.PromptingColor2; bodyView.btnSwitch.IsSelected = false; //色盘的圆点隐藏 bodyView.btnWhiteRound.Visible = false; } bodyView.btnCurColor.BackgroundColor = (uint)(0xFF000000 + bodyView.lightTemp.GetRGBcolor(updateTemp.GetAttrState(FunctionAttributeKey.RGB))); bodyView.lastColor = bodyView.lightTemp.GetRGBbytes(updateTemp); if (bodyView.lightTemp.GetRGBcolor(updateTemp.GetAttrState(FunctionAttributeKey.RGB)) == 16777215 && bodyView.btnCurColor.BorderColor != 0x00000000) { bodyView.btnCurColor.BorderColor = CSS.CSS_Color.PromptingColor2; } else { bodyView.btnCurColor.BorderColor = 0x00000000; } } } catch (Exception ex) { MainPage.Log($"{bodyView.GetType().Name } UpdataStates error : {ex.Message}"); } })); } void LoadEventList() { LoadColorChangeEvent(); LoadCollectionEvent(); LoadSwitchEvent(); LoadEvent_BackCenterColor(); LoadEvent_DimmerBar(); LoadEvet_ChangeFadeTime(); //回退刷新信息事件 actionRefresh = () => { btnFunctionName.Text = btnFunctionName_Out.Text = function.name; btnFromFloor_Out.Text = btnFromFoorAndRoom.Text = function.GetRoomListName(); }; } /// /// 颜色变化事件 /// void LoadColorChangeEvent() { DateTime colorChangeTime = DateTime.MinValue; //bool send = false; //当前点击的【点】是否正确 bool pointIsRight = false; //圆的半径(考虑边界,需要设置它的半径比较小一点) int circleR = colorPicker.Width / 2 - Application.GetRealWidth(12); colorPicker.ColorChaged += (sender2, e2) => { if (function.trait_on_off.curValue.ToString() == "off" || pointIsRight == false) { //pointIsRight:点的区域不是圆盘内 return; } //if (send) //{ lastColor = e2; // send = false; //} }; //colorPicker.MouseUpEventHandler += (sender, e) => { // send = true; //}; colorPicker.MouseDownEventHandler += (sender, e) => { if (function.trait_on_off.curValue.ToString() == "off") { return; } pointIsRight = this.CheckPoint(circleR, colorPicker.Width / 2, colorPicker.Height / 2, (int)e.X, (int)e.Y); if (pointIsRight == false) { //点的区域不是圆盘内 return; } //显示白点 btnWhiteRound.X = (int)e.X - btnWhiteRound.Width / 2; btnWhiteRound.Y = (int)e.Y - btnWhiteRound.Height / 2; if (btnWhiteRound.Visible == false) { btnWhiteRound.Visible = true; } }; colorPicker.MouseMoveEventHandler += (sender, e) => { //当鼠标点下事件处理 colorPicker.MouseDownEventHandler(sender, e); //if (function.trait_on_off.curValue.ToString() == "off") //{ // return; //} //pointIsRight = this.CheckPoint(circleR, colorPicker.Width / 2, colorPicker.Height / 2, (int)e.X, (int)e.Y); //if (pointIsRight == false) //{ // //点的区域不是圆盘内 // return; //} ////显示白点 //btnWhiteRound.X = (int)e.X - btnWhiteRound.Width / 2; //btnWhiteRound.Y = (int)e.Y - btnWhiteRound.Height / 2; //if (btnWhiteRound.Visible == false) //{ // btnWhiteRound.Visible = true; //} //btnCurColor.BackgroundColor = (uint)(0xFF000000 + lightTemp.GetRGBcolor(function)); }; var colorChangeEvent = new System.Threading.Thread(() => { while (this.Parent != null) { if (function.trait_on_off.curValue.ToString() == "off" || pointIsRight == false) { //pointIsRight:点的区域不是圆盘内 continue; } for (int i = 0; i < 3; i++) { if (lightTemp.GetRGBbytes(function)[i].ToString() != lastColor[i].ToString()) { function.SetAttrState(FunctionAttributeKey.RGB, lastColor); lightTemp.SetRGBcolor(lastColor, function); System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.RGB, lightTemp.GetRGBcolorString(function)); Control.Ins.SendWriteCommand(function, d,false,0); break; } } System.Threading.Thread.Sleep(200); } }); colorChangeEvent.IsBackground = true; colorChangeEvent.Start(); } /// /// 收藏功能按钮事件 /// void LoadCollectionEvent() { btnCollection.MouseUpEventHandler += (sender, e) => { btnCollection.IsSelected = function.collect = btnCollection_Out.IsSelected = !btnCollection.IsSelected; function.CollectFunction(); }; } /// /// 灯光调光事件 /// void LoadEvent_DimmerBar() { dimmerBar.OnStartTrackingTouchEvent = (sender, e)=>{ onDimmerBar = true; }; dimmerBar.OnStopTrackingTouchEvent = (sender, e) => { new System.Threading.Thread(() => { System.Threading.Thread.Sleep(200); onDimmerBar = false; }) { IsBackground = true }.Start(); function.SetAttrState(FunctionAttributeKey.Brightness, dimmerBar.Progress); System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.Brightness, dimmerBar.Progress.ToString()); Control.Ins.SendWriteCommand(function, d); }; dimmerBar.OnProgressChangedEvent = (sender, e) => { //function.fadeTime = 0; //if (!btnSwitch.IsSelected) //{ // dimmerBar.ProgressBarColor = CSS.CSS_Color.AuxiliaryColor1; //} //btnSwitch.IsSelected = e > 0 ? true : false; //function.brightness = e; //function.trait_on_off.curValue = e > 0 ? "on" : "off"; //if (e == 0 || e == 100) //{ // System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); // d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString()); // Control.Ins.SendWriteCommand(function, d); //} //else //{ // if (200 < (DateTime.Now - function.refreshTime).TotalMilliseconds) // { // function.refreshTime = DateTime.Now; // new System.Threading.Thread(() => // { // //Control.Send(CommandType_A.write, function); // System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); // d.Add(FunctionAttributeKey.Brightness, function.brightness.ToString()); // Control.Ins.SendWriteCommand(function, d); // }) // { IsBackground = true }.Start(); // } // else // { // MainPage.Log("skip dimmer control!!"); // } //} }; } /// /// 修改灯光渐变时间 /// void LoadEvet_ChangeFadeTime() { } /// /// 加载开关事件 /// void LoadSwitchEvent() { btnSwitch.MouseUpEventHandler += (sender, e) => { btnSwitch.IsSelected = !btnSwitch.IsSelected; dimmerBar.ProgressBarColor = btnSwitch.IsSelected ? CSS.CSS_Color.AuxiliaryColor1 : CSS.CSS_Color.PromptingColor2; bodyView.colorPicker.ColorImagePath = btnSwitch.IsSelected ? "FunctionIcon/Light/ColorWheel.png" : "FunctionIcon/Light/ColorWheelGray.png"; new System.Threading.Thread(() => { function.trait_on_off.curValue = btnSwitch.IsSelected ? "on" : "off"; System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.OnOff, function.trait_on_off.curValue.ToString()); d.Add(FunctionAttributeKey.FadeTime, function.GetAttrState(FunctionAttributeKey.FadeTime)); if (btnSwitch.IsSelected) { if(function.lastBrightness == 0) { function.lastBrightness = 100; dimmerBar.Progress = 100; } d.Add(FunctionAttributeKey.Brightness, function.lastBrightness.ToString()); } else { function.lastBrightness = Convert.ToInt32(function.GetAttrState(FunctionAttributeKey.Brightness)); } Control.Ins.SendWriteCommand(function, d); }) { IsBackground = true }.Start(); }; } /// /// 恢复默认颜色 /// void LoadEvent_BackCenterColor() { btnRestoredPoint.MouseUpEventHandler = (sender, e) => { if(function.trait_on_off.curValue.ToString() == "off") { return; } btnWhiteRound.Visible = true; btnWhiteRound.Gravity = Gravity.Center; lightTemp.SetRGBcolor(new byte[] { 255, 255, 255 },function); btnCurColor.BackgroundColor = 0xFFFFFFFF; btnCurColor.BorderColor = CSS.CSS_Color.PromptingColor2; System.Collections.Generic.Dictionary d = new System.Collections.Generic.Dictionary(); d.Add(FunctionAttributeKey.RGB, lightTemp.GetRGBcolorString(function)); Control.Ins.SendWriteCommand(function, d); lastColor = new byte[] { 255, 255, 255 }; }; } /// /// 检测点击点 /// /// 圆的半径 /// 圆心X轴 /// 圆心Y轴 /// 点击点的X轴 /// 点击点的Y轴 /// private bool CheckPoint(int circleR, int circleX, int circleY, int pointX, int pointY) { int dwidth = circleX - pointX; if (dwidth < 0) { dwidth *= -1; } int dHeight = circleY - pointY; if (dHeight < 0) { dHeight *= -1; } //根据三角函数,求三角形的斜边长 int dlength = dwidth * dwidth + dHeight * dHeight; //半径长度(不开方,所以是按平方算) circleR *= circleR; if (dlength < circleR) { //如果组成的三角形并没有长过半径,则代表还在圆内(不允许点边界) return true; } return false; } } }