コード例 #1
0
        void SetIdentify(bool enable)
        {
            ResponseObject.UseConfigureDisplay = enable;
            if (enable)
            {
                // Generate configuration image;
                SignRender r = new SignRender();
                r.SetConfiguration(ResponseObject.Target.CurrentConfiguration());

                r.Clear();

                lock (Elements)
                {
                    int index = 1;
                    foreach (EditElement e in Elements)
                    {
                        string text = index.ToString();

                        SizeF sz = r.MeasureText(12, text);

                        r.DrawTextAbsolute(12, text, Color.White,
                                           e.Location.X + (e.Location.Width - sz.Width) / 2,
                                           e.Location.Y + (e.Location.Height - sz.Height) / 2);

                        index++;
                    }
                }

                UpdateFrameInternal(r.SignOutput);
                ResponseObject.Target.SendImage(r.SignOutput);
            }
        }
コード例 #2
0
ファイル: SignAnimate.cs プロジェクト: sgstair/ledsign
        void FrameTick(object context)
        {
            lock (this)
            {
                if (Render == null)
                {
                    return;
                }

                Render.Clear();

                if (ContentElements != null)
                {
                    foreach (SignElement e in ContentElements)
                    {
                        e.SetContext(Render);
                    }

                    // Advance anmiation
                    if (DelayTime > 0)
                    {
                        DelayTime--;
                    }
                    else
                    {
                        if (AnimateFirstElement >= ContentElements.Length)
                        {
                            DelayTime            = RecycleDelay;
                            AnimateFirstElement  = 0;
                            AnimateElementOffset = 0;
                        }
                        else
                        {
                            // Scrolling
                            SignElement firstElement = ContentElements[AnimateFirstElement];
                            AnimateElementOffset--;
                            int elementLocation = Render.Configuration.Width + AnimateElementOffset;
                            if (elementLocation + firstElement.Width < 0)
                            {
                                // Advance to next element
                                AnimateFirstElement++;
                                AnimateElementOffset += firstElement.Width + ElementSpacing;
                            }

                            DelayTime = FramesPerScroll - 1;
                        }
                    }

                    // Render
                    ElementAnimation animMode = ElementAnimation.None;
                    int offset = 0;
                    for (int i = AnimateFirstElement; i < ContentElements.Length; i++)
                    {
                        SignElement curElement = ContentElements[i];
                        if (animMode == ElementAnimation.None)
                        {
                            animMode = curElement.Animation;
                        }

                        if (animMode != curElement.Animation)
                        {
                            break;
                        }

                        Render.ElementXOffset = Render.Configuration.Width + AnimateElementOffset + offset;
                        Render.ElementYOffset = 0;

                        if (Render.ElementXOffset >= Render.Configuration.Width)
                        {
                            break;
                        }

                        curElement.Render(Render);

                        offset += curElement.Width + ElementSpacing;
                    }
                }
                SendFrameComplete();


                if (ContentElements != null)
                {
                    // Rebuild content list if necessary. Do this after rendering to reduce jitter.
                    // May not be that important. (measure later)
                    bool needRebuild = false;
                    foreach (ISignContent sc in ContentSources)
                    {
                        if (sc.HasUpdate)
                        {
                            needRebuild = true;
                        }
                    }

                    if (needRebuild)
                    {
                        ContentElements = ContentSources.SelectMany((s) => s.GetElements()).ToArray();
                    }
                }
            }
        }