diff --git a/renderdocui/Code/PersistantConfig.cs b/renderdocui/Code/PersistantConfig.cs index 81be783437..3ca7d1e875 100644 --- a/renderdocui/Code/PersistantConfig.cs +++ b/renderdocui/Code/PersistantConfig.cs @@ -107,6 +107,8 @@ public System.Drawing.Font PreferredFont public DateTime DegradedLog_LastUpdate = new DateTime(2015, 01, 01); + public bool Tips_SeenFirst = false; + public bool AllowGlobalHook = false; public void SetupFormatting() diff --git a/renderdocui/Windows/Dialogs/TipsDialog.Designer.cs b/renderdocui/Windows/Dialogs/TipsDialog.Designer.cs index dc9316e145..d9a93e6cbb 100644 --- a/renderdocui/Windows/Dialogs/TipsDialog.Designer.cs +++ b/renderdocui/Windows/Dialogs/TipsDialog.Designer.cs @@ -37,7 +37,7 @@ private void InitializeComponent() this.tipTitle = new System.Windows.Forms.Label(); this.tipPicture = new System.Windows.Forms.PictureBox(); this.tipLink = new System.Windows.Forms.LinkLabel(); - this.tipText = new System.Windows.Forms.TextBox(); + this.tipText = new System.Windows.Forms.Label(); close = new System.Windows.Forms.Button(); tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); @@ -103,6 +103,7 @@ private void InitializeComponent() tableLayoutPanel1.SetColumnSpan(this.tipBox, 3); this.tipBox.Controls.Add(tableLayoutPanel2); this.tipBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.tipBox.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.tipBox.Location = new System.Drawing.Point(3, 3); this.tipBox.Name = "tipBox"; this.tipBox.Size = new System.Drawing.Size(544, 286); @@ -134,10 +135,10 @@ private void InitializeComponent() this.tipTitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.tipTitle.AutoSize = true; - this.tipTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.tipTitle.Font = new System.Drawing.Font("Arial", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.tipTitle.Location = new System.Drawing.Point(3, 0); this.tipTitle.Name = "tipTitle"; - this.tipTitle.Size = new System.Drawing.Size(532, 25); + this.tipTitle.Size = new System.Drawing.Size(532, 24); this.tipTitle.TabIndex = 0; this.tipTitle.Text = "Tip #X: Tip Title"; this.tipTitle.TextAlign = System.Drawing.ContentAlignment.TopCenter; @@ -155,10 +156,11 @@ private void InitializeComponent() // tipLink // this.tipLink.AutoSize = true; + this.tipLink.Font = new System.Drawing.Font("Arial", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.tipLink.Location = new System.Drawing.Point(7, 244); this.tipLink.Margin = new System.Windows.Forms.Padding(7); this.tipLink.Name = "tipLink"; - this.tipLink.Size = new System.Drawing.Size(141, 13); + this.tipLink.Size = new System.Drawing.Size(164, 16); this.tipLink.TabIndex = 3; this.tipLink.TabStop = true; this.tipLink.Text = "https://renderdoc.org/tips/1"; @@ -166,13 +168,13 @@ private void InitializeComponent() // // tipText // - this.tipText.BackColor = System.Drawing.SystemColors.Window; + this.tipText.BackColor = System.Drawing.Color.Transparent; this.tipText.Dock = System.Windows.Forms.DockStyle.Fill; - this.tipText.Location = new System.Drawing.Point(3, 28); - this.tipText.Multiline = true; + this.tipText.Font = new System.Drawing.Font("Arial", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.tipText.Location = new System.Drawing.Point(3, 24); this.tipText.Name = "tipText"; - this.tipText.ReadOnly = true; - this.tipText.Size = new System.Drawing.Size(532, 146); + this.tipText.Padding = new System.Windows.Forms.Padding(10); + this.tipText.Size = new System.Drawing.Size(532, 153); this.tipText.TabIndex = 4; this.tipText.Text = "Tip Text"; // @@ -206,7 +208,7 @@ private void InitializeComponent() private System.Windows.Forms.Label tipTitle; private System.Windows.Forms.PictureBox tipPicture; private System.Windows.Forms.LinkLabel tipLink; - private System.Windows.Forms.TextBox tipText; + private System.Windows.Forms.Label tipText; private System.Windows.Forms.Button randomTip; } } \ No newline at end of file diff --git a/renderdocui/Windows/Dialogs/TipsDialog.cs b/renderdocui/Windows/Dialogs/TipsDialog.cs index f71b8c4fd0..c10970a861 100644 --- a/renderdocui/Windows/Dialogs/TipsDialog.cs +++ b/renderdocui/Windows/Dialogs/TipsDialog.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Text; using System.Windows.Forms; +using renderdocui.Code; namespace renderdocui.Windows.Dialogs { @@ -14,26 +15,28 @@ public partial class TipsDialog : Form { struct Tip { - public Tip(string tt, string tx, Bitmap im) + public Tip(string tt, string tx) { title = tt; text = tx; - image = im; } public string title; public string text; - public Bitmap image; } private List m_Tips = new List(); + private Core m_Core; + private Random m_Rand = new Random(); private int m_CurrentTip = 0; - public TipsDialog() + public TipsDialog(Core core) { InitializeComponent(); + m_Core = core; + Icon = global::renderdocui.Properties.Resources.icon; /////////////////////////////////////////////////////////// @@ -46,30 +49,147 @@ public TipsDialog() // Tip 1 m_Tips.Add(new Tip( "Talk to me!", - "RenderDoc is a labour of love and developed entirely in my spare time. If you run into a bug, have a" + - "feature request or just have a question about it, please feel free to get in touch and I'm always" + - "happy to talk and help out in any way I can - baldurk@baldurk.org. " + - "", - null)); + "RenderDoc is a labour of love and has been developed from scratch entirely in my spare time. If you run into a bug, have a feature request or just have a question, please feel free to get in touch and I'm always happy to talk and help out in any way I can - baldurk@baldurk.org.")); // Tip 2 m_Tips.Add(new Tip( "Quick channel toggling", - "You can quickly toggle between RGB and Alpha in the Texture Viewer by right clicking on A - alpha." + - "In general right clicking on a channel will toggle between only showing that channel, and showing" + - "all other channels except it. " + - "", - null)); + "Right clicking on a channel button in the texture viewer will select it alone. If it is already the only channel selected, the meaning is inverted and all others will be selected. " + Environment.NewLine + " " + Environment.NewLine + "This is most useful for quickly toggling between RGB and Alpha-only views.")); // Tip 3 m_Tips.Add(new Tip( - "Quick autofit follow", - "If you right click on the 'autofit' wand in the texture viewer, it will be locked on until you right" + - "click again. This means when you change texture or step through events, it will re-fit the texture" + - "continuously. This can be useful if you are e.g. jumping between a texture with a very compressed" + - "range like a depth texture and a normal render target. " + - "", - null)); + "Quick range autofitting", + "The magic wand auto-fitting button in the texture viewer automatically calculates the min and max values of any visible channel in the texture, and rescales the visible range to include them. " + Environment.NewLine + " " + Environment.NewLine + "If you right click on it, it will toggle on a mode to automatically rescale every time the viewed texture changes. " + Environment.NewLine + "")); + + // Tip 4 + m_Tips.Add(new Tip( + "Choosing mesh elements to visualise", + "In the mesh output pane, you can right click on any of the element columns to select that element as either position or secondary property to render. This way you can view a mesh in UV space, or visualise normals.")); + + // Tip 5 + m_Tips.Add(new Tip( + "Visualising secondary mesh properties", + "In the mesh output pane, you can select an element as 'secondary', and in the solid shading dropdown choosing secondary will display the element as RGB colour on top of the mesh.")); + + // Tip 6 + m_Tips.Add(new Tip( + "Register highlighting in the shader debugger", + "While debugging a shader, clicking on a register or constant buffer variable in the disassembly will highlight all other uses of that register or variable in the disassembly. It will also highlight the matching row in the watch windows.")); + + // Tip 7 + m_Tips.Add(new Tip( + "Shader register value display", + "If you want to see to see a register reinterpreted as different types, you can hover over it either in the disassembly or in the watch windows. A tooltip will show it interpreted as float, uint decimal, int decimal or hexadecimal.")); + + // Tip 8 + m_Tips.Add(new Tip( + "Custom shader watch expressions", + "In addition to the pre-filled watch windows while shader debugging, you can also enter custom watch expressions. This takes the form of e.g. r0.xyz. You can append ,x or ,b to specify the type - full list in the docs. " + Environment.NewLine + "")); + + // Tip 9 + m_Tips.Add(new Tip( + "Shader debugger float/int toggle", + "By default register values are shown as floats, but you can toggle this to default to ints either in the shader debugger toolbar, or by right clicking and toggling int/float display. " + Environment.NewLine + "")); + + // Tip 10 + m_Tips.Add(new Tip( + "D3D11 shader debug information", + "You'll get the best results in RenderDoc by stripping as little as possible from D3D11 shaders. Reflection data is used all over the place to produce a nicer debugging experience. " + Environment.NewLine + "")); + + // Tip 11 + m_Tips.Add(new Tip( + "Shader editing & Replacement", + "RenderDoc has the ability to edit and replace shaders and see the results live in the replay. On the pipeline state view, click the edit icon next to the shader. If source is available, it will be compiled, otherwise an empty stub with resources will be generated. " + Environment.NewLine + " " + Environment.NewLine + "The shader will be replaced everywhere it is used in the frame, the original will be restored when the edit window is closed. " + Environment.NewLine + "")); + + // Tip 12 + m_Tips.Add(new Tip( + "Linear/Gamma display of textures", + "RenderDoc interprets all textures in gamma space - even if the data is linear such as a normal map. This is by convention, since typically external image viewers will display a normal map as gamma data. This can be overridden by toggling the gamma button in the texture viewer. " + Environment.NewLine + "")); + + // Tip 13 + m_Tips.Add(new Tip( + "Seeing texture usage in a capture", + "RenderDoc has a list of how each texture is bound and used - whether as a shader resource, an output target, or a copy source. When the texture is active in the texture viewer this usage will be displayed on the timeline bar at the top. " + Environment.NewLine + " " + Environment.NewLine + "You can also right click on the thumbnails in the texture viewer to see a list of this usage, and clicking any entry will jump to that event. " + Environment.NewLine + "")); + + // Tip 14 + m_Tips.Add(new Tip( + "Custom buffer formatting", + "When opening a raw view of a buffer, such as a vertex buffer or compute read/write buffer resource, you can apply custom formatting to it to dictate the layout of the elements in typical shader syntax. " + Environment.NewLine + " " + Environment.NewLine + "This formatting is also available for constant buffers to override the layout reflected from the shader. " + Environment.NewLine + "")); + + // Tip 15 + m_Tips.Add(new Tip( + "Pipeline HTML export", + "The pipeline view contains an HTML export function, which dumps the raw state of the entire pipeline out to a specified file. This can be useful for comparison between two events, or for having all information available in a unified text format. " + Environment.NewLine + "")); + + // Tip 16 + m_Tips.Add(new Tip( + "Python scripting", + "RenderDoc supports some amount of Python scripting. Open up the Python shell in the UI to either use it interactively or load and execute python scripts. " + Environment.NewLine + " " + Environment.NewLine + "The 'renderdoc' object is an instance of the Core class - see the RenderDoc source for more information.")); + + // Tip 17 + m_Tips.Add(new Tip( + "Pixel history view", + "RenderDoc supports a pixel history view, showing the list of all modification events that happened to a specified pixel. To launch it, simply pick the pixel you would like to view the history of in the texture viewer, and click the 'history' button underneath the zoomed-in pixel context. " + Environment.NewLine + " " + Environment.NewLine + "Each event will show up red or green depending on whether it affected or didn't affect the pixel. By expanding the event, you can see the possibly several primitives within the draw that overdrew the pixel. " + Environment.NewLine + "")); + + // Tip 18 + m_Tips.Add(new Tip( + "List of active textures", + "On the texture viewer, the texture list button under the 'Actions' section will open a filterable list of all texture resources. Clicking on any of the entries will open a locked tab of that texture, always showing the contents of the texture at the current event regardless of whether or not it is bound to the pipeline. " + Environment.NewLine + "")); + + // Tip 19 + m_Tips.Add(new Tip( + "Locked texture tabs", + "You can open a locked texture tab from the texture list, or by right or double clicking on a texture's thumbnail. " + Environment.NewLine + " " + Environment.NewLine + "With a locked tab of a texture, that tab will always show that texture, regardless of what is bound to the pipeline. This way you can track the updates of a texture through binds and unbinds, e.g. ping-pong rendertarget use. " + Environment.NewLine + "")); + + // Tip 20 + m_Tips.Add(new Tip( + "Gathering of per-event callstacks", + "RenderDoc is able to gather callstacks either per-drawcall or per-API event. You can do this by enabling the option before launching an application capture. " + Environment.NewLine + " " + Environment.NewLine + "When loading the log, initially the callstacks will not be available until symbols are resolved. Go to tools -> resolve symbols to load up the pdbs matching the modules from the application. " + Environment.NewLine + "")); + + // Tip 21 + m_Tips.Add(new Tip( + "Texture debugging overlays", + "In the texture viewer, you can select from several helpful debugging overlays over the current view. This can show wireframe or solid coloour overlays of the current drawcall, as well as showing depth pass/fail or even representing quad overdraw as a heatmap. " + Environment.NewLine + "")); + + // Tip 22 + m_Tips.Add(new Tip( + "Custom texture display shaders", + "RenderDoc supports writing custom shaders to decode the viewed texture, which can be useful to e.g. colourise stencil values or decode a packed gbuffer texture. " + Environment.NewLine + " " + Environment.NewLine + "In the toolbar in the texture viewer, select custom instead of RGBA on the left side, and use the UI to create a new shader. The docs contain full listings of available constants and resources to bind. " + Environment.NewLine + "")); + + // Tip 23 + m_Tips.Add(new Tip( + "Texture histogram", + "RenderDoc can display a channel histogram showing the distribution of values within the visible range. Simply click the graph button on the texture viewer to the right of the range control, and it will expand to show the histogram. " + Environment.NewLine + "")); + + // Tip 24 + m_Tips.Add(new Tip( + "Attaching to a running instance", + "If you have launched a program via RenderDoc or your program integrates RenderDoc, the UI can connect to it once it is running via File -> Attach to Running Instance, and everything works as if you had launched it. " + Environment.NewLine + " " + Environment.NewLine + "You can even do this across a network, by adding a remote IP or hostname. You will connect over the network and can remotely trigger captures - any files will be copied back across the network, to be saved and replayed locally as normal. " + Environment.NewLine + "")); + + // Tip 25 + m_Tips.Add(new Tip( + "Event browser bookmarks", + "In the event browser you can bookmark useful events by clicking the asterisk. This can let you quickly jump back and forth through the log between important points. " + Environment.NewLine + " " + Environment.NewLine + "When you have some bookmarks, shortcut buttons will appear in a small bar at the top of the browser, and the shortcut keys Ctrl-1 through Ctrl-0 jump to the first 10 bookmarks - these shortcuts are global regardless of which RenderDoc window is currently in focus. " + Environment.NewLine + "")); + + // Tip 26 + m_Tips.Add(new Tip( + "Mousewheel for scrolling", + "Anywhere you need to use the mousewheel to scroll, it will work simply by hovering over the panel and scrolling, no need to click to change focus. " + Environment.NewLine + "")); + + // Tip 27 + m_Tips.Add(new Tip( + "Event browser keyboard shortcuts", + "In the event browser Ctrl-F opens up the find bar, to locate an event by its name. Ctrl-G opens the jump-to-event to jump to the closest drawcall to a numbered event. Ctrl-B will toggle a bookmark at the current event. " + Environment.NewLine + "")); + + // Tip 28 + m_Tips.Add(new Tip( + "Mesh VS Output camera settings", + "The VS Output pane in the mesh output window will attempt to guess your projection matrix to unproject the vertices into camera space. It assumes a perspective projection and guesses the near and far planes, and matches the aspect ratio to the current output target. " + Environment.NewLine + " " + Environment.NewLine + "If these parameters are incorrect - e.g. you are using an orthographic projection or the near/far guesses are wrong, you can override them by opening the view settings with the cog icon. " + Environment.NewLine + "")); + + // Tip 29 + m_Tips.Add(new Tip( + "Global process hook", + "Sometimes a particular program is difficult to launch directly through RenderDoc. In these cases, RenderDoc can install a global system hook that will insert a tiny shim DLL into every newly-created process on the system. This shim will identify if it is in the target application and either inject RenderDoc, or unload itself. " + Environment.NewLine + " " + Environment.NewLine + "Note: Since it is a global hook this is not without risks, only use if it's the only alternative, and read the documentation carefully. " + Environment.NewLine + "")); /////////////////////////////////////////////////////////// // This section of code is auto-generated. Modifications // @@ -77,7 +197,6 @@ public TipsDialog() // // // If you have a tip you'd like to add, email it to me. // /////////////////////////////////////////////////////////// - } private void LoadRandomTip(object sender, EventArgs e) @@ -88,6 +207,13 @@ private void LoadRandomTip(object sender, EventArgs e) while(m_CurrentTip == cur) m_CurrentTip = m_Rand.Next(m_Tips.Count); + // the first time, show the first tip about contacting me + if (!m_Core.Config.Tips_SeenFirst) + { + m_Core.Config.Tips_SeenFirst = true; + m_CurrentTip = 0; + } + LoadTip(); } @@ -100,16 +226,8 @@ private void LoadTip() tipText.Text = tip.text; tipLink.Text = String.Format("https://renderdoc.org/tips/{0}", m_CurrentTip + 1); - if (tip.image == null) - { - tipPicture.Image = null; - tipPicture.Visible = false; - } - else - { - tipPicture.Image = tip.image; - tipPicture.Visible = true; - } + tipPicture.Image = null; + tipPicture.Visible = false; } private void LoadNextTip(object sender, EventArgs e) diff --git a/renderdocui/Windows/MainWindow.Designer.cs b/renderdocui/Windows/MainWindow.Designer.cs index 458036f7aa..78eb1abc5a 100644 --- a/renderdocui/Windows/MainWindow.Designer.cs +++ b/renderdocui/Windows/MainWindow.Designer.cs @@ -28,21 +28,21 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - WeifenLuo.WinFormsUI.Docking.DockPanelSkin dockPanelSkin2 = new WeifenLuo.WinFormsUI.Docking.DockPanelSkin(); - WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin2 = new WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin(); - WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient4 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient8 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); - WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin2 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin(); - WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient9 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); - WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient5 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient10 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); - WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient11 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient12 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); - WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient6 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient13 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); - WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient14 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.DockPanelSkin dockPanelSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPanelSkin(); + WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin1 = new WeifenLuo.WinFormsUI.Docking.AutoHideStripSkin(); + WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient1 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripSkin(); + WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient2 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient2 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient3 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient1 = new WeifenLuo.WinFormsUI.Docking.DockPaneStripToolWindowGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient4 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient5 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.DockPanelGradient dockPanelGradient3 = new WeifenLuo.WinFormsUI.Docking.DockPanelGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient6 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); + WeifenLuo.WinFormsUI.Docking.TabGradient tabGradient7 = new WeifenLuo.WinFormsUI.Docking.TabGradient(); this.menuStrip1 = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.captureLogToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -100,6 +100,7 @@ private void InitializeComponent() this.viewLogFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.sendErrorReportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); + this.checkForUpdatesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.updateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); this.sourceOnGithubToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -113,7 +114,8 @@ private void InitializeComponent() this.statusProgress = new System.Windows.Forms.ToolStripProgressBar(); this.dockPanel = new WeifenLuo.WinFormsUI.Docking.DockPanel(); this.saveDialog = new System.Windows.Forms.SaveFileDialog(); - this.checkForUpdatesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); + this.showTipsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.menuStrip1.SuspendLayout(); this.toolStripContainer1.BottomToolStripPanel.SuspendLayout(); this.toolStripContainer1.ContentPanel.SuspendLayout(); @@ -548,6 +550,8 @@ private void InitializeComponent() this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.viewDocsToolStripMenuItem, this.viewLogFileToolStripMenuItem, + this.showTipsToolStripMenuItem, + this.toolStripSeparator12, this.sendErrorReportToolStripMenuItem, this.toolStripSeparator9, this.checkForUpdatesToolStripMenuItem, @@ -590,6 +594,13 @@ private void InitializeComponent() this.toolStripSeparator9.Name = "toolStripSeparator9"; this.toolStripSeparator9.Size = new System.Drawing.Size(189, 6); // + // checkForUpdatesToolStripMenuItem + // + this.checkForUpdatesToolStripMenuItem.Name = "checkForUpdatesToolStripMenuItem"; + this.checkForUpdatesToolStripMenuItem.Size = new System.Drawing.Size(192, 22); + this.checkForUpdatesToolStripMenuItem.Text = "Check for Updates"; + this.checkForUpdatesToolStripMenuItem.Click += new System.EventHandler(this.checkForUpdatesToolStripMenuItem_Click); + // // updateToolStripMenuItem // this.updateToolStripMenuItem.Enabled = false; @@ -705,52 +716,52 @@ private void InitializeComponent() this.dockPanel.Location = new System.Drawing.Point(0, 0); this.dockPanel.Name = "dockPanel"; this.dockPanel.Size = new System.Drawing.Size(1272, 727); - dockPanelGradient4.EndColor = System.Drawing.SystemColors.ControlLight; - dockPanelGradient4.StartColor = System.Drawing.SystemColors.ControlLight; - autoHideStripSkin2.DockStripGradient = dockPanelGradient4; - tabGradient8.EndColor = System.Drawing.SystemColors.Control; - tabGradient8.StartColor = System.Drawing.SystemColors.Control; - tabGradient8.TextColor = System.Drawing.SystemColors.ControlDarkDark; - autoHideStripSkin2.TabGradient = tabGradient8; - autoHideStripSkin2.TextFont = new System.Drawing.Font("Tahoma", 8.25F); - dockPanelSkin2.AutoHideStripSkin = autoHideStripSkin2; - tabGradient9.EndColor = System.Drawing.SystemColors.ControlLightLight; - tabGradient9.StartColor = System.Drawing.SystemColors.ControlLightLight; - tabGradient9.TextColor = System.Drawing.SystemColors.ControlText; - dockPaneStripGradient2.ActiveTabGradient = tabGradient9; - dockPanelGradient5.EndColor = System.Drawing.SystemColors.Control; - dockPanelGradient5.StartColor = System.Drawing.SystemColors.Control; - dockPaneStripGradient2.DockStripGradient = dockPanelGradient5; - tabGradient10.EndColor = System.Drawing.SystemColors.ControlLight; - tabGradient10.StartColor = System.Drawing.SystemColors.ControlLight; - tabGradient10.TextColor = System.Drawing.SystemColors.ControlText; - dockPaneStripGradient2.InactiveTabGradient = tabGradient10; - dockPaneStripSkin2.DocumentGradient = dockPaneStripGradient2; - dockPaneStripSkin2.TextFont = new System.Drawing.Font("Tahoma", 8.25F); - tabGradient11.EndColor = System.Drawing.SystemColors.ActiveCaption; - tabGradient11.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical; - tabGradient11.StartColor = System.Drawing.SystemColors.GradientActiveCaption; - tabGradient11.TextColor = System.Drawing.SystemColors.ActiveCaptionText; - dockPaneStripToolWindowGradient2.ActiveCaptionGradient = tabGradient11; - tabGradient12.EndColor = System.Drawing.SystemColors.Control; - tabGradient12.StartColor = System.Drawing.SystemColors.Control; - tabGradient12.TextColor = System.Drawing.SystemColors.ControlText; - dockPaneStripToolWindowGradient2.ActiveTabGradient = tabGradient12; - dockPanelGradient6.EndColor = System.Drawing.SystemColors.ControlLight; - dockPanelGradient6.StartColor = System.Drawing.SystemColors.ControlLight; - dockPaneStripToolWindowGradient2.DockStripGradient = dockPanelGradient6; - tabGradient13.EndColor = System.Drawing.SystemColors.InactiveCaption; - tabGradient13.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical; - tabGradient13.StartColor = System.Drawing.SystemColors.GradientInactiveCaption; - tabGradient13.TextColor = System.Drawing.SystemColors.InactiveCaptionText; - dockPaneStripToolWindowGradient2.InactiveCaptionGradient = tabGradient13; - tabGradient14.EndColor = System.Drawing.Color.Transparent; - tabGradient14.StartColor = System.Drawing.Color.Transparent; - tabGradient14.TextColor = System.Drawing.SystemColors.ControlDarkDark; - dockPaneStripToolWindowGradient2.InactiveTabGradient = tabGradient14; - dockPaneStripSkin2.ToolWindowGradient = dockPaneStripToolWindowGradient2; - dockPanelSkin2.DockPaneStripSkin = dockPaneStripSkin2; - this.dockPanel.Skin = dockPanelSkin2; + dockPanelGradient1.EndColor = System.Drawing.SystemColors.ControlLight; + dockPanelGradient1.StartColor = System.Drawing.SystemColors.ControlLight; + autoHideStripSkin1.DockStripGradient = dockPanelGradient1; + tabGradient1.EndColor = System.Drawing.SystemColors.Control; + tabGradient1.StartColor = System.Drawing.SystemColors.Control; + tabGradient1.TextColor = System.Drawing.SystemColors.ControlDarkDark; + autoHideStripSkin1.TabGradient = tabGradient1; + autoHideStripSkin1.TextFont = new System.Drawing.Font("Tahoma", 8.25F); + dockPanelSkin1.AutoHideStripSkin = autoHideStripSkin1; + tabGradient2.EndColor = System.Drawing.SystemColors.ControlLightLight; + tabGradient2.StartColor = System.Drawing.SystemColors.ControlLightLight; + tabGradient2.TextColor = System.Drawing.SystemColors.ControlText; + dockPaneStripGradient1.ActiveTabGradient = tabGradient2; + dockPanelGradient2.EndColor = System.Drawing.SystemColors.Control; + dockPanelGradient2.StartColor = System.Drawing.SystemColors.Control; + dockPaneStripGradient1.DockStripGradient = dockPanelGradient2; + tabGradient3.EndColor = System.Drawing.SystemColors.ControlLight; + tabGradient3.StartColor = System.Drawing.SystemColors.ControlLight; + tabGradient3.TextColor = System.Drawing.SystemColors.ControlText; + dockPaneStripGradient1.InactiveTabGradient = tabGradient3; + dockPaneStripSkin1.DocumentGradient = dockPaneStripGradient1; + dockPaneStripSkin1.TextFont = new System.Drawing.Font("Tahoma", 8.25F); + tabGradient4.EndColor = System.Drawing.SystemColors.ActiveCaption; + tabGradient4.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical; + tabGradient4.StartColor = System.Drawing.SystemColors.GradientActiveCaption; + tabGradient4.TextColor = System.Drawing.SystemColors.ActiveCaptionText; + dockPaneStripToolWindowGradient1.ActiveCaptionGradient = tabGradient4; + tabGradient5.EndColor = System.Drawing.SystemColors.Control; + tabGradient5.StartColor = System.Drawing.SystemColors.Control; + tabGradient5.TextColor = System.Drawing.SystemColors.ControlText; + dockPaneStripToolWindowGradient1.ActiveTabGradient = tabGradient5; + dockPanelGradient3.EndColor = System.Drawing.SystemColors.ControlLight; + dockPanelGradient3.StartColor = System.Drawing.SystemColors.ControlLight; + dockPaneStripToolWindowGradient1.DockStripGradient = dockPanelGradient3; + tabGradient6.EndColor = System.Drawing.SystemColors.InactiveCaption; + tabGradient6.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical; + tabGradient6.StartColor = System.Drawing.SystemColors.GradientInactiveCaption; + tabGradient6.TextColor = System.Drawing.SystemColors.InactiveCaptionText; + dockPaneStripToolWindowGradient1.InactiveCaptionGradient = tabGradient6; + tabGradient7.EndColor = System.Drawing.Color.Transparent; + tabGradient7.StartColor = System.Drawing.Color.Transparent; + tabGradient7.TextColor = System.Drawing.SystemColors.ControlDarkDark; + dockPaneStripToolWindowGradient1.InactiveTabGradient = tabGradient7; + dockPaneStripSkin1.ToolWindowGradient = dockPaneStripToolWindowGradient1; + dockPanelSkin1.DockPaneStripSkin = dockPaneStripSkin1; + this.dockPanel.Skin = dockPanelSkin1; this.dockPanel.TabIndex = 0; // // saveDialog @@ -759,12 +770,17 @@ private void InitializeComponent() this.saveDialog.Filter = "Log Files (*.rdc)|*.rdc"; this.saveDialog.Title = "Save Log As"; // - // checkForUpdatesToolStripMenuItem + // toolStripSeparator12 // - this.checkForUpdatesToolStripMenuItem.Name = "checkForUpdatesToolStripMenuItem"; - this.checkForUpdatesToolStripMenuItem.Size = new System.Drawing.Size(192, 22); - this.checkForUpdatesToolStripMenuItem.Text = "Check for Updates"; - this.checkForUpdatesToolStripMenuItem.Click += new System.EventHandler(this.checkForUpdatesToolStripMenuItem_Click); + this.toolStripSeparator12.Name = "toolStripSeparator12"; + this.toolStripSeparator12.Size = new System.Drawing.Size(189, 6); + // + // showTipsToolStripMenuItem + // + this.showTipsToolStripMenuItem.Name = "showTipsToolStripMenuItem"; + this.showTipsToolStripMenuItem.Size = new System.Drawing.Size(192, 22); + this.showTipsToolStripMenuItem.Text = "Show &Tips"; + this.showTipsToolStripMenuItem.Click += new System.EventHandler(this.showTipsToolStripMenuItem_Click); // // MainWindow // @@ -871,6 +887,8 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripStatusLabel statusIcon; private System.Windows.Forms.ToolStripMenuItem manageReplayDevicesToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem checkForUpdatesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem showTipsToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator12; } } \ No newline at end of file diff --git a/renderdocui/Windows/MainWindow.cs b/renderdocui/Windows/MainWindow.cs index 112896cbd0..1910293a10 100644 --- a/renderdocui/Windows/MainWindow.cs +++ b/renderdocui/Windows/MainWindow.cs @@ -1566,6 +1566,11 @@ private void viewDocsToolStripMenuItem_Click(object sender, EventArgs e) Help.ShowHelp(this, "renderdoc.chm"); } + private void showTipsToolStripMenuItem_Click(object sender, EventArgs e) + { + (new Dialogs.TipsDialog(m_Core)).ShowDialog(); + } + private void nightlybuildsToolStripMenuItem_Click(object sender, EventArgs e) { Process.Start("https://renderdoc.org/builds");