[Gtk-sharp-list] [Solved] Scrollwindow don't works inside
Gtk.Fixed
Thomas Zühlke
muell_muell_ at gmx.net
Sun Apr 23 09:55:29 EDT 2006
Okay, I solved the problem by myself. It is very easy. I must use the
"AddWithViewport" function of the ScrolledWindow-Class, instead of using
only the "Add" function!
Thomas Zühlke wrote:
>Hi *,
>
>i have build a "mini" example for my problem (please see the
>attachment). There is a Gkt.Window and it is filled with a
>Scrolledwindow. This Scolledwindow is filled with a EventBox and this
>EventBox is filled with a Fixed. :-)
>If you perform a right-mouse-button-press on the window, a black filled
>DrawingArea is created on the Fixed. This DrawingArea can be moved by
>holding down left-mouse-button.
>The problem is that there should be created scollbars when i move the
>DrawingArea out of the windowborder or if i make the window smaller. Is
>this possible that there will be scrollbars shown?
>
>Thomas
>
>
>------------------------------------------------------------------------
>
>using System;
>using System.Collections.Generic;
>using System.Text;
>using Gtk;
>
>namespace GtkFixed_Scrollbars {
> class Program {
> static void Main(string[] args) {
> Application.Init();
> MainWindow hp = new MainWindow("Hallo");
> hp.ShowAll();
> Application.Run();
> }
> }
>
> public class MainWindow : Gtk.Window{
> public Gtk.Fixed FixedWidget;
> public Gtk.EventBox EventBoxWidget;
> public List<Gtk.DrawingArea> drawings = new List<DrawingArea>();
>
> private Gdk.GC gc_black;
> private double mouse_x,mouse_y;
>
> public MainWindow(string title):base(title){
> this.Destroyed += new EventHandler(MainWindow_Destroyed);
> this.SetDefaultSize(500, 500);
>
> FixedWidget = new Fixed();
> EventBoxWidget = new EventBox();
> EventBoxWidget.Events = Gdk.EventMask.AllEventsMask;
> EventBoxWidget.ButtonPressEvent += new ButtonPressEventHandler(event_box_ButtonPressEvent);
>
> // putting all things together
> EventBoxWidget.Add(FixedWidget);
> Gtk.ScrolledWindow sw = new ScrolledWindow();
> sw.Add(EventBoxWidget);
> this.Add(sw);
> }
>
> void MainWindow_Destroyed(object sender, EventArgs e) {
> Application.Quit();
> }
>
> private void event_box_ButtonPressEvent(object o, ButtonPressEventArgs args) {
> if (args.Event.Button == 3) {
> AddDrawingArea(
> FixedWidget,
> (int)args.Event.X,
> (int)args.Event.Y);
> }
> }
>
> #region some stupid DrawingArea functions
> private void AddDrawingArea(Gtk.Fixed FixedOn, int x, int y) {
> MyDA da = new MyDA();
> da.SetSizeRequest(30, 30);
> da.Events = Gdk.EventMask.AllEventsMask;
> da.MotionNotifyEvent += new MotionNotifyEventHandler(DrawingArea_MotionNotifyEvent);
> da.Realized += new EventHandler(DrawingArea_Realized);
> da.ExposeEvent += new ExposeEventHandler(DrawingArea_ExposeEvent);
> da.ButtonPressEvent += new ButtonPressEventHandler(DrawingArea_ButtonPressEvent);
> da.Position = new Gdk.Point(x, y);
> FixedOn.Put(da, x, y);
> FixedOn.ShowAll();
> }
>
> private void DrawingArea_ButtonPressEvent(object o, ButtonPressEventArgs args) {
> mouse_x = args.Event.X;
> mouse_y = args.Event.Y;
> }
>
> private void DrawingArea_ExposeEvent(object o, ExposeEventArgs args) {
> MyDA da = (MyDA)o;
> da.GdkWindow.DrawRectangle(gc_black, true, 0, 0, da.Allocation.Width, da.Allocation.Height);
> }
>
> private void DrawingArea_Realized(object sender, EventArgs e) {
> MyDA da = (MyDA)sender;
> da.ModifyBase(Gtk.StateType.Normal, new Gdk.Color(0, 0, 0));
> gc_black = da.Style.BaseGC(Gtk.StateType.Normal);
> }
>
> private void DrawingArea_MotionNotifyEvent(object o, MotionNotifyEventArgs args) {
> MyDA da = (MyDA)o;
> Gdk.EventMotion ev = args.Event;
> Gdk.ModifierType state;
> state = ev.State;
> if (state == Gdk.ModifierType.Button1Mask) {
> // holding down left mousebutton and moving
> double move_x_to = (da.Position.X + ev.X) - mouse_x;
> double move_y_to = (da.Position.Y + ev.Y) - mouse_y; ;
> da.Position = new Gdk.Point((int)move_x_to, (int)move_y_to);
> FixedWidget.Move(da, (int)move_x_to, (int)move_y_to);
> }
> }
> #endregion
> }
>
> public class MyDA : Gtk.DrawingArea {
> public Gdk.Point Position;
> public MyDA() : base() { }
> }
>
>}
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Gtk-sharp-list maillist - Gtk-sharp-list at lists.ximian.com
>http://lists.ximian.com/mailman/listinfo/gtk-sharp-list
>
>
More information about the Gtk-sharp-list
mailing list