Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorLluis Sanchez <lluis@novell.com>2010-04-28 04:03:50 +0400
committerLluis Sanchez <lluis@novell.com>2010-04-28 04:03:50 +0400
commit5dd4598e459e2de15594fd5b3fe8575fffaf4232 (patch)
tree1bbb562a0c5190dbfafc7e064452f376a4953331 /main
parent7fdb3eb5043692935965fb1502c5c03343c743f7 (diff)
* MonoDevelop.Ide.Gui/DefaultWorkbench.cs:
* MonoDevelop.Components.Docking/ShadedContainer.cs: Optimize rendering of the shaded background. svn path=/trunk/monodevelop/; revision=156272
Diffstat (limited to 'main')
-rw-r--r--main/src/core/MonoDevelop.Ide/ChangeLog6
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/ShadedContainer.cs51
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/DefaultWorkbench.cs26
3 files changed, 71 insertions, 12 deletions
diff --git a/main/src/core/MonoDevelop.Ide/ChangeLog b/main/src/core/MonoDevelop.Ide/ChangeLog
index 8ddf6343f1..d2a655b533 100644
--- a/main/src/core/MonoDevelop.Ide/ChangeLog
+++ b/main/src/core/MonoDevelop.Ide/ChangeLog
@@ -1,3 +1,9 @@
+2010-04-28 Lluis Sanchez Gual <lluis@novell.com>
+
+ * MonoDevelop.Ide.Gui/DefaultWorkbench.cs:
+ * MonoDevelop.Components.Docking/ShadedContainer.cs: Optimize
+ rendering of the shaded background.
+
2010-04-27 Michael Hutchinson <mhutchinson@novell.com>
* MonoDevelop.Ide.NavigateToDialog/NavigateToDialog.cs: Show a
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/ShadedContainer.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/ShadedContainer.cs
index b85e676fba..93fd708f7e 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/ShadedContainer.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.Docking/ShadedContainer.cs
@@ -93,40 +93,60 @@ namespace MonoDevelop.Components.Docking
RedrawAll ();
}
- void UpdateAllocation (Widget w)
+ bool UpdateAllocation (Widget w)
{
if (w.IsRealized) {
IShadedWidget sw = w as IShadedWidget;
+ Gdk.Rectangle[] newAllocations;
if (sw != null) {
List<Gdk.Rectangle> rects = new List<Gdk.Rectangle> ();
foreach (Gdk.Rectangle ar in sw.GetShadedAreas ())
rects.Add (ar);
- allocations [w] = rects.ToArray ();
+ newAllocations = rects.ToArray ();
} else {
- allocations [w] = new Gdk.Rectangle [] { w.Allocation };
+ newAllocations = new Gdk.Rectangle [] { w.Allocation };
}
+ Gdk.Rectangle[] oldAllocations;
+ if (allocations.TryGetValue (w, out oldAllocations)) {
+ if (oldAllocations.Length == newAllocations.Length) {
+ bool changed = false;
+ for (int n=0; n<oldAllocations.Length; n++) {
+ if (newAllocations[n] != oldAllocations[n]) {
+ changed = true;
+ break;
+ }
+ }
+ if (!changed)
+ return false;
+ }
+ }
+ allocations [w] = newAllocations;
+ return true;
}
else {
+ if (!allocations.ContainsKey (w))
+ return false;
allocations.Remove (w);
+ return true;
}
}
void HandleWRealized (object sender, EventArgs e)
{
- UpdateAllocation ((Widget) sender);
- RedrawAll ();
+ if (UpdateAllocation ((Widget) sender))
+ RedrawAll ();
}
void HandleSwAreasChanged (object sender, EventArgs e)
{
- UpdateAllocation ((Gtk.Widget)sender);
- RedrawAll ();
+ if (UpdateAllocation ((Gtk.Widget)sender))
+ RedrawAll ();
}
void HandleWSizeAllocated (object o, SizeAllocatedArgs args)
{
- UpdateAllocation ((Widget) o);
- RedrawAll ();
+ if (UpdateAllocation ((Widget) o))
+ RedrawAll ();
}
void HandleWHidden (object sender, EventArgs e)
@@ -146,8 +166,17 @@ namespace MonoDevelop.Components.Docking
void RedrawAll ()
{
- foreach (Widget w in widgets)
- w.QueueDraw ();
+ foreach (Widget w in widgets) {
+ if (!w.Visible)
+ continue;
+ IShadedWidget sw = w as IShadedWidget;
+ if (sw != null) {
+ foreach (Gdk.Rectangle rect in sw.GetShadedAreas ())
+ w.QueueDrawArea (rect.X, rect.Y, rect.Width, rect.Height);
+ }
+ else
+ w.QueueDraw ();
+ }
}
public void DrawBackground (Gtk.Widget w)
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/DefaultWorkbench.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/DefaultWorkbench.cs
index ff1f1ed378..ea29828629 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/DefaultWorkbench.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/DefaultWorkbench.cs
@@ -1302,7 +1302,7 @@ namespace MonoDevelop.Ide.Gui
// The SdiDragNotebook class allows redirecting the command route to the ViewCommandHandler
// object of the selected document, which implement some default commands.
- class SdiDragNotebook: DragNotebook, ICommandDelegatorRouter
+ class SdiDragNotebook: DragNotebook, ICommandDelegatorRouter, IShadedWidget
{
ShadedContainer shadedContainer;
@@ -1329,6 +1329,30 @@ namespace MonoDevelop.Ide.Gui
return base.OnExposeEvent (evnt);
}
+ public event EventHandler AreasChanged;
+
+ public IEnumerable<Gdk.Rectangle> GetShadedAreas ()
+ {
+ Gdk.Rectangle rect = Allocation;
+ if (CurrentPageWidget != null && CurrentPageWidget.Visible)
+ rect.Height -= CurrentPageWidget.Allocation.Height;
+ yield return rect;
+ }
+
+ protected override void OnPageAdded (Widget p0, uint p1)
+ {
+ base.OnPageAdded (p0, p1);
+ if (AreasChanged != null)
+ AreasChanged (this, EventArgs.Empty);
+ }
+
+ protected override void OnPageRemoved (Widget p0, uint p1)
+ {
+ base.OnPageRemoved (p0, p1);
+ if (AreasChanged != null)
+ AreasChanged (this, EventArgs.Empty);
+ }
+
}
}