mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-25 04:08:22 +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)));
|
//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
|
||||||
|
Loading…
Reference in New Issue
Block a user