1
0
mirror of https://github.com/moparisthebest/Simba synced 2025-02-26 00:11:51 -05:00

Added a Window Selector for Linux.

git-svn-id: http://www.villavu.com/repositories/merlijn/mufasa@87 3f818213-9676-44b0-a9b4-5e4c4e03d09d
This commit is contained in:
Wizzup? 2009-09-23 20:18:33 +00:00
parent 2a00089fc6
commit 7806e9ceac
8 changed files with 857 additions and 719 deletions

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,8 @@ uses
{$ENDIF}{$ENDIF} {$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset Interfaces, // this includes the LCL widgetset
Forms, LResources, Window, files, MufasaTypes, Client, TestUnit, finder, Forms, LResources, Window, files, MufasaTypes, Client, TestUnit, finder,
MMLThread, mmlpsthread, bitmaps, colour_conv, plugins, DTM, colourpicker; MMLThread, mmlpsthread, bitmaps, colour_conv, plugins, DTM, colourpicker,
windowselector;
{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF} {$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}

View File

@ -1,7 +1,7 @@
object Form1: TForm1 object Form1: TForm1
Left = 1128 Left = 1103
Height = 541 Height = 541
Top = 149 Top = 82
Width = 763 Width = 763
ActiveControl = SynEdit1 ActiveControl = SynEdit1
Caption = 'Mufasa v2' Caption = 'Mufasa v2'
@ -794,8 +794,8 @@ object Form1: TForm1
Left = 168 Left = 168
Top = 2 Top = 2
Caption = 'TB_SelectClient' Caption = 'TB_SelectClient'
Enabled = False
ImageIndex = 7 ImageIndex = 7
OnMouseDown = Selector_DOWN
end end
object ToolButton8: TToolButton object ToolButton8: TToolButton
Left = 191 Left = 191

File diff suppressed because it is too large Load Diff

View File

@ -12,7 +12,8 @@ uses
mmlpsthread, mmlpsthread,
mmlthread, mmlthread,
window, // for the comp picker and selector window, // for the comp picker and selector
colourpicker colourpicker,
windowselector
; ;
type type
@ -47,11 +48,14 @@ type
procedure FormDestroy(Sender: TObject); procedure FormDestroy(Sender: TObject);
procedure MenuItemRunClick(Sender: TObject); procedure MenuItemRunClick(Sender: TObject);
procedure PickColorEvent(Sender: TObject); procedure PickColorEvent(Sender: TObject);
procedure Selector_DOWN(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private private
{ private declarations } { private declarations }
public public
Window: TMWindow; Window: TMWindow;
Picker: TMColorPicker; Picker: TMColorPicker;
Selector: TMWindowSelector;
{ public declarations } { public declarations }
end; end;
@ -91,6 +95,7 @@ procedure TForm1.FormCreate(Sender: TObject);
begin begin
Window := TMWindow.Create; Window := TMWindow.Create;
Picker := TMColorPicker.Create(Window); Picker := TMColorPicker.Create(Window);
Selector := TMWindowSelector.Create(Window);
MainDir:= ExtractFileDir(Application.ExeName); MainDir:= ExtractFileDir(Application.ExeName);
PluginsGlob := TMPlugins.Create; PluginsGlob := TMPlugins.Create;
@ -100,6 +105,7 @@ end;
procedure TForm1.FormDestroy(Sender: TObject); procedure TForm1.FormDestroy(Sender: TObject);
begin begin
Selector.Free;
Picker.Free; Picker.Free;
Window.Free; Window.Free;
PluginsGlob.Free; PluginsGlob.Free;
@ -118,6 +124,13 @@ begin
writeln('Picked colour: ' + inttostr(c) + ' at (' + inttostr(x) + ', ' + inttostr(y) + ')'); writeln('Picked colour: ' + inttostr(c) + ' at (' + inttostr(x) + ', ' + inttostr(y) + ')');
end; end;
procedure TForm1.Selector_DOWN(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Window.SetTarget(Selector.Drag);
writeln('New window: ' + IntToStr(Window.CurWindow));
end;
initialization initialization
{$I testunit.lrs} {$I testunit.lrs}

View File

@ -0,0 +1,107 @@
unit windowselector;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils,
ctypes,
window, windowutil,
{$IFNDEF MSWINDOWS}x, xlib
{$ELSE}
windows
{$ENDIF}
;
type
TMWindowSelector = class(TObject)
constructor Create(aWindow: TMWindow);
destructor Destroy; override;
{$IFDEF LINUX}
function Drag: x.TWindow;
{$ELSE}
function Drag: Hwnd;
{$ENDIF}
public
Window: TMWindow;
end;
implementation
constructor TMWindowSelector.Create(aWindow: TMWindow);
begin
inherited create;
Self.Window := aWindow;
end;
destructor TMWindowSelector.Destroy;
begin
inherited;
end;
{$IFDEF LINUX}
function TMWindowSelector.Drag: x.TWindow;
var
Tempwindow : x.TWindow;
root : x.TWindow;
subwindow : x.TWindow;
x_root, y_root : cint;
xmask : cuint;
x, y : cint;
Old_Handler : TXErrorHandler;
begin
Old_Handler := XSetErrorHandler(@MufasaXErrorHandler);
Result := 0;
repeat
XQueryPointer(Window.XDisplay, Window.DesktopWindow, @root,
@Tempwindow, @x_root, @y_root,
@x, @y, @xmask);
subwindow:= Tempwindow;
while subwindow <> 0 do
begin
Tempwindow := subwindow;
XQueryPointer(Window.XDisplay, Tempwindow, @root,
@subwindow, @x_root, @y_root,
@x, @y, @xmask);
end;
if Result <> Tempwindow then
begin
WriteLn('Changing Window to: ' + IntToStr(Tempwindow));
Result := Tempwindow;
end;
Sleep(16);
until (xmask and Button1Mask) = 0;
XSetErrorHandler(Old_handler);
end;
{$ELSE}
function TMWindowSelector.Drag: Hwnd;
begin
// Moet jij maar ff doen, ray.
end;
{$ENDIF}
end.

View File

@ -190,7 +190,7 @@ begin
{$IFDEF WINDOWS} {$IFDEF WINDOWS}
Self.SetTarget(Window.TargetHandle, Window.TargetMode); Self.SetTarget(Window.TargetHandle, Window.TargetMode);
{$ELSE} {$ELSE}
writeln('TMWindow.SetWindow - HDC not supported'); writeln('TMWindow.SetWindow - Handle not supported');
{$ENDIF} {$ENDIF}
// I don't think array can ever be set at this point. // I don't think array can ever be set at this point.

View File

@ -17,7 +17,6 @@ uses
{$IFDEF LINUX} {$IFDEF LINUX}
Procedure XImageToRawImage(XImg: PXImage; Var RawImage: TRawImage); Procedure XImageToRawImage(XImg: PXImage; Var RawImage: TRawImage);
function MufasaXErrorHandler(para1:PDisplay; para2:PXErrorEvent):cint;cdecl; function MufasaXErrorHandler(para1:PDisplay; para2:PXErrorEvent):cint;cdecl;
function MouseWindow: x.TWindow;
{$ENDIF} {$ENDIF}
Procedure ArrDataToRawImage(Ptr: PRGB32; Size: TPoint; Var RawImage: TRawImage); Procedure ArrDataToRawImage(Ptr: PRGB32; Size: TPoint; Var RawImage: TRawImage);
@ -129,17 +128,6 @@ Begin
RawImage.Data := PByte(Ptr); RawImage.Data := PByte(Ptr);
End; End;
{$IFDEF LINUX}
function MouseWindow: x.TWindow;
var
Old_Handler: TXErrorHandler;
begin
Old_Handler := XSetErrorHandler(@MufasaXErrorHandler);
XSetErrorHandler(Old_Handler);
end;
{$ENDIF}
end. end.