source: lliurex-miniscreen/trunk/tags/1.7/miniscreen/MainWindow.cs @ 345

Last change on this file since 345 was 345, checked in by mabarracus, 4 years ago

add trusty code
fixed compilation
fixed package dependencies in xenial

  • Property svn:executable set to *
File size: 30.2 KB
Line 
1using System;
2using System.Diagnostics;
3using Gtk;
4using Gdk;
5using System.Collections.Generic;
6using Stetic;
7
8namespace LliureXMiniScreen{
9        public partial class MainWindow : Gtk.Window
10        {
11                public int MiniScreenWidth, MiniScreenHeight;   // Grandària de la minifinestra
12                public int MiniScreenPosition;                          // 0 left, 1right
13                public int ScreenWidth, ScreenHeight;                   // Grandària de la pantalla
14                public bool BtnPressed;                                             // Indica si està polsat el botó del ratolí
15        //      int line_x0, line_y0, line_xf, line_yf;         // Dimensiona de la línia
16                List <Gdk.Point> Llista_Punts;                                  // Defineix la línia per on passa
17                List <String[]> Input_Devices_List;                     // Llista de ratolins
18
19                public Gdk.Pixbuf HiddenMiniScreen;     // PATCH
20               
21                bool moving_mouse;                                                              // Indica si s'està movent el ratolí
22                       
23                Gdk.Window root;                                                                // ROOT WINDOW
24                //int width, height;
25                Pixbuf screenshot;                                                              // Captura de pantalla
26                Pixbuf InitScreenshot;                                                          // Captura de pantalla inicial
27                Gdk.Color PathColor;
28               
29                uint RefreshRate;
30                uint OldRefreshRate; // per gestionar els temps de refresc
31               
32                AccelGroup grup = new AccelGroup ();                    // Necessari per als items de menú amb imatges
33               
34               
35                public void Init(){
36                        /* Creem el fitxer amb la llista dels diospositius d'entrada */
37                        ExecuteCommandSync("/bin/bash", "getInputMouse.sh");
38                                               
39                        /* Inicialitza variables i objectes */
40                        RefreshRate=500;
41                        OldRefreshRate=500;
42                        // Timer que es dispara cada X ms per refrescar la finestra
43                        GLib.Timeout.Add(RefreshRate, DrawPreview); // Amb més sembla que se satura si punxem dins la finestra...
44                        // Propietats de la pantalla
45                        MiniScreenWidth=400;
46                        MiniScreenHeight=320;
47                        MiniScreenPosition=0;
48                        MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight);
49                       
50                        BtnPressed=false;       // Botó premut
51                       
52                        // get the root window
53                        root = Gdk.Global.DefaultRootWindow;
54                       
55                        // Dimensions de la pantalla
56                        root.GetSize(out ScreenWidth, out ScreenHeight);
57                        Console.WriteLine("Pantalla: "+ScreenWidth+" "+ScreenHeight);
58                       
59                        PathColor=new Color(255,0,0);
60                               
61                        Llista_Punts=new List<Point>();
62                        moving_mouse=false;
63                       
64                        // Llegim les propietats del ratoli
65                        System.IO.StreamReader sr = new System.IO.StreamReader("/tmp/miniscreen_deviceslist");
66                       
67                        Input_Devices_List=new List<string[]>();
68                        string texto;
69                        string [] split_texto;
70                        string dev;
71                        string property;
72                       
73                        while (!sr.EndOfStream){
74                                texto = sr.ReadLine();
75                                split_texto=texto.Split(new char[] {' '});
76                                //String[] device=new String();                                                   
77                                //dev=split_texto[0];
78                                //property=split_texto[1];
79                                Input_Devices_List.Add(split_texto);
80                        }
81                       
82                        foreach(String [] device in Input_Devices_List){
83                                Console.WriteLine("DEV: "+device[0]);
84                                Console.WriteLine("PROP: "+device[1]);
85                        }
86                               
87                        sr.Close();
88                        // cap posar dev i property com a parametres al xinit, i xinit com a dependencia d'este paquet
89                        // i invocar el script que crea aço abans de llegir-lo
90                        // Per si hi ha mes dispositius, ha de ser una llista!!
91                       
92                        // PATCH
93                        // Fem una captura de la pantalla general, per agafar les imatges a substiutir per la minipantalla
94                        InitScreenshot = Gdk.Pixbuf.FromDrawable(root, root.Colormap, 0,0, 0,0, ScreenWidth, ScreenHeight);
95                       
96                        int width, height, px, py;
97                                               
98                }
99               
100       
101               
102                public MainWindow () : base(Gtk.WindowType.Toplevel)
103                {
104                        Build ();
105                       
106                        Init();                                                                         // Inicialització
107                       
108                        MiniScreen.ShowAll();
109                       
110                        // Gestió d'events
111                        eventbox1.ButtonPressEvent += HandleMiniScreenButtonPressEvent;
112                        eventbox1.ButtonReleaseEvent += HandleEventbox1ButtonReleaseEvent;
113                        eventbox1.MotionNotifyEvent += HandleEventbox1MotionNotifyEvent;
114                       
115                        MiniScreen.Hidden += HandleMiniScreenHidden;
116                        eventbox1.MotionNotifyEvent += HandleEventbox1MotionNotifyEvent;
117                       
118                        DrawPreview();
119                       
120                        // // LliureXMiniScreen.MainClass.win.TypeHint=Gdk.WindowTypeHint.Dock;
121                        // Establim la finestra al cantó inferior
122                /*      try{
123                                LliureXMiniScreen.MainClass.win.Move(0, ScreenHeight);
124                                LliureXMiniScreen.MainClass.win.TypeHint=Gdk.WindowTypeHint.Dock;
125                        } catch (Exception ex){
126                                Console.WriteLine("Init Exception: "+ex);
127                        }
128                         */
129                        //Gdk.Global.ActiveWindow.Move(0, ScreenHeight);
130                        //Gdk.Global.ActiveWindow.TypeHint=Gdk.WindowTypeHint.Dock;
131                        //Gdk.Global.ActiveWindow.TypeHint
132       
133                }
134
135                void takeSnapshot(){
136                        // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
137                        LliureXMiniScreen.Core.getCore().win.Hide();
138                        InitScreenshot = Gdk.Pixbuf.FromDrawable(root, root.Colormap, 0,0, 0,0, ScreenWidth, ScreenHeight);
139                        LliureXMiniScreen.Core.getCore().win.Show();
140       
141                       
142                        // El problema està en que no amaga els menús, però sí la minipantalla!!!
143
144                }
145               
146                void HandleMiniScreenHidden (object sender, EventArgs e)
147                {
148                        InitScreenshot = Gdk.Pixbuf.FromDrawable(root, root.Colormap, 0,0, 0,0, ScreenWidth, ScreenHeight);
149                       
150                        Console.WriteLine("New capture from (0,0) to ("+ScreenWidth+","+ScreenHeight+")");
151                }
152       
153                public void setHint(){
154                        try{
155                                //LliureXMiniScreen.MainClass.win.Move(0, ScreenHeight);
156                                //LliureXMiniScreen.Core.getCore().win.Move(0, ScreenHeight);
157                                LliureXMiniScreen.Core.getCore().win.Move(0, ScreenHeight);
158                                //LliureXMiniScreen.MainClass.win.TypeHint=Gdk.WindowTypeHint.Dock;
159                        } catch (Exception ex){
160                                Console.WriteLine("Init Exception: "+ex);
161                        }
162                }
163               
164                void HandleEventbox1MotionNotifyEvent (object o, MotionNotifyEventArgs args)
165                {
166                        Console.WriteLine("Moving");
167                        //Console.WriteLine(args.Event.X+","+args.Event.Y);
168                        //line_xf=(int)args.Event.X;
169                        //line_yf=(int) args.Event.Y;
170                        try{
171                        // Afegim el punt a la llista...
172                                if(BtnPressed){
173                                        Console.WriteLine("Adding: "+args.Event.X+","+args.Event.Y);
174                                        Llista_Punts.Add(new Gdk.Point((int)args.Event.X, (int)args.Event.Y));
175                                        DrawPreview();
176                                }
177                        } catch (Exception ex){
178                                Console.WriteLine("Exception in moving: "+ex.Message);
179                        }               
180                }
181       
182               
183                void HandleEventbox1ButtonReleaseEvent (object o, ButtonReleaseEventArgs args)
184                {
185       
186                        moving_mouse=true; // Indiquem que s'està movent el ratolí (per tant no redibuixarem)
187                        //Console.WriteLine("RELEASEEE!!!");
188                       
189                        int px, py; // Posició de la minipantalla
190                        int miniscreen_size_x,miniscreen_size_y; // dimensions de la minipantalla
191                        double pos_mouse_x, pos_mouse_y; // posició del ratolí en el clic
192                        double pos_mouse_x_global, pos_mouse_y_global; // posició del ratolí en el clic referent al global de pa pantalla
193                       
194                        /*line_x0=0; // Amaguem la línia
195                        line_y0=0;
196                        line_xf=0;
197                        line_yf=0;*/
198                       
199                        // Agafem les dimensions de la minipantalla
200                        MiniScreen.GetSizeRequest(out miniscreen_size_x, out miniscreen_size_y);
201                       
202                        // Agafem la posició del ratolí en el moment del release
203                        pos_mouse_x=args.Event.X;
204                        pos_mouse_y=args.Event.Y;
205                       
206                        // Afegim a la llista la última posició
207                        Llista_Punts.Add(new Gdk.Point((int)pos_mouse_x, (int)pos_mouse_y));
208                                       
209                        // Agafem la posició de la finestra
210                        //Gdk.Window root=Gdk.Global.ActiveWindow;
211                        //root.GetPosition(out px, out py);
212                        //LliureXMiniScreen.MainClass.win.GetPosition(out px, out py);
213                         LliureXMiniScreen.Core.getCore().win.GetPosition(out px, out py);
214
215                       
216                       
217                        // Posició global del ratolí en el clic (recalculada)
218                        pos_mouse_x_global=pos_mouse_x*ScreenWidth/this.MiniScreenWidth;
219                        pos_mouse_y_global=pos_mouse_y*ScreenHeight/this.MiniScreenHeight;
220                       
221                        // Mostrem la informació
222                        Console.WriteLine("RELEASE: Screen From: ("+px+","+py+") to ("+(px+miniscreen_size_x)+","+(py+miniscreen_size_y)+")");
223                        Console.WriteLine("RELEASE: Pointer at: ("+pos_mouse_x+ ","+pos_mouse_y+")");
224                        Console.WriteLine("RELEASE: Pointer at: ("+pos_mouse_x_global+ ","+pos_mouse_y_global+")");
225                       
226                        if(args.Event.Button==1){ // Si el botó era l'1...
227                                // Movem el ratolí en funció de la llista...
228                                       
229                                Console.WriteLine("N PUNTS: "+Llista_Punts.Count);
230                                if(Llista_Punts.Count>3){
231                                        //Console.WriteLine("N PUNT 1: "+Llista_Punts[0].X+","+Llista_Punts[0].Y);
232                                        //Console.WriteLine("N PUNT 2: "+Llista_Punts[1].X+","+Llista_Punts[1].Y);
233                                        //Console.WriteLine("N PUNT 3: "+Llista_Punts[2].X+","+Llista_Punts[2].Y);
234                                       
235                                       
236                                        Process p = new Process();
237                                        p.StartInfo.FileName = "xdotool";
238                                       
239                                        // Alliberem el ratolí
240                                //      p.StartInfo.Arguments = " mouseup 1  ";
241                                //      p.Start();
242                                //      p.WaitForExit();
243                                       
244                                       
245                                       
246                                        // DESACTIVEM ELS RATOLINS // PATCH 2012
247                                        foreach(String [] device in Input_Devices_List)
248                                                                ExecuteCommandSync("xinput","set-prop "+device[0]+" "+device[1]+" 0");
249                               
250
251                                       
252                                       
253                                       
254                                        Console.WriteLine("Posicionant en: "+Llista_Punts[0].X*ScreenWidth/this.MiniScreenWidth+" "+Llista_Punts[0].Y*ScreenHeight/this.MiniScreenHeight);
255                                        p.StartInfo.Arguments = " mousemove  "+Llista_Punts[0].X*ScreenWidth/this.MiniScreenWidth+" "+Llista_Punts[0].Y*ScreenHeight/this.MiniScreenHeight;
256                                        p.Start();
257                                        p.WaitForExit();
258                                       
259                                               
260                                       
261                                        // Click inicial:
262                                        p.StartInfo.Arguments = " mousedown 1 ";
263                                        p.Start();
264                                        p.WaitForExit();
265                                       
266                                        foreach(Gdk.Point pt in Llista_Punts){
267                                                Console.WriteLine("Movint to: "+pt.X*ScreenWidth/this.MiniScreenWidth+" "+pt.Y*ScreenHeight/this.MiniScreenHeight);
268                                                p.StartInfo.Arguments = " mousemove  "+pt.X*ScreenWidth/this.MiniScreenWidth+" "+pt.Y*ScreenHeight/this.MiniScreenHeight;
269                                                p.Start();
270                                                p.WaitForExit();
271                                        }
272                                        p.StartInfo.Arguments = " mouseup 1  ";
273                                        p.Start();
274                                        p.WaitForExit();
275                                       
276                                       
277                                        // Reposicionament del ratolí en la minipantalla
278                                        double finalx, finaly;
279                                        finalx=px+pos_mouse_x;
280                                        finaly=py+pos_mouse_y;
281                                       
282                                        Console.WriteLine("px: "+px+" pos_mouse_x: "+pos_mouse_x);
283                                        Console.WriteLine("px: "+py+" pos_mouse_x: "+pos_mouse_y);
284                                       
285                               
286                                        p.StartInfo.Arguments = "mousemove "+finalx+" "+finaly;
287       
288       
289                                        p.Start();
290                                        p.WaitForExit();
291                                        p.Close();
292                                       
293                                        Llista_Punts.Clear();
294                               
295                                       
296                                        // REACTIVEM EL RATOLI // PATCH 2012
297                                                foreach(String [] device in Input_Devices_List)
298                                                                ExecuteCommandSync("xinput","set-prop "+device[0]+" "+device[1]+" 1");
299                                       
300                                       
301                                       
302                                       
303                                } else {
304                                        // Si només hi ha un clic...
305                                        if(Llista_Punts.Count>0){
306                                                Console.WriteLine("Click*****************************");
307                                               
308                                                Process p = new Process();
309                                                p.StartInfo.FileName = "xdotool";
310                                       
311                                                // Alliberem el ratolí
312                                                //p.StartInfo.Arguments = " mouseup 1  ";
313                                                //p.Start();
314                                                //p.WaitForExit();
315                                       
316                                                Console.WriteLine("Movint INIT to: "+Llista_Punts[0].X*ScreenWidth/this.MiniScreenWidth+" "+Llista_Punts[0].Y*ScreenHeight/this.MiniScreenHeight);
317                                                p.StartInfo.Arguments = " mousemove  "+Llista_Punts[0].X*ScreenWidth/this.MiniScreenWidth+" "+Llista_Punts[0].Y*ScreenHeight/this.MiniScreenHeight;
318                                                p.Start();
319                                                p.WaitForExit();
320                                       
321                                                // Click:
322                                                p.StartInfo.Arguments = " click 1 ";
323                                                p.Start();
324                                                p.WaitForExit();
325                                       
326                                                // Reposicionament del ratolí en la minipantalla
327                                                double finalx, finaly;
328                                                finalx=px+pos_mouse_x;
329                                                finaly=py+pos_mouse_y;
330                                       
331                                                p.StartInfo.Arguments = "mousemove "+finalx+" "+finaly;
332       
333                                                p.Start();
334                                                p.WaitForExit();
335                                                p.Close();
336                                                Llista_Punts.Clear();
337                                       
338                                        }
339                                       
340                                }
341                               
342                                // Restaurem el botó
343                               
344                        }
345                        BtnPressed=false; // Alliberem el botó es faça on es faça
346                        moving_mouse=false; // Hem acabat de mouse el ratoló, podem redibuixar                 
347                       
348                }
349       
350               
351                void MiniScreenSettings()       {
352                        Console.WriteLine("Right Click");
353                       
354                        Gtk.Menu menu_settings=new Gtk.Menu();
355                        Gtk.MenuItem menuitem1=new Gtk.MenuItem(Mono.Unix.Catalog.GetString("MiniScreen Resolution"));
356                        menu_settings.Append(menuitem1);
357                        // Submenu 1
358                        Gtk.Menu menu_dim=new Gtk.Menu();
359                        Gtk.MenuItem menuitem1_0=new Gtk.MenuItem("300 x 240 (5:4)" );
360                        menu_dim.Append(menuitem1_0);
361                        menuitem1_0.Show();
362                        menuitem1.Submenu=menu_dim;             
363                       
364                        Gtk.MenuItem menuitem1_1=new Gtk.MenuItem("400 x 320 (5:4)");
365                        menu_dim.Append(menuitem1_1);
366                        menuitem1_1.Show();
367                       
368                        Gtk.MenuItem menuitem1_6=new Gtk.MenuItem("400 x 235 (16:9)");
369                        menu_dim.Append(menuitem1_6);
370                        menuitem1_6.Show();
371                       
372                        Gtk.MenuItem menuitem1_7=new Gtk.MenuItem("300 x 176 (16:9)");
373                        menu_dim.Append(menuitem1_7);
374                        menuitem1_7.Show();
375                       
376                        Gtk.MenuItem menuitem1_2=new Gtk.MenuItem("300 x 225 (4:3)" );
377                        menu_dim.Append(menuitem1_2);
378                        menuitem1_2.Show();
379                                       
380                        Gtk.MenuItem menuitem1_3=new Gtk.MenuItem("200 x 150 (4:3)");
381                        menu_dim.Append(menuitem1_3);
382                        menuitem1_3.Show();
383                       
384                        Gtk.MenuItem menuitem1_4=new Gtk.MenuItem("300 x 166 (9:5)");
385                        menu_dim.Append(menuitem1_4);
386                        menuitem1_4.Show();
387                       
388                        Gtk.MenuItem menuitem1_5=new Gtk.MenuItem("200 x 111 (9:5)");
389                        menu_dim.Append(menuitem1_5);
390                        menuitem1_5.Show();             
391                       
392                       
393                        // Opcio refreshRate
394                       
395                        Gtk.MenuItem menuitemRefreshRate=new Gtk.MenuItem(Mono.Unix.Catalog.GetString("Set Refresh Rate"));
396                        menu_settings.Append(menuitemRefreshRate);
397                       
398                        Gtk.Menu menu_ref_rate=new Gtk.Menu();
399                        Gtk.MenuItem menuitem_ref_500=new Gtk.MenuItem(Mono.Unix.Catalog.GetString("500 ms (high refresh rate)" ));
400                        menu_ref_rate.Append(menuitem_ref_500);
401                        menuitem_ref_500.Show();
402                        menuitemRefreshRate.Submenu=menu_ref_rate;             
403                       
404                        Gtk.MenuItem menuitem_ref_750=new Gtk.MenuItem(Mono.Unix.Catalog.GetString("750 ms"));
405                        menu_ref_rate.Append(menuitem_ref_750);
406                        menuitem_ref_750.Show();
407                       
408                        Gtk.MenuItem menuitem_ref_1000=new Gtk.MenuItem(Mono.Unix.Catalog.GetString("1000 ms"));
409                        menu_ref_rate.Append(menuitem_ref_1000);
410                        menuitem_ref_1000.Show();
411                       
412                        Gtk.MenuItem menuitem_ref_1500=new Gtk.MenuItem(Mono.Unix.Catalog.GetString("1500 ms"));
413                        menu_ref_rate.Append(menuitem_ref_1500);
414                        menuitem_ref_1500.Show();
415                       
416                        Gtk.MenuItem menuitem_ref_2000=new Gtk.MenuItem(Mono.Unix.Catalog.GetString("2000 ms (low refresh rate)" ));
417                        menu_ref_rate.Append(menuitem_ref_2000);
418                        menuitem_ref_2000.Show();
419                       
420                       
421                       
422                       
423                       
424                        // Opció 2
425                       
426                        Gtk.MenuItem menuitem2=new Gtk.MenuItem(Mono.Unix.Catalog.GetString("Set path color"));
427                        menu_settings.Append(menuitem2);
428                       
429                       
430                        // Opció 3 - Submenú posició
431                       
432                       
433                        Gtk.Menu menu_position=new Gtk.Menu();
434                        Gtk.MenuItem menuitem3=new Gtk.MenuItem(Mono.Unix.Catalog.GetString("Window position"));
435                        menu_settings.Append(menuitem3);
436                       
437                        // Submenu 3
438                        Gtk.MenuItem menuitem3_0=new Gtk.MenuItem(Mono.Unix.Catalog.GetString("Left"));
439                        menu_position.Append(menuitem3_0);
440                        menuitem3_0.Show();
441                        menuitem3.Submenu=menu_position;
442       
443                        Gtk.MenuItem menuitem3_1=new Gtk.MenuItem(Mono.Unix.Catalog.GetString("Right"));
444                        menu_position.Append(menuitem3_1);
445                        menuitem3_1.Show();
446                       
447                        // Opció 4 - Eixir
448                        Gtk.ImageMenuItem menuitem4=new Gtk.ImageMenuItem(Stock.Quit, grup);
449                        menuitem4.RenderIcon(Stock.Quit, IconSize.Menu, Mono.Unix.Catalog.GetString("Exit from MiniScreen"));
450                        menu_settings.Append(menuitem4);
451                       
452                        // Opció 5 - About
453               
454                       
455                        //Gtk.MenuItem menuitem5=new Gtk.MenuItem(Mono.Unix.Catalog.GetString("About"));
456                        //Gtk.ImageMenuItem menuitem5=new Gtk.MenuItem((Mono.Unix.Catalog.GetString("About"));
457                       
458                       
459                        Gtk.ImageMenuItem menuitem5=new Gtk.ImageMenuItem(Stock.About, grup);
460                        menuitem5.RenderIcon(Stock.About, IconSize.Menu, Mono.Unix.Catalog.GetString("About LliureX MiniScreen"));
461                        menu_settings.Append(menuitem5);
462                       
463                        menuitem1.Show();
464                        menuitemRefreshRate.Show();
465                        menuitem2.Show();
466                        menuitem3.Show();
467                        menuitem4.Show();
468                        menuitem5.ShowAll();
469                        menuitem5.Show();
470                               
471                        menu_settings.Popup();
472                       
473                        menuitem1_0.ButtonPressEvent+= HandleMenuitem1ButtonPressEvent;
474                        menuitem1_1.ButtonPressEvent+= HandleMenuitem1ButtonPressEvent;
475                        menuitem1_2.ButtonPressEvent+= HandleMenuitem1ButtonPressEvent;
476                        menuitem1_3.ButtonPressEvent+= HandleMenuitem1ButtonPressEvent;
477                        menuitem1_4.ButtonPressEvent+= HandleMenuitem1ButtonPressEvent;
478                        menuitem1_5.ButtonPressEvent+= HandleMenuitem1ButtonPressEvent;
479                        menuitem1_6.ButtonPressEvent+= HandleMenuitem1ButtonPressEvent;
480                        menuitem1_7.ButtonPressEvent+= HandleMenuitem1ButtonPressEvent;
481       
482
483                        menuitem_ref_500.ButtonPressEvent += HandleMenuitem_ref_500ButtonPressEvent;
484                        menuitem_ref_750.ButtonPressEvent += HandleMenuitem_ref_750ButtonPressEvent;
485                        menuitem_ref_1000.ButtonPressEvent += HandleMenuitem_ref_1000ButtonPressEvent;
486                        menuitem_ref_1500.ButtonPressEvent += HandleMenuitem_ref_1500ButtonPressEvent;
487                        menuitem_ref_2000.ButtonPressEvent += HandleMenuitem_ref_2000ButtonPressEvent;
488                       
489                       
490                       
491                        menuitem2.ButtonPressEvent+= HandleMenuitem2ButtonPressEvent;
492                       
493                        menuitem3_0.ButtonPressEvent+= HandleMenuitem3_0ButtonPressEvent;
494                        menuitem3_1.ButtonPressEvent+= HandleMenuitem3_1ButtonPressEvent;
495                        menuitem4.ButtonPressEvent += HandleMenuitem4ButtonPressEvent;
496                        menuitem5.ButtonPressEvent += HandleMenuitem5ButtonPressEvent;
497               
498                }
499
500                        void HandleMenuitem_ref_2000ButtonPressEvent (object o, ButtonPressEventArgs args)
501                        {               
502                                RefreshRate=2000;
503                                GLib.Timeout.Add(RefreshRate, DrawPreview);                     
504                        }
505
506                        void HandleMenuitem_ref_1500ButtonPressEvent (object o, ButtonPressEventArgs args)
507                        {               RefreshRate=1500;       
508                                        GLib.Timeout.Add(RefreshRate, DrawPreview); 
509                        }
510
511                        void HandleMenuitem_ref_1000ButtonPressEvent (object o, ButtonPressEventArgs args)
512                        {               RefreshRate=1000;       
513                                        GLib.Timeout.Add(RefreshRate, DrawPreview);
514                        }
515
516                        void HandleMenuitem_ref_750ButtonPressEvent (object o, ButtonPressEventArgs args)
517                        {               RefreshRate=750;       
518                                        GLib.Timeout.Add(RefreshRate, DrawPreview); 
519                        }
520
521                        void HandleMenuitem_ref_500ButtonPressEvent (object o, ButtonPressEventArgs args)
522                        {               RefreshRate=500;       
523                                        GLib.Timeout.Add(RefreshRate, DrawPreview); 
524                        }
525       
526                       
527                void HandleMenuitem5ButtonPressEvent (object o, ButtonPressEventArgs args)
528                {
529                        About dlgAbout=new About();
530                        dlgAbout.Run();
531                        dlgAbout.Destroy();
532                }
533       
534                        void HandleMenuitem4ButtonPressEvent (object o, ButtonPressEventArgs args)
535                        {
536                                Application.Quit();
537                        }
538       
539                       
540               
541               
542                void MoveMiniScreen(int position){
543                                // Amaguem la finestra per tornar a fer la captura inicial
544                               
545
546                                // Establim la finestra al cantó inferior dret
547                                //LliureXMiniScreen.MainClass.win.Move(ScreenWidth-MiniScreenWidth, ScreenHeight-MiniScreenHeight);
548                                LliureXMiniScreen.Core.getCore().win.Move(position*(ScreenWidth-MiniScreenWidth), ScreenHeight-MiniScreenHeight);
549                                Console.WriteLine("Movent a: "+position*(ScreenWidth-MiniScreenWidth)+","+(ScreenHeight-MiniScreenHeight));
550                               
551                                //LliureXMiniScreen.MainClass.win.Activate();
552                                LliureXMiniScreen.Core.getCore().win.Activate();
553                                               
554                }
555               
556                void HandleMenuitem3_1ButtonPressEvent (object o, ButtonPressEventArgs args)
557                        {
558                                        //LliureXMiniScreen.Core.getCore().win.Hide();
559                                        takeSnapshot();
560                                        Console.WriteLine("CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC");
561                                        MiniScreenPosition=1;
562                                        MoveMiniScreen(MiniScreenPosition);
563                                        LliureXMiniScreen.Core.getCore().win.Show();
564                       
565                        }
566       
567                        void HandleMenuitem3_0ButtonPressEvent (object o, ButtonPressEventArgs args)
568                        {
569                                Console.WriteLine("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
570                                MiniScreenPosition=0;
571                                MoveMiniScreen(MiniScreenPosition);
572                        }
573       
574                void HandleMenuitem2ButtonPressEvent (object o, ButtonPressEventArgs args)
575                {
576                        //Gdk.Color color=new Gdk.Color();
577                        Gtk.ColorSelection selection;
578                        Console.Write("Menu Item 2");
579                        Gtk.ColorSelectionDialog dlg=new Gtk.ColorSelectionDialog("Select path color");
580                       
581                        Gtk.ResponseType result=(Gtk.ResponseType)dlg.Run();
582                       
583                        if(result==Gtk.ResponseType.Ok) {
584
585                                selection=dlg.ColorSelection;
586                                PathColor=selection.CurrentColor;
587                        } //else Console.WriteLine("Cancelled");
588                       
589                        dlg.Destroy();
590                       
591                }
592       
593                void HandleMenuitem1ButtonPressEvent (object obj, ButtonPressEventArgs args) {
594                        Console.WriteLine("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
595                        try{
596                               
597                                // Amaguem la finestra per tornar a fer la captura inicial
598                                //MiniScreen.Hide();
599                                takeSnapshot();
600                               
601                                if(((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text=="300 x 240 (5:4)"){
602                                        Console.WriteLine("300 x 240 (5:4)");
603                                        MiniScreenWidth=300;
604                                        MiniScreenHeight=240;
605                                       
606                                //      MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight);
607                                } else if(((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text=="400 x 320 (5:4)"){
608                                        Console.WriteLine("400 x 320 (5:4)");
609                                        MiniScreenWidth=400;
610                                        MiniScreenHeight=320;
611                                       
612                                //      MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight);
613                                } else if(((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text=="400 x 235 (16:9)"){
614                                        Console.WriteLine("400 x 235 (16:9)");
615                                        MiniScreenWidth=400;
616                                        MiniScreenHeight=235;
617                                       
618                                //      MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight);
619                                } else if(((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text=="300 x 176 (16:9)"){
620                                        Console.WriteLine("300 x 176 (16:9)");
621                                        MiniScreenWidth=300;
622                                        MiniScreenHeight=176;
623                                       
624                                //      MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight);
625                                } else if(((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text=="300 x 225 (4:3)"){
626                                        Console.WriteLine("300 x 225 (4:3)" );
627                                        MiniScreenWidth=300;
628                                        MiniScreenHeight=225;
629                                       
630                                //      MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight);
631                                } else if(((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text=="200 x 150 (4:3)"){
632                                        Console.WriteLine("200 x 150 (4:3)");
633                                        MiniScreenWidth=200;
634                                        MiniScreenHeight=150;
635                                       
636                                //      MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight);
637                                } else if(((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text=="300 x 166 (9:5)"){
638                                        Console.WriteLine("300 x 166 (9:5)");
639                                        MiniScreenWidth=300;
640                                        MiniScreenHeight=166;
641                                       
642                                //      MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight);
643                                } else if(((Gtk.AccelLabel)((Gtk.MenuItem)obj).Children[0]).Text=="200 x 111 (9:5)"){
644                                        Console.WriteLine("200 x 111 (9:5)");   
645                                        MiniScreenWidth=200;
646                                        MiniScreenHeight=111;
647                                       
648                                //      MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight);
649                                }
650                               
651                                MiniScreen.Show();
652                                MiniScreen.SetSizeRequest(MiniScreenWidth,MiniScreenHeight);
653                                 //LliureXMiniScreen.Core.getCore().win.Move(MiniScreenPosition*(ScreenWidth-MiniScreenWidth), ScreenHeight);
654                        //Console.WriteLine("<><><><><><>"+ScreenHeight);
655                        //      Console.WriteLine("<><><><>-"+MiniScreenHeight);
656                        //      Console.WriteLine("________-_"+(ScreenHeight-MiniScreenHeight));
657                                //LliureXMiniScreen.Core.getCore().win.Move(0, 784);
658                               
659                       
660                                Console.WriteLine("Nou tam: "+MiniScreenWidth+","+MiniScreenHeight);
661                                MoveMiniScreen(MiniScreenPosition);
662                               
663
664                        } catch(Exception ex){
665                                Console.WriteLine("Exception: "+ex.Message);           
666                        }
667                       
668                }
669       
670       
671                void HandleMiniScreenButtonPressEvent (object o, ButtonPressEventArgs args)
672                {
673                       
674                        if(args.Event.Button==3) MiniScreenSettings();
675                        else{
676                                //Console.WriteLine("Press");
677                                Llista_Punts.Clear();
678                                int px, py;                                                                     // Posició de la minipantalla
679                                int miniscreen_size_x,miniscreen_size_y;                // dimensions de la minipantalla
680                                double pos_mouse_x, pos_mouse_y;                                // posició del ratolí en el clic
681                                double pos_mouse_x_global, pos_mouse_y_global;  // posició del ratolí en el clic referent al global de pa pantalla
682                               
683                                // Agafem les dimensions de la minipantalla
684                                MiniScreen.GetSizeRequest(out miniscreen_size_x, out miniscreen_size_y);
685                               
686                                // Agafem la posició del ratolí en el moment del clic
687                                pos_mouse_x=args.Event.X;
688                                pos_mouse_y=args.Event.Y;
689                               
690                                // Agafem la posició de la finestra
691                                //Gdk.Window root=Gdk.Global.ActiveWindow;
692                                //root.GetPosition(out px, out py);
693                                //LliureXMiniScreen.MainClass.win.GetPosition(out px, out py);
694                                LliureXMiniScreen.Core.getCore().win.GetPosition(out px, out py);
695                               
696                                // Posició global del ratolí en el clic (recalculada)
697                                pos_mouse_x_global=pos_mouse_x*ScreenWidth/this.MiniScreenWidth;
698                                pos_mouse_y_global=pos_mouse_y*ScreenHeight/this.MiniScreenHeight;
699                               
700                                // Mostrem la informació
701                                Console.WriteLine("Screen From: ("+px+","+py+") to ("+(px+miniscreen_size_x)+","+(py+miniscreen_size_y)+")");
702                                Console.WriteLine("Pointer at: ("+pos_mouse_x+ ","+pos_mouse_y+")");
703                                Console.WriteLine("Pointer at: ("+pos_mouse_x_global+ ","+pos_mouse_y_global+")");
704                               
705                                // Controlem si el clic és dins de la seua finestra de miniscreen
706                               
707                                if(pos_mouse_x_global>px && pos_mouse_x_global<px+miniscreen_size_x &&
708                                pos_mouse_y_global>py && pos_mouse_y_global<py+miniscreen_size_y)
709                                {
710                                        Console.WriteLine("ESTA DINS!!!");
711                                        Init();
712                       
713                                } else {
714                                        if(args.Event.Button==1){ // Si el botó era l'1...
715                                                BtnPressed=true; // Indiquem que el botó està polsat
716                                                Llista_Punts.Add(new Gdk.Point((int)pos_mouse_x, (int)pos_mouse_y));                           
717                                        }
718                                }
719                        }
720               
721                }
722                       
723               
724                protected void OnDeleteEvent (object sender, DeleteEventArgs a)
725                {
726                        Application.Quit ();
727                        a.RetVal = true;
728                }
729               
730                private bool DrawPreview(){
731                       
732                        Console.WriteLine(OldRefreshRate+"--------"+RefreshRate);
733                       
734                        if(OldRefreshRate==RefreshRate){
735                                if(!moving_mouse){
736                                       
737                                        Console.WriteLine("Drawing with ref rate..."+RefreshRate);
738                                       
739                                        int width = 0;
740                                        int height = 0;
741                                       
742                                        if(!BtnPressed){
743                                                try{
744                                                root = Gdk.Global.DefaultRootWindow;
745                                                       
746                                                // get its width and height
747                                                root.GetSize(out width, out height);
748                                                // create a new pixbuf from the root window
749                                                //try{
750                                                //LliureXMiniScreen.Core.getCore().win.Hide();
751                                                screenshot = Gdk.Pixbuf.FromDrawable(root, root.Colormap, 0,0, 0,0, width, height);
752                                               
753                                                int miniscreen_size_x,miniscreen_size_y;                // dimensions de la minipantalla
754                                                int px, py, win_px, win_py;
755                                                if (LliureXMiniScreen.Core.getCore().win!=null){
756                                                        LliureXMiniScreen.Core.getCore().win.GetPosition(out win_px, out win_py);
757                                                        MiniScreen.GetSizeRequest(out miniscreen_size_x, out miniscreen_size_y);
758                                                        px=MiniScreenPosition*(width-miniscreen_size_x);
759                                                        py=height-miniscreen_size_y;
760                                                                                                                       
761                                                        Console.WriteLine("Dibuixe en: ("+px+","+py+") una finestra de "+miniscreen_size_x+"x"+miniscreen_size_y);
762                                                        if (px!=win_px || py!=win_py) LliureXMiniScreen.Core.getCore().win.Move(px, py);
763                                                               
764                                                        // Amaguem la minipantallla
765                                                       
766                                                        // PATCH
767                                                        //Gdk.Pixbuf HiddenMiniScreen=new Pixbuf("/usr/share/icons/LliureX-Accessibility/llx-miniscreen-hide.png", miniscreen_size_x, miniscreen_size_y);       
768                                                        HiddenMiniScreen=new Pixbuf(InitScreenshot, px,py, MiniScreenWidth, MiniScreenHeight);
769                                                               
770                                                        // END PATCH
771                                                               
772                                                        Console.WriteLine("->"+HiddenMiniScreen.Width+" " + HiddenMiniScreen.Height);
773                                                        HiddenMiniScreen=HiddenMiniScreen.ScaleSimple(miniscreen_size_x, miniscreen_size_y, InterpType.Bilinear);
774                                                        HiddenMiniScreen.CopyArea(0,0, miniscreen_size_x, miniscreen_size_y,
775                                                                                        screenshot, px, py);
776                                                                                                               
777                                                        }
778                                                       
779                                                        //LliureXMiniScreen.Core.getCore().win.Activate();
780                                                //      LliureXMiniScreen.Core.getCore().win.Show();
781                                               
782                                                /*} catch (Exception exc){
783                                                        Console.WriteLine("Excepció...: "+exc);
784                                                }*/
785                                               
786                                                //Gdk.Pixbuf screenshot = Gdk.Pixbuf.FromDrawable(root, root.Colormap, 0,0, 0,0, width, height);
787                                                        //
788                                                        // Cal inserir una imatge al screenshot per poder ocultar la minifinestra a la captura!!!
789                                                        //
790                                                        screenshot=screenshot.ScaleSimple(this.MiniScreenWidth,this.MiniScreenHeight,InterpType.Bilinear);
791                                                }catch (Exception exc){
792                                                        Console.WriteLine("Excepció...: "+exc);
793                                                }
794                                        } 
795                                       
796                                        // Creem la imatge per emmagatzemar el pixbuf
797                                       
798                                        Gtk.Image MyImage=new Gtk.Image();
799                                        MyImage.Pixbuf=screenshot;
800                                       
801                                        // Agafem les dimensions de la finestra
802                                        Gdk.GC gc=((Gtk.DrawingArea)MiniScreen).Style.TextGC(Gtk.StateType.Normal);
803                                       
804                                        MiniScreen.GdkWindow.DrawPixbuf(gc, MyImage.Pixbuf, 0, 0, 0, 0, this.MiniScreenWidth, this.MiniScreenHeight, Gdk.RgbDither.Max , 0, 0);
805                                       
806                                        Cairo.Context context = Gdk.CairoHelper.Create(MiniScreen.GdkWindow);
807                       
808                                        if(BtnPressed){
809                                                double r=double.Parse((PathColor.Red).ToString())/65535;
810                                                double g=double.Parse((PathColor.Green).ToString())/65535;
811                                                double b=double.Parse((PathColor.Blue).ToString())/65535;
812                                               
813                                                context.Color=new Cairo.Color(r,g,b);
814                                                       
815                                                try{
816                                                        if(Llista_Punts.Count>1){
817                                                                context.LineWidth=3;
818                                                                context.MoveTo (Llista_Punts[0].X, Llista_Punts[0].Y);
819                                                                foreach(Gdk.Point p in Llista_Punts){
820                                                                        context.LineTo (p.X, p.Y);
821                                                                        context.MoveTo (p.X, p.Y);
822                                                                }
823                                                        }
824                                                        context.Stroke ();     
825                                                        context.FillPreserve();
826                                                }
827                                               
828                                                catch(Exception ex){
829                                                        Console.WriteLine("Exception: "+ex.Message);
830                                                }
831                                        }
832                               
833                                        ((IDisposable)context.Target).Dispose();
834                                        ((IDisposable)context).Dispose();
835                                       
836                                       
837                                        return true;
838                                }
839                        }else{
840                                //if(RefreshRate!=OldRefreshRate){
841                                        Console.WriteLine("Change refresg rate!!!");
842                                        OldRefreshRate=RefreshRate;
843                                        return false;
844                                //}
845                        }
846                        return false;
847               
848                       
849                }
850               
851               
852                /*[GLib.ConnectBefore]
853                protected virtual void OnSizeAllocated (object o, Gtk.SizeAllocatedArgs args)
854                {
855                        Console.WriteLine("ALLOCATION: "+args.Allocation.Width+" "+args.Allocation.Height);
856                        MiniScreenWidth=args.Allocation.Width;
857                        MiniScreenHeight=args.Allocation.Height;
858                }*/
859               
860       
861                public void ExecuteCommandSync(String firstCommand, object command)
862                {
863        try
864        {
865                // create the ProcessStartInfo using "cmd" as the program to be run,
866                // and "/c " as the parameters.
867                // Incidentally, /c tells cmd that we want it to execute the command that follows,
868                // and then exit.
869                        System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo(firstCommand, command.ToString());
870       
871                // The following commands are needed to redirect the standard output.
872                // This means that it will be redirected to the Process.StandardOutput StreamReader.
873                procStartInfo.RedirectStandardOutput = true;
874                procStartInfo.UseShellExecute = false;
875                // Do not create the black window.
876                procStartInfo.CreateNoWindow = true;
877                // Now we create a process, assign its ProcessStartInfo and start it
878                System.Diagnostics.Process proc = new System.Diagnostics.Process();
879                proc.StartInfo = procStartInfo;
880                proc.Start();
881                // Get the output into a string
882                string result = proc.StandardOutput.ReadToEnd();
883                // Display the command output.
884                Console.WriteLine(result);
885                }
886                catch (Exception objException)
887                {
888                                Console.WriteLine("*******************************************************"+objException.ToString());
889                // Log the exception
890                }
891                }       
892               
893               
894               
895               
896        }
897}
Note: See TracBrowser for help on using the repository browser.