Esempio n. 1
0
		/// <summary>Constructor; initializes the window and constructs the tab thumbnail image to use when dragging.</summary>
		/// <param name="tab">Tab that was torn out of its parent window.</param>
		/// <param name="tabRenderer">Renderer instance to use when drawing the actual tab.</param>
		public TornTabForm(TitleBarTab tab, BaseTabRenderer tabRenderer)
		{
			_layeredWindow = new LayeredWindow();
			_initialized = false;

			// Set drawing styles
			SetStyle(ControlStyles.DoubleBuffer, true);

			// This should show up as a semi-transparent borderless window
			Opacity = 0.70;
			ShowInTaskbar = false;
			FormBorderStyle = FormBorderStyle.None;
// ReSharper disable DoNotCallOverridableMethodsInConstructor
			BackColor = Color.Fuchsia;
// ReSharper restore DoNotCallOverridableMethodsInConstructor
			TransparencyKey = Color.Fuchsia;
			AllowTransparency = true;

			Disposed += TornTabForm_Disposed;

			// Get the tab thumbnail (full size) and then draw the actual representation of the tab onto it as well
			Bitmap tabContents = tab.GetImage();
			Bitmap contentsAndTab = new Bitmap(tabContents.Width, tabContents.Height + tabRenderer.TabHeight, tabContents.PixelFormat);
			Graphics tabGraphics = Graphics.FromImage(contentsAndTab);

			tabGraphics.DrawImage(tabContents, 0, tabRenderer.TabHeight);

			bool oldShowAddButton = tabRenderer.ShowAddButton;

			tabRenderer.ShowAddButton = false;
			tabRenderer.Render(
				new List<TitleBarTab>
				{
					tab
				}, tabGraphics, new Point(0, 0), new Point(0, 0), true);
			tabRenderer.ShowAddButton = oldShowAddButton;

			// Scale the thumbnail down to half size
			_tabThumbnail = new Bitmap(contentsAndTab.Width / 2, contentsAndTab.Height / 2, contentsAndTab.PixelFormat);
			Graphics thumbnailGraphics = Graphics.FromImage(_tabThumbnail);

			thumbnailGraphics.InterpolationMode = InterpolationMode.High;
			thumbnailGraphics.CompositingQuality = CompositingQuality.HighQuality;
			thumbnailGraphics.SmoothingMode = SmoothingMode.AntiAlias;
			thumbnailGraphics.DrawImage(contentsAndTab, 0, 0, _tabThumbnail.Width, _tabThumbnail.Height);

			Width = _tabThumbnail.Width - 1;
			Height = _tabThumbnail.Height - 1;

			_cursorOffset = new Point(tabRenderer.TabContentWidth / 4, tabRenderer.TabHeight / 4);

			SetWindowPosition(Cursor.Position);
		}