示例#1
0
        void dropArrowThing_draw(IUnifiedDraw ud, USolidBrush brsh, UStroke strk)
        {
            var       ddr = dropArrowThing.DisplayRectangle;
            Rectangle rr  = ddr.Inflated(new Thickness(-1f));
            float     rad = (float)ddr.Size.height / 4f;

            brsh.color = new Color(0.6f);
            ud.FillRoundedRectangle(rr, rad, rad, brsh);
            brsh.color       = new Color(0.7f);
            rr               = ddr.Inflated(new Thickness(-.5f));
            strk.strokeWidth = 1f;
            ud.DrawRoundedRectangle(rr, rad, rad, brsh, strk);
            brsh.color = new Color(0);
            var drw = ddr.width;
            var drh = ddr.height;
            var drt = ddr.top;
            var drl = ddr.left;
            var p1  = new Point(drl + drw / 4f, drt + drh / 3f);
            var p2  = new Point(drl + 2f * drw / 4f, drt + 2f * drh / 3f);
            var p3  = new Point(drl + 3f * drw / 4f, drt + drh / 3f);

            strk.strokeWidth = 1.5f;
            ud.DrawLine(p1, p2, brsh, strk);
            ud.DrawLine(p2, p3, brsh, strk);
        }
示例#2
0
        public D2D_TextElements CreateNewTextElements(UText t)
        {
            var textLayout = new TextLayout(dwFact, t.text, new TextFormat(
                                                dwFact,
                                                t.font.name,
                                                t.font.bold ? FontWeight.Bold : FontWeight.Normal,
                                                t.font.italic ? FontStyle.Italic : FontStyle.Normal,
                                                TranslateFontSize(t.font.size))
            {
                ParagraphAlignment = Translate(t.valign),
                TextAlignment      = Translate(t.halign),
                WordWrapping       = t.wrapped ? WordWrapping.Wrap : WordWrapping.NoWrap
            }, t.width, t.height);

            // Set font ranges... textLayout just created, dont worry about any leftover ranges.
            foreach (var sr in t.SafeGetStyleRanges)
            {
                var tr = new TextRange(sr.start, sr.length);
                if (sr.fontOverride != null)
                {
                    UFont ft = (UFont)sr.fontOverride;
                    textLayout.SetFontFamilyName(ft.name, tr);
                    textLayout.SetFontSize(TranslateFontSize(ft.size), tr);
                    textLayout.SetFontStyle(ft.italic ? FontStyle.Italic : FontStyle.Normal, tr);
                    textLayout.SetFontWeight(ft.bold ? FontWeight.Bold : FontWeight.Normal, tr);
                }
                if (sr.fgOverride != null || sr.bgOverride != null)
                {
                    ClientTextEffect cte = new ClientTextEffect();
                    if (sr.fgOverride != null)
                    {
                        cte.fgBrush = CreateBrush(sr.fgOverride);
                    }
                    if (sr.bgOverride != null)
                    {
                        cte.bgBrush = CreateBrush(sr.bgOverride);
                    }
                    textLayout.SetDrawingEffect(cte, tr);
                }
            }

            // Set renderer with a default brush
            var def = new USolidBrush()
            {
                color = new Color(0)
            };
            var textRenderer = new D2D_ClientTextRenderer(realRenderer.renderTarget, new ClientTextEffect()
            {
                fgBrush = CreateBrush(def)
            });

            var ret = new D2D_TextElements(textLayout, textRenderer);

            realRenderer.renderTarget.Disposed += new EventHandler <EventArgs>((o, e) => t.Invalidate());
            return(ret);
        }
示例#3
0
        Brush CreateNewBrush(UBrush b)
        {
            Brush ret;

            if (b is USolidBrush)
            {
                // FIXME support brushProperties
                USolidBrush sb = b as USolidBrush;
                ret = new SolidColorBrush(realRenderer.renderTarget, D2DTr.tr(sb.color));
            }
            else if (b is ULinearGradientBrush)
            {
                // FIXME advanced features not used
                var lb = b as ULinearGradientBrush;
                LinearGradientBrush lgb = new LinearGradientBrush(realRenderer.renderTarget,
                                                                  new LinearGradientBrushProperties()
                {
                    StartPoint = D2DTr.tr(lb.point1),
                    EndPoint   = D2DTr.tr(lb.point2)
                },
                                                                  new GradientStopCollection(realRenderer.renderTarget,
                                                                                             new GradientStop[] {
                    new GradientStop()
                    {
                        Color = D2DTr.tr(lb.color1), Position = 0f
                    },
                    new GradientStop()
                    {
                        Color = D2DTr.tr(lb.color2), Position = 1f
                    }
                },
                                                                                             Gamma.StandardRgb,
                                                                                             ExtendMode.Clamp)
                                                                  );
                ret = lgb;
            }
            else
            {
                throw new NotImplementedException();
            }
            // Extra invalidation condition besides colors changeing etc as handled by the ObjStore descendants:  renderTarget disposed (eg resize).
            realRenderer.renderTarget.Disposed += new EventHandler <EventArgs>((o, e) => b.Invalidate());
            return(ret);
        }
示例#4
0
        public void PlotGeoElementStartpointisend()
        {
            Point       sp = new Point(0, 0);
            ULine       l  = new ULine(new Point(1, 1));
            USolidBrush sb = new USolidBrush()
            {
                color = new Color(1, 1, 1, 1)
            };

            mockedDraw.PlotGeoElement(ref sp, l, sb, false);
            Assert.AreEqual(sp.X, 1);
            Assert.AreEqual(sp.Y, 1);
            buf.ResetBuffer();

            var a = new UArc(new Point(5, 4), new Size(3, 3), true, false, 12f);

            mockedDraw.PlotGeoElement(ref sp, a, sb, false);
            Assert.AreEqual(sp.X, 5);
            Assert.AreEqual(sp.Y, 4);
            buf.ResetBuffer();
        }
示例#5
0
        Brush CreateNewBrush(UBrush b)
        {
            // FIXME can use PathGradientBrush, d2d just has gradientbrush...
            Brush ret;

            if (b is USolidBrush)
            {
                // FIXME support brushProperties
                USolidBrush sb = b as USolidBrush;
                ret = new SolidBrush(SDGTr.tr(sb.color));
            }
            else if (b is ULinearGradientBrush)
            {
                var lb = b as ULinearGradientBrush;
                ret = new LinearGradientBrush(SDGTr.trF(lb.point1), SDGTr.trF(lb.point2), SDGTr.tr(lb.color1), SDGTr.tr(lb.color2));
            }
            else
            {
                throw new NotImplementedException();
            }
            return(ret);
        }
示例#6
0
文件: Button.cs 项目: windygu/noForms
        void Init()
        {
            brushLine = new USolidBrush()
            {
                color = buttonColor
            };
            if (type == ButtonType.Basic)
            {
                brushFill = new USolidBrush()
                {
                    color = buttonColor
                }
            }
            ;
            if (type == ButtonType.Win8)
            {
                brushFill = new ULinearGradientBrush()
                {
                    color1 = new Color(229f / 255f),
                    point1 = new Point(DisplayRectangle.width / 2, DisplayRectangle.bottom),
                    color2 = new Color(240f / 255f),
                    point2 = new Point(DisplayRectangle.width / 2, DisplayRectangle.top)
                }
            }
            ;
            brushText = new USolidBrush()
            {
                color = textColor
            };
            SetBrushColors();
        }

        void SetBrushColors()
        {
            bool focus = focusManager.FocusGet(this);

            if (type == ButtonType.Basic)
            {
                switch (state)
                {
                case ButtonControlState.Normal:
                    (brushLine as USolidBrush).color = buttonColor.Scale(focus ? -0.1f : -0.7f);
                    (brushFill as USolidBrush).color = buttonColor;
                    break;

                case ButtonControlState.Hover:
                    (brushLine as USolidBrush).color = buttonColor.Scale(focus ? -0.1f : -0.7f);
                    (brushFill as USolidBrush).color = buttonColor.Scale(0.3f);
                    break;

                case ButtonControlState.Click:
                    (brushLine as USolidBrush).color = buttonColor.Scale(-0.1f);
                    (brushFill as USolidBrush).color = buttonColor.Scale(0.5f);
                    break;
                }
            }
            if (type == ButtonType.Win8)
            {
                switch (state)
                {
                case ButtonControlState.Normal:     // Always this grey normally
                    (brushLine as USolidBrush).color           = focus ? buttonColor.Add(51f - 96f, 153f - 150f, 255f - 191f, 255) : new Color(172f / 255f);
                    (brushFill as ULinearGradientBrush).color1 = new Color(229f / 255f);
                    (brushFill as ULinearGradientBrush).color2 = new Color(240f / 255f);
                    break;

                case ButtonControlState.Hover:     // hover related to theme color
                    (brushLine as USolidBrush).color           = buttonColor.Add(126f - 96f, 153f - 180f, 234f - 191f, 255);
                    (brushFill as ULinearGradientBrush).color1 = buttonColor.Add(220f - 96f, 236f - 150f, 252f - 191f, 255);
                    (brushFill as ULinearGradientBrush).color2 = buttonColor.Add(236f - 96f, 244f - 150f, 252f - 191f, 255);
                    break;

                case ButtonControlState.Click:
                    (brushLine as USolidBrush).color           = buttonColor.Add(86f - 96f, 157f - 180f, 229f - 191f, 255);
                    (brushFill as ULinearGradientBrush).color1 = buttonColor.Add(129f - 96f, 224f - 150f, 252f - 191f, 255);
                    (brushFill as ULinearGradientBrush).color2 = buttonColor.Add(218f - 96f, 236f - 150f, 252f - 191f, 255);
                    break;
                }
            }
        }

        Point aof(Point dp)
        {
            dp.X += DisplayRectangle.left;
            dp.Y += DisplayRectangle.top;
            return(dp);
        }