private Tooltip() { tooltipWindow = new Window(new WindowOptions { Style = WindowStyle.Borderless, FixedSize = false, Visible = false, Centered = false, ToolWindow = true, }); tooltip = new ThemedFrame { LayoutCell = new LayoutCell { Ignore = true }, Layout = new StackLayout(), Nodes = { (tooltipText = new ThemedSimpleText { Padding = new Thickness(4) }), }, Presenter = new ThemedFramePresenter(Color4.Yellow.Transparentify(0.8f), Color4.Black) }; rootWidget = new ThemedInvalidableWindowWidget(tooltipWindow) { Padding = new Thickness(8), Layout = new VBoxLayout(), Nodes = { tooltip } }; }
internal static void Decorate(CommonEditBox eb) { var tw = eb.TextWidget; ThemedSimpleText.Decorate(tw); tw.ForceUncutText = false; eb.MinSize = Theme.Metrics.DefaultEditBoxSize; eb.MaxHeight = eb.MinHeight; tw.Localizable = false; tw.TrimWhitespaces = false; tw.OverflowMode = TextOverflowMode.Ignore; tw.Padding = Theme.Metrics.ControlsPadding; tw.VAlignment = VAlignment.Center; var editorParams = new EditorParams { MaxLines = 1, Scroll = eb.ScrollView, OffsetContextMenu = p => p + new Vector2(1f, tw.FontHeight + 1f), SelectAllOnFocus = true }; eb.Editor = new Editor(tw, editorParams, eb, eb.ScrollWidget); var vc = new VerticalLineCaret { Color = Theme.Colors.TextCaret }; eb.Updated += delta => { vc.Width = eb.Editor.OverwriteMode && !eb.Editor.HasSelection() ? tw.Font.Chars.Get(eb.Editor.CurrentChar(), tw.FontHeight)?.Width ?? 5f : 0f; if (eb.IsMouseOverThisOrDescendant() && WidgetContext.Current.MouseCursor == MouseCursor.Default) { var rect = new Rectangle { A = tw.ContentPosition, B = tw.ContentPosition + tw.ContentSize, }; if (rect.Contains(tw.LocalMousePosition())) { WidgetContext.Current.MouseCursor = MouseCursor.IBeam; } } }; new CaretDisplay( tw, eb.Editor.CaretPos, new CaretParams { CaretPresenter = vc }); new SelectionPresenter( tw, eb.Editor.SelectionStart, eb.Editor.SelectionEnd, new SelectionParams { Padding = Thickness.Zero, OutlineColor = Theme.Colors.TextSelection, Color = Theme.Colors.TextSelection }); eb.TabTravesable = new TabTraversable(); eb.CompoundPresenter.Add(new ThemedFramePresenter(Theme.Colors.WhiteBackground, Theme.Colors.ControlBorder)); eb.CompoundPostPresenter.Add(new Theme.KeyboardFocusBorderPresenter()); eb.CompoundPostPresenter.Add(new Theme.MouseHoverBorderPresenter()); eb.LateTasks.Add(Theme.MouseHoverInvalidationTask(eb)); }
public void Append(string text) { var lastLine = lines.Count > 0 ? lines[lines.Count - 1] : null; SimpleText lastNonSentinelLine = null; if (SquashDuplicateLines) { lastNonSentinelLine = lines.Count > 1 ? lines[lines.Count - 2] : null; } var newLines = text.Split('\n'); for (int i = 0; i < newLines.Length; i++) { var l = newLines[i]; if (SquashDuplicateLines) { if (lastNonSentinelLine != null && lastNonSentinelLine.Text == l) { lastNonSentinelLine.Components.Get <ThemedTextView.TextLineMultiplicity>().Multiplicity++; lastNonSentinelLine.Invalidate(); //TODO: invalidate window only if it isn't docked (GetRoot() as WindowWidget)?.Window.Invalidate(); continue; } } if (lastLine != null) { lastLine.Text += l; if (SquashDuplicateLines) { lastNonSentinelLine = lastLine; } lastLine = null; } else { var line = new ThemedSimpleText(l) { TrimWhitespaces = TrimWhitespaces }; line.TextProcessor += ProcessTextLine; line.Components.Add(new TextLineMultiplicity()); lines.Add(line); Behaviour.Content.AddNode(line); } } }
public ThemedDropDownList() { MinSize = Theme.Metrics.DefaultButtonSize; MaxHeight = Theme.Metrics.DefaultButtonSize.Y; TabTravesable = new TabTraversable(); var text = new ThemedSimpleText { Id = "TextWidget", VAlignment = VAlignment.Center, }; CompoundPresenter.Add(new DropDownListPresenter(this)); PostPresenter = new Theme.MouseHoverBorderPresenter(); LateTasks.Add(Theme.MouseHoverInvalidationTask(this)); Padding = Theme.Metrics.ControlsPadding; AddNode(text); text.ExpandToContainerWithAnchors(); text.X += 4; text.Width -= DropDownListPresenter.IconWidth + 4; }