mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 16:00:16 +02:00
MUI: custom class Drawroutine to own eventhandler for easier debugging
git-svn-id: trunk@54455 -
This commit is contained in:
parent
f3a6a4e47b
commit
e3c7e8abc3
@ -1580,96 +1580,26 @@ begin
|
||||
//writeln('ShiftState AROS: ', HexStr(Pointer(State)), ' and ', HexStr(Pointer(IEQUALIFIER_LALT)),' -> ', HexStr(Pointer(Result)));
|
||||
end;
|
||||
|
||||
function Dispatcher(cl: PIClass; Obj: PObject_; Msg: intuition.PMsg): longword;
|
||||
|
||||
{ ######################################################################
|
||||
DRAW Event for Dispatcher}
|
||||
function DrawEvent(cl: PIClass; Obj: PObject_; Msg: intuition.PMsg): longword;
|
||||
var
|
||||
MUIB: TMUIObject;
|
||||
Buffered: Boolean;
|
||||
ri: PMUI_RenderInfo;
|
||||
rp: PRastPort;
|
||||
li: pLayer_Info;
|
||||
clip: Pointer;
|
||||
MUIB: TMUIObject;
|
||||
MUIParent: TMUIObject;
|
||||
p: TMUIObject;
|
||||
HEMsg: PMUIP_HandleEvent;
|
||||
iMsg: PIntuiMessage;
|
||||
winObj: PObject_;
|
||||
relX, relY: Integer;
|
||||
Buff: array[0..19] of Char;
|
||||
Ret: Integer;
|
||||
CharCode: Word;
|
||||
KeyData: PtrInt;
|
||||
KeyUp: Boolean;
|
||||
ie: TInputEvent;
|
||||
Win: PWindow;
|
||||
CurTime: Int64;
|
||||
MUIWin: TMUIWindow;
|
||||
Buffered: Boolean;
|
||||
WithScrollbars: Boolean;
|
||||
PaintX, PaintY: Integer;
|
||||
PaintH, PaintW: Integer;
|
||||
IsSysKey: Boolean;
|
||||
EatEvent: Boolean;
|
||||
Key: Char;
|
||||
i: Integer;
|
||||
li: pLayer_Info;
|
||||
{$ifdef AmigaOS4}
|
||||
data: PIntuiWheelData;
|
||||
{$endif}
|
||||
begin
|
||||
Result := 0;
|
||||
MUIB := nil;
|
||||
MUIWin := nil;
|
||||
//write('Enter Dispatcher with: ', Msg^.MethodID);
|
||||
case Msg^.MethodID of
|
||||
// ################# Setup EVENT #######################################
|
||||
MUIM_SETUP: begin
|
||||
//writeln(' setup');
|
||||
Result := DoSuperMethodA(cl, obj, msg);
|
||||
MUIB := TMUIObject(INST_DATA(cl, Pointer(obj))^);
|
||||
if Assigned(MUIB) then
|
||||
begin
|
||||
New(MUIB.EHNode);
|
||||
FillChar(MUIB.EHNode^, SizeOf(MUIB.EHNode^), 0);
|
||||
P := MUIB;
|
||||
MUIB.EHNode^.ehn_Priority := Byte(-100);
|
||||
repeat
|
||||
Inc(MUIB.EHNode^.ehn_Priority);
|
||||
p := p.Parent;
|
||||
until P = nil;
|
||||
|
||||
MUIB.EHNode^.ehn_Flags := 0;
|
||||
MUIB.EHNode^.ehn_Object := obj;
|
||||
MUIB.EHNode^.ehn_Class := cl;
|
||||
MUIB.EHNode^.ehn_Events := IDCMP_MOUSEBUTTONS or IDCMP_MOUSEMOVE or IDCMP_RAWKEY;
|
||||
{$ifdef AmigaOS4}
|
||||
MUIB.EHNode^.ehn_Events := MUIB.EHNode^.ehn_Events or IDCMP_EXTENDEDMOUSE;
|
||||
{$endif}
|
||||
winObj := OBJ_win(obj);
|
||||
ri := MUIRenderInfo(Obj);
|
||||
WinObj := ri^.mri_WindowObject;
|
||||
DoMethod(WinObj, [MUIM_Window_AddEventHandler, NativeUInt(MUIB.EHNode)]);
|
||||
|
||||
//MUIB.SetAttObj(Obj, [MUIA_FillArea, LFalse]);
|
||||
end;
|
||||
//MUI_RequestIDCMP(Obj, IDCMP_MOUSEBUTTONS);
|
||||
end;
|
||||
// ################# Cleanup EVENT #####################################
|
||||
MUIM_CLEANUP: begin
|
||||
//write(' cleanup');
|
||||
MUIB := TMUIObject(INST_DATA(cl, Pointer(obj))^);
|
||||
if Assigned(MUIB) then
|
||||
begin
|
||||
DoMethod(OBJ_win(obj), [MUIM_Window_RemEventHandler, NativeUInt(MUIB.EHNode)]);
|
||||
Dispose(MUIB.EHNode);
|
||||
MUIB.EHNode := nil;
|
||||
end;
|
||||
Result := DoSuperMethodA(cl, obj, msg);
|
||||
//MUI_RejectIDCMP(Obj, IDCMP_MOUSEBUTTONS);
|
||||
end;
|
||||
// ################# DRAW EVENT ########################################
|
||||
MUIM_Draw:
|
||||
begin
|
||||
//sysdebugln('->>DRAW');
|
||||
//if (PMUIP_Draw(msg)^.Flags and MADF_DRAWOBJECT <> 0) then
|
||||
//if (PMUIP_Draw(msg)^.Flags and MADF_DRAWOBJECT = 0) then
|
||||
// Exit;
|
||||
Buffered := True;
|
||||
rp := nil;
|
||||
ri := MUIRenderInfo(Obj);
|
||||
if Assigned(ri) then
|
||||
@ -1779,6 +1709,92 @@ begin
|
||||
end;
|
||||
Result := 0;
|
||||
end;
|
||||
{END Draw event
|
||||
########################################################################}
|
||||
|
||||
|
||||
function Dispatcher(cl: PIClass; Obj: PObject_; Msg: intuition.PMsg): longword;
|
||||
var
|
||||
MUIB: TMUIObject;
|
||||
MUIParent: TMUIObject;
|
||||
p: TMUIObject;
|
||||
HEMsg: PMUIP_HandleEvent;
|
||||
ri: PMUI_RenderInfo;
|
||||
iMsg: PIntuiMessage;
|
||||
winObj: PObject_;
|
||||
relX, relY: Integer;
|
||||
Buff: array[0..19] of Char;
|
||||
Ret: Integer;
|
||||
CharCode: Word;
|
||||
KeyData: PtrInt;
|
||||
KeyUp: Boolean;
|
||||
ie: TInputEvent;
|
||||
Win: PWindow;
|
||||
CurTime: Int64;
|
||||
MUIWin: TMUIWindow;
|
||||
IsSysKey: Boolean;
|
||||
EatEvent: Boolean;
|
||||
Key: Char;
|
||||
i: Integer;
|
||||
{$ifdef AmigaOS4}
|
||||
data: PIntuiWheelData;
|
||||
{$endif}
|
||||
begin
|
||||
Result := 0;
|
||||
MUIB := nil;
|
||||
MUIWin := nil;
|
||||
//write('Enter Dispatcher with: ', Msg^.MethodID);
|
||||
case Msg^.MethodID of
|
||||
// ################# Setup EVENT #######################################
|
||||
MUIM_SETUP: begin
|
||||
//writeln(' setup');
|
||||
Result := DoSuperMethodA(cl, obj, msg);
|
||||
MUIB := TMUIObject(INST_DATA(cl, Pointer(obj))^);
|
||||
if Assigned(MUIB) then
|
||||
begin
|
||||
New(MUIB.EHNode);
|
||||
FillChar(MUIB.EHNode^, SizeOf(MUIB.EHNode^), 0);
|
||||
P := MUIB;
|
||||
MUIB.EHNode^.ehn_Priority := Byte(-100);
|
||||
repeat
|
||||
Inc(MUIB.EHNode^.ehn_Priority);
|
||||
p := p.Parent;
|
||||
until P = nil;
|
||||
|
||||
MUIB.EHNode^.ehn_Flags := 0;
|
||||
MUIB.EHNode^.ehn_Object := obj;
|
||||
MUIB.EHNode^.ehn_Class := cl;
|
||||
MUIB.EHNode^.ehn_Events := IDCMP_MOUSEBUTTONS or IDCMP_MOUSEMOVE or IDCMP_RAWKEY;
|
||||
{$ifdef AmigaOS4}
|
||||
MUIB.EHNode^.ehn_Events := MUIB.EHNode^.ehn_Events or IDCMP_EXTENDEDMOUSE;
|
||||
{$endif}
|
||||
winObj := OBJ_win(obj);
|
||||
ri := MUIRenderInfo(Obj);
|
||||
WinObj := ri^.mri_WindowObject;
|
||||
DoMethod(WinObj, [MUIM_Window_AddEventHandler, NativeUInt(MUIB.EHNode)]);
|
||||
|
||||
//MUIB.SetAttObj(Obj, [MUIA_FillArea, LFalse]);
|
||||
end;
|
||||
//MUI_RequestIDCMP(Obj, IDCMP_MOUSEBUTTONS);
|
||||
end;
|
||||
// ################# Cleanup EVENT #####################################
|
||||
MUIM_CLEANUP: begin
|
||||
//write(' cleanup');
|
||||
MUIB := TMUIObject(INST_DATA(cl, Pointer(obj))^);
|
||||
if Assigned(MUIB) then
|
||||
begin
|
||||
DoMethod(OBJ_win(obj), [MUIM_Window_RemEventHandler, NativeUInt(MUIB.EHNode)]);
|
||||
Dispose(MUIB.EHNode);
|
||||
MUIB.EHNode := nil;
|
||||
end;
|
||||
Result := DoSuperMethodA(cl, obj, msg);
|
||||
//MUI_RejectIDCMP(Obj, IDCMP_MOUSEBUTTONS);
|
||||
end;
|
||||
// ################# DRAW EVENT ########################################
|
||||
MUIM_Draw:
|
||||
begin
|
||||
Result := DrawEvent(cl, obj, Msg);
|
||||
end;
|
||||
// ################# Handle EVENT ######################################
|
||||
MUIM_HANDLEEVENT: begin
|
||||
Result := 0;
|
||||
|
Loading…
Reference in New Issue
Block a user