123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397 |
- {$INCLUDE xunikey.inc}
- Constructor TX11Display.Create;
- Begin
- m_disp := Nil;
- m_colours := Nil;
- m_cmap := 0;
- m_flags := 0;
- m_width := 0;
- m_height := 0;
- m_functionkeys := Nil;
- m_normalkeys := Nil;
- m_copy := Nil;
- m_clear := Nil;
- m_palette := Nil;
- m_clip := Nil;
- m_area := Nil;
- m_format := Nil;
-
- m_copy := TPTCCopy.Create;
- m_clear := TPTCClear.Create;
- m_palette := TPTCPalette.Create;
- m_clip := TPTCArea.Create;
- m_area := TPTCArea.Create;
- m_format := TPTCFormat.Create;
-
- setKeyMapping;
- End;
- Destructor TX11Display.Destroy;
- Begin
- // Writeln('lll1');
- { Just close the display, everything else is done by the subclasses }
- If (m_disp <> Nil) And ((m_flags And PTC_X11_LEAVE_DISPLAY) = 0) Then
- Begin
- // Writeln('lalalalala1');
- XFlush(m_disp);
- // Writeln('lalalalala2');
- XCloseDisplay(m_disp);
- // Writeln('lalalalala3');
- m_disp := Nil;
- // Writeln('lalalalala4');
- End;
- // Writeln('lll2');
- FreeMemAndNil(m_normalkeys);
- FreeMemAndNil(m_functionkeys);
- // Writeln('lll3');
-
- m_copy.Free;
- m_clear.Free;
- m_palette.Free;
- m_clip.Free;
- m_area.Free;
- m_format.Free;
-
- Inherited Destroy;
- End;
- Procedure TX11Display.load(Const pixels : Pointer; _width, _height, _pitch : Integer;
- Const _format : TPTCFormat; Const _palette : TPTCPalette);
- Var
- Area_ : TPTCArea;
- console_pixels : Pointer;
- Begin
- If clip.Equals(area) Then
- Begin
- console_pixels := lock;
- Try
- Try
- m_copy.request(_format, format);
- m_copy.palette(_palette, palette);
- m_copy.copy(pixels, 0, 0, _width, _height, _pitch, console_pixels, 0, 0,
- width, height, pitch);
- Except
- On error : TPTCError Do
- Begin
- Raise TPTCError.Create('failed to load pixels to console', error);
- End;
- End;
- Finally
- unlock;
- End;
- End
- Else
- Begin
- Area_ := TPTCArea.Create(0, 0, width, height);
- Try
- load(pixels, _width, _height, _pitch, _format, _palette, Area_, area);
- Finally
- Area_.Free;
- End;
- End;
- End;
- Procedure TX11Display.load(Const pixels : Pointer; _width, _height, _pitch : Integer;
- Const _format : TPTCFormat; Const _palette : TPTCPalette;
- Const source, destination : TPTCArea);
- Var
- console_pixels : Pointer;
- clipped_source, clipped_destination : TPTCArea;
- tmp : TPTCArea;
- Begin
- clipped_destination := Nil;
- clipped_source := TPTCArea.Create;
- Try
- clipped_destination := TPTCArea.Create;
- console_pixels := lock;
- Try
- Try
- tmp := TPTCArea.Create(0, 0, _width, _height);
- Try
- TPTCClipper.clip(source, tmp, clipped_source, destination, clip, clipped_destination);
- Finally
- tmp.Free;
- End;
- m_copy.request(_format, format);
- m_copy.palette(_palette, palette);
- m_copy.copy(pixels, clipped_source.left, clipped_source.top, clipped_source.width, clipped_source.height, _pitch,
- console_pixels, clipped_destination.left, clipped_destination.top, clipped_destination.width, clipped_destination.height, pitch);
- Except
- On error:TPTCError Do
- Begin
- Raise TPTCError.Create('failed to load pixels to console area', error);
- End;
- End;
- Finally
- unlock;
- End;
- Finally
- clipped_source.Free;
- clipped_destination.Free;
- End;
- End;
- Procedure TX11Display.save(pixels : Pointer; _width, _height, _pitch : Integer;
- Const _format : TPTCFormat; Const _palette : TPTCPalette);
- Begin
- End;
- Procedure TX11Display.save(pixels : Pointer; _width, _height, _pitch : Integer;
- Const _format : TPTCFormat; Const _palette : TPTCPalette;
- Const source, destination : TPTCArea);
- Begin
- End;
- Procedure TX11Display.clear(Const color : TPTCColor);
- Begin
- End;
- Procedure TX11Display.clear(Const color : TPTCColor; Const _area : TPTCArea);
- Begin
- End;
- Function TX11Display.palette : TPTCPalette;
- Begin
- {...}
- palette := m_palette;
- End;
- Procedure TX11Display.clip(Const _area : TPTCArea);
- Begin
- m_clip.ASSign(_area);
- End;
- Function TX11Display.width : Integer;
- Begin
- width := m_width;
- End;
- Function TX11Display.height : Integer;
- Begin
- height := m_height;
- End;
- Function TX11Display.clip : TPTCArea;
- Begin
- clip := m_clip;
- End;
- Function TX11Display.area : TPTCArea;
- Var
- tmp : TPTCArea;
- Begin
- tmp := TPTCArea.Create(0, 0, m_width, m_height);
- Try
- m_area.ASSign(tmp);
- Finally
- tmp.Free;
- End;
- area := m_area;
- End;
- Function TX11Display.format : TPTCFormat;
- Begin
- format := m_format;
- End;
- Procedure TX11Display.flags(_flags : LongInt);
- Begin
- m_flags := _flags;
- End;
- Function TX11Display.getX11Display : PDisplay;
- Begin
- getX11Display := m_disp;
- End;
- Function TX11Display.getX11Screen : Integer;
- Begin
- getX11Screen := m_screen;
- End;
- Function TX11Display.getFormat(Const _format : TPTCFormat) : TPTCFormat;
- Var
- tmp_depth : Integer;
- numfound : Integer;
- i : Integer;
- pfv : PXPixmapFormatValues;
- Begin
- getFormat := Nil;
-
- { Check if our screen has the same format available. I hate how X }
- { keeps bits_per_pixel and depth different }
- tmp_depth := (PXPrivDisplay(m_disp))^.screens[m_screen].root_depth;
-
- pfv := XListPixmapFormats(m_disp, @numfound);
- Try
- For i := 0 To numfound - 1 Do
- Begin
- If pfv[i].depth = tmp_depth Then
- Begin
- tmp_depth := pfv[i].bits_per_pixel;
- End;
- End;
- Finally
- XFree(pfv);
- End;
-
- If (tmp_depth = 8) And _format.indexed Then
- getFormat := TPTCFormat.Create(8)
- Else
- If (tmp_depth = 8) And _format.direct Then
- getFormat := TPTCFormat.Create(8, $E0, $1C, $03)
- Else
- getFormat := TPTCFormat.Create(tmp_depth,
- (PXPrivDisplay(m_disp))^.screens[m_screen].root_visual^.red_mask,
- (PXPrivDisplay(m_disp))^.screens[m_screen].root_visual^.green_mask,
- (PXPrivDisplay(m_disp))^.screens[m_screen].root_visual^.blue_mask);
- End;
- Procedure TX11Display.setKeyMapping;
- Var
- _I : Integer;
- Begin
- FreeMemAndNil(m_functionkeys);
- FreeMemAndNil(m_normalkeys);
- m_functionkeys := GetMem(256 * SizeOf(Integer));
- m_normalkeys := GetMem(256 * SizeOf(Integer));
-
- For _I := 0 To 255 Do
- Begin
- m_functionkeys[_I] := Integer(PTCKEY_UNDEFINED);
- m_normalkeys[_I] := Integer(PTCKEY_UNDEFINED);
- End;
-
- { Assign function key indices from X definitions }
- m_functionkeys[$FF And XK_BackSpace] := Integer(PTCKEY_BACKSPACE);
- m_functionkeys[$FF And XK_Tab] := Integer(PTCKEY_TAB);
- m_functionkeys[$FF And XK_Clear] := Integer(PTCKEY_CLEAR);
- m_functionkeys[$FF And XK_Return] := Integer(PTCKEY_ENTER);
- m_functionkeys[$FF And XK_Pause] := Integer(PTCKEY_PAUSE);
- m_functionkeys[$FF And XK_Scroll_Lock] := Integer(PTCKEY_SCROLLLOCK);
- m_functionkeys[$FF And XK_Escape] := Integer(PTCKEY_ESCAPE);
- m_functionkeys[$FF And XK_Delete] := Integer(PTCKEY_DELETE);
- m_functionkeys[$FF And XK_Kanji] := Integer(PTCKEY_KANJI);
-
- m_functionkeys[$FF And XK_Home] := Integer(PTCKEY_HOME);
- m_functionkeys[$FF And XK_Left] := Integer(PTCKEY_LEFT);
- m_functionkeys[$FF And XK_Up] := Integer(PTCKEY_UP);
- m_functionkeys[$FF And XK_Right] := Integer(PTCKEY_RIGHT);
- m_functionkeys[$FF And XK_Down] := Integer(PTCKEY_DOWN);
- m_functionkeys[$FF And XK_Page_Up] := Integer(PTCKEY_PAGEUP);
- m_functionkeys[$FF And XK_Page_Down] := Integer(PTCKEY_PAGEDOWN);
- m_functionkeys[$FF And XK_End] := Integer(PTCKEY_END);
-
- m_functionkeys[$FF And XK_Print] := Integer(PTCKEY_PRINTSCREEN);
- m_functionkeys[$FF And XK_Insert] := Integer(PTCKEY_INSERT);
- m_functionkeys[$FF And XK_Num_Lock] := Integer(PTCKEY_NUMLOCK);
- m_functionkeys[$FF And XK_KP_0] := Integer(PTCKEY_NUMPAD0);
- m_functionkeys[$FF And XK_KP_1] := Integer(PTCKEY_NUMPAD1);
- m_functionkeys[$FF And XK_KP_2] := Integer(PTCKEY_NUMPAD2);
- m_functionkeys[$FF And XK_KP_3] := Integer(PTCKEY_NUMPAD3);
- m_functionkeys[$FF And XK_KP_4] := Integer(PTCKEY_NUMPAD4);
- m_functionkeys[$FF And XK_KP_5] := Integer(PTCKEY_NUMPAD5);
- m_functionkeys[$FF And XK_KP_6] := Integer(PTCKEY_NUMPAD6);
- m_functionkeys[$FF And XK_KP_7] := Integer(PTCKEY_NUMPAD7);
- m_functionkeys[$FF And XK_KP_8] := Integer(PTCKEY_NUMPAD8);
- m_functionkeys[$FF And XK_KP_9] := Integer(PTCKEY_NUMPAD9);
- m_functionkeys[$FF And XK_F1] := Integer(PTCKEY_F1);
- m_functionkeys[$FF And XK_F2] := Integer(PTCKEY_F2);
- m_functionkeys[$FF And XK_F3] := Integer(PTCKEY_F3);
- m_functionkeys[$FF And XK_F4] := Integer(PTCKEY_F4);
- m_functionkeys[$FF And XK_F5] := Integer(PTCKEY_F5);
- m_functionkeys[$FF And XK_F6] := Integer(PTCKEY_F6);
- m_functionkeys[$FF And XK_F7] := Integer(PTCKEY_F7);
- m_functionkeys[$FF And XK_F8] := Integer(PTCKEY_F8);
- m_functionkeys[$FF And XK_F9] := Integer(PTCKEY_F9);
- m_functionkeys[$FF And XK_F10] := Integer(PTCKEY_F10);
- m_functionkeys[$FF And XK_F11] := Integer(PTCKEY_F11);
- m_functionkeys[$FF And XK_F12] := Integer(PTCKEY_F12);
- m_functionkeys[$FF And XK_Shift_L] := Integer(PTCKEY_SHIFT);
- m_functionkeys[$FF And XK_Shift_R] := Integer(PTCKEY_SHIFT);
- m_functionkeys[$FF And XK_Control_L] := Integer(PTCKEY_CONTROL);
- m_functionkeys[$FF And XK_Control_R] := Integer(PTCKEY_CONTROL);
- m_functionkeys[$FF And XK_Caps_Lock] := Integer(PTCKEY_CAPSLOCK);
- m_functionkeys[$FF And XK_Meta_L] := Integer(PTCKEY_META);
- m_functionkeys[$FF And XK_Meta_R] := Integer(PTCKEY_META);
- m_functionkeys[$FF And XK_Alt_L] := Integer(PTCKEY_ALT);
- m_functionkeys[$FF And XK_Alt_R] := Integer(PTCKEY_ALT);
- { Assign normal key indices }
- m_normalkeys[$FF And XK_space] := Integer(PTCKEY_SPACE);
- m_normalkeys[$FF And XK_comma] := Integer(PTCKEY_COMMA);
- m_normalkeys[$FF And XK_minus] := Integer(PTCKEY_SUBTRACT);
- m_normalkeys[$FF And XK_period] := Integer(PTCKEY_PERIOD);
- m_normalkeys[$FF And XK_slash] := Integer(PTCKEY_SLASH);
- m_normalkeys[$FF And XK_0] := Integer(PTCKEY_ZERO);
- m_normalkeys[$FF And XK_1] := Integer(PTCKEY_ONE);
- m_normalkeys[$FF And XK_2] := Integer(PTCKEY_TWO);
- m_normalkeys[$FF And XK_3] := Integer(PTCKEY_THREE);
- m_normalkeys[$FF And XK_4] := Integer(PTCKEY_FOUR);
- m_normalkeys[$FF And XK_5] := Integer(PTCKEY_FIVE);
- m_normalkeys[$FF And XK_6] := Integer(PTCKEY_SIX);
- m_normalkeys[$FF And XK_7] := Integer(PTCKEY_SEVEN);
- m_normalkeys[$FF And XK_8] := Integer(PTCKEY_EIGHT);
- m_normalkeys[$FF And XK_9] := Integer(PTCKEY_NINE);
- m_normalkeys[$FF And XK_semicolon] := Integer(PTCKEY_SEMICOLON);
- m_normalkeys[$FF And XK_equal] := Integer(PTCKEY_EQUALS);
- m_normalkeys[$FF And XK_bracketleft] := Integer(PTCKEY_OPENBRACKET);
- m_normalkeys[$FF And XK_backslash] := Integer(PTCKEY_BACKSLASH);
- m_normalkeys[$FF And XK_bracketright] := Integer(PTCKEY_CLOSEBRACKET);
- m_normalkeys[$FF And XK_a] := Integer(PTCKEY_A);
- m_normalkeys[$FF And XK_b] := Integer(PTCKEY_B);
- m_normalkeys[$FF And XK_c] := Integer(PTCKEY_C);
- m_normalkeys[$FF And XK_d] := Integer(PTCKEY_D);
- m_normalkeys[$FF And XK_e] := Integer(PTCKEY_E);
- m_normalkeys[$FF And XK_f] := Integer(PTCKEY_F);
- m_normalkeys[$FF And XK_g] := Integer(PTCKEY_G);
- m_normalkeys[$FF And XK_h] := Integer(PTCKEY_H);
- m_normalkeys[$FF And XK_i] := Integer(PTCKEY_I);
- m_normalkeys[$FF And XK_j] := Integer(PTCKEY_J);
- m_normalkeys[$FF And XK_k] := Integer(PTCKEY_K);
- m_normalkeys[$FF And XK_l] := Integer(PTCKEY_L);
- m_normalkeys[$FF And XK_m] := Integer(PTCKEY_M);
- m_normalkeys[$FF And XK_n] := Integer(PTCKEY_N);
- m_normalkeys[$FF And XK_o] := Integer(PTCKEY_O);
- m_normalkeys[$FF And XK_p] := Integer(PTCKEY_P);
- m_normalkeys[$FF And XK_q] := Integer(PTCKEY_Q);
- m_normalkeys[$FF And XK_r] := Integer(PTCKEY_R);
- m_normalkeys[$FF And XK_s] := Integer(PTCKEY_S);
- m_normalkeys[$FF And XK_t] := Integer(PTCKEY_T);
- m_normalkeys[$FF And XK_u] := Integer(PTCKEY_U);
- m_normalkeys[$FF And XK_v] := Integer(PTCKEY_V);
- m_normalkeys[$FF And XK_w] := Integer(PTCKEY_W);
- m_normalkeys[$FF And XK_x] := Integer(PTCKEY_X);
- m_normalkeys[$FF And XK_y] := Integer(PTCKEY_Y);
- m_normalkeys[$FF And XK_z] := Integer(PTCKEY_Z);
- End;
|