MUI: custom class Drawroutine to own eventhandler for easier debugging

git-svn-id: trunk@54455 -
This commit is contained in:
marcus 2017-03-21 20:20:26 +00:00
parent f3a6a4e47b
commit e3c7e8abc3

View File

@ -1580,96 +1580,26 @@ begin
//writeln('ShiftState AROS: ', HexStr(Pointer(State)), ' and ', HexStr(Pointer(IEQUALIFIER_LALT)),' -> ', HexStr(Pointer(Result))); //writeln('ShiftState AROS: ', HexStr(Pointer(State)), ' and ', HexStr(Pointer(IEQUALIFIER_LALT)),' -> ', HexStr(Pointer(Result)));
end; 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 var
MUIB: TMUIObject;
Buffered: Boolean;
ri: PMUI_RenderInfo; ri: PMUI_RenderInfo;
rp: PRastPort; rp: PRastPort;
li: pLayer_Info;
clip: Pointer; 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; WithScrollbars: Boolean;
PaintX, PaintY: Integer; PaintX, PaintY: Integer;
PaintH, PaintW: Integer; PaintH, PaintW: Integer;
IsSysKey: Boolean;
EatEvent: Boolean;
Key: Char;
i: Integer;
li: pLayer_Info;
{$ifdef AmigaOS4}
data: PIntuiWheelData;
{$endif}
begin 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))^); 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'); //sysdebugln('->>DRAW');
//if (PMUIP_Draw(msg)^.Flags and MADF_DRAWOBJECT <> 0) then //if (PMUIP_Draw(msg)^.Flags and MADF_DRAWOBJECT = 0) then
// Exit; // Exit;
Buffered := True;
rp := nil; rp := nil;
ri := MUIRenderInfo(Obj); ri := MUIRenderInfo(Obj);
if Assigned(ri) then if Assigned(ri) then
@ -1778,6 +1708,92 @@ begin
MUIB.DoChildRedraw(); MUIB.DoChildRedraw();
end; end;
Result := 0; 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; end;
// ################# Handle EVENT ###################################### // ################# Handle EVENT ######################################
MUIM_HANDLEEVENT: begin MUIM_HANDLEEVENT: begin