void Build ()
		{
			if (Path.Icon != null) {
				image = new ImageCanvasElement (Path.Icon);
				Add (image);
			}

			label = new LabelCanvasElement ();
			label.Markup = Path.Markup;
			Add (label);
		}
		public EntryCanvasElement ()
		{
			currentEntry = "";
			CaretOffset = 0;
			CaretHighlightOffset = -1;

			imContext = new IMMulticontext ();
			imContext.PreeditChanged += HandlePreeditChanged;
			imContext.PreeditStart += HandlePreeditStart;
			imContext.PreeditEnd += HandlePreeditEnd;
			imContext.RetrieveSurrounding += HandleRetrieveSurrounding;
			imContext.SurroundingDeleted += HandleSurroundingDeleted;
			imContext.Commit += HandleCommit;

			SetPreferedSize (200, 30);

			preEditLabel = new LabelCanvasElement ("");
			preEditLabel.YAlign = 0.5;
			preEditLabel.Opacity = 0.5;
			preEditLabel.InputTransparent = true;
			Add (preEditLabel);
		}
		void Build ()
		{
			box = new HBoxCanvasElement ();
			
			image = new ImageCanvasElement (Gdk.Pixbuf.LoadFromResource ("searchbox-search-16.png"));
			image.WidthRequest = 24;
			image.XAlign = 0;
			image.NoChainOpacity = true;
			box.Add (image);
			
			searchLabel = new LabelCanvasElement ("Search");
			searchLabel.XAlign = 0;
			searchLabel.YAlign = 0.5;
			box.Add (searchLabel);
			
			var upDownArrows = new CanvasElement ();
			upDownArrows.WidthRequest = 12;
			upDownArrows.HeightRequest = 24;
			
			upDownArrows.RenderEvent += (sender, e) => {
				var context = e.Context;
				double centerX = upDownArrows.Width - 3;
				double centerY = upDownArrows.Height / 2;
				context.MoveTo (centerX, centerY - 6);
				context.LineTo (centerX - 3, centerY - 2);
				context.LineTo (centerX + 3, centerY - 2);
				context.ClosePath ();
				
				context.MoveTo (centerX, centerY + 6);
				context.LineTo (centerX - 3, centerY + 2);
				context.LineTo (centerX + 3, centerY + 2);
				context.ClosePath ();
				
				context.Color = new Cairo.Color (0, 0, 0, 0.35 * upDownArrows.Opacity);
				context.Fill ();
			};

			image.SizeChanged += (object sender, EventArgs e) => {
				image.AnchorX = 8;
				image.AnchorY = image.Height / 2;
			};
			
			box.Add (upDownArrows);

			SetChild (box);
		}