Pixilang на Dingux (кнопки)

Pixilang по русски
Post Reply
User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Pixilang на Dingux (кнопки)

Post by Al_Rado » Wed Feb 17, 2010 2:15 pm

Пытаюсь разобраться почему на Dingoo Pixilang не опрашивает три кнопки: Y, B, A. С остальными все в порядке.
Как выяснилось они имеют коды клавиш left_shift, left_alt и left_ctrl соответственно.
Pixilang их просто не опрашивает. Ребята подсказывают нужно в исходниках подправить коды клавиш.
Так вот вопрос NightRadio - действительно ли таким образом удастся решить проблему, если да, то где менять?
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

User avatar
NightRadio
Site Admin
Posts: 3059
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: Pixilang на Dingux (кнопки)

Post by NightRadio » Wed Feb 17, 2010 2:37 pm

Странно, вроде и правые и левые отрабатываются. Обработка этих событий находится в файлах sundog_engine/code/wm_unixgraphics.h (для X11) и в sundog_engine/code/wm_unixgraphics_sdl.h (для SDL версии).

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: Pixilang на Dingux (кнопки)

Post by Al_Rado » Wed Feb 17, 2010 5:16 pm

Действительно странно, но похоже это глюк Пикси.
Проверил на Dingux и на Windows - одинаково, на left_shift, left_alt и left_ctrl не откликается.
Проверял вот этим примерчиком:

Code: Select all

//pixilang (2007) - http://pixi.gif.ru
urod = new_pixi( 7, 7, 1 )

regen_status = 0
px = -70
py = -70

clear( #FFFFFF )
print("Press buttons",-60,-100,BLACK)

start:
pixi( urod, px, py, 0 )
//handle_keys( { regen_status = 1 }, {}, { regen_status = 0 } )
handle_hard_keys({regen_status = 1},{regen_status = 0})
if regen_status 
{ 
     regen 
     px + 9
     if px > 70 { px = -70 py + 9 }
     if py > 70 { py = -70 }
}
frame(0)
go start

regen:
     set_screen( urod )
     xs = get_pixi_xsize( urod )
     ys = get_pixi_ysize( urod )
     y = 0 x = 0
     yloop:
          x = 0
     xloop:
          xx = x - xs / 2
          yy = y - ys / 2
          dot( xx, yy, #FFFFFF )
          dot( -xx, yy, #FFFFFF )
          dot( -xx, -yy, #FFFFFF )
          dot( xx, -yy, #FFFFFF )
          if rand & 1 
          { 
               dot( xx, yy, #101010 )
               dot( -xx, yy, #101010 )
               dot( -xx, -yy, #101010 )
               dot( xx, -yy, #101010 )
          }
          x + 1
     if x < xs { go xloop }
     y + 1
     if y < ys { go yloop }
     set_screen( 0 )
ret
Поменял в исходниках значения left_shift, left_alt и left_ctrl на F1, F2 и F3 соответственно - так кнопки работают как будто жмутся F1, F2, F3.
Но по-хорошему конечно лучше исправить глюк и сделать именно left_shift, left_alt и left_ctrl.
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

User avatar
J3d1
Posts: 175
Joined: Wed Oct 15, 2008 4:49 am
Location: г. Абакан, Хакасия
Contact:

Re: Pixilang на Dingux (кнопки)

Post by J3d1 » Fri Feb 19, 2010 9:28 am

По этому адресу: http://www.libsdl.org/cgi/docwiki.cgi/SDLKey описание кнопок SDL, можно поробовать в файле wm_unuxgraphics_sdl.h, а конкретнее в этом участке кода

Code: Select all

case SDL_KEYUP:
		button = event.key.keysym.sym;
		if( button > 255 )
		{
		    switch( button )
		    {
			case SDLK_UP: button = KEY_UP; break;
			case SDLK_DOWN: button = KEY_DOWN; break;
			case SDLK_LEFT: button = KEY_LEFT; break;
			case SDLK_RIGHT: button = KEY_RIGHT; break;
			case SDLK_INSERT: button = KEY_INSERT; break;
			case SDLK_HOME: button = KEY_HOME; break;
			case SDLK_END: button = KEY_END; break;
			case SDLK_PAGEUP: button = KEY_PAGEUP; break;
			case SDLK_PAGEDOWN: button = KEY_PAGEDOWN; break;
			case SDLK_F1: button = KEY_F1; break;
			case SDLK_F2: button = KEY_F2; break;
			case SDLK_F3: button = KEY_F3; break;
			case SDLK_F4: button = KEY_F4; break;
			case SDLK_F5: button = KEY_F5; break;
			case SDLK_F6: button = KEY_F6; break;
			case SDLK_F7: button = KEY_F7; break;
			case SDLK_F8: button = KEY_F8; break;
			case SDLK_CAPSLOCK: button = KEY_CAPS; break;
			case SDLK_RSHIFT:
			case SDLK_LSHIFT:
			    if( event.type == SDL_KEYDOWN ) mod_keys |= KEY_SHIFT; else mod_keys &= ~KEY_SHIFT;
			    button = 0;
			    break;
			case SDLK_RCTRL:
			case SDLK_LCTRL:
			    if( event.type == SDL_KEYDOWN ) mod_keys |= KEY_CTRL; else mod_keys &= ~KEY_CTRL;
			    button = 0;
			    break;
			case SDLK_RALT:
			case SDLK_LALT:
			    if( event.type == SDL_KEYDOWN ) mod_keys |= KEY_ALT; else mod_keys &= ~KEY_ALT;
			    button = 0;
			    break;
			default: button = 0; break;
		    }	    
		}
переопределить L_SHIFT, L_CTRL, L_ALT. Например, для L_SHIFT:

Code: Select all

case SDLK_LSHIFT:
             if( event.type == SDL_KEYDOWN ) 
               { 
                  mod_keys |= KEY_SHIFT;
                  button = KEY_SHIFT;
               }
             else mod_keys &= ~KEY_SHIFT;
             button = 0;
             break;

altutov
Posts: 5
Joined: Thu Apr 08, 2010 1:33 am

Re: Pixilang на Dingux (кнопки)

Post by altutov » Sat Apr 10, 2010 1:51 am

Al_Rado wrote: Поменял в исходниках значения left_shift, left_alt и left_ctrl на F1, F2 и F3 соответственно - так кнопки работают как будто жмутся F1, F2, F3.
Но по-хорошему конечно лучше исправить глюк и сделать именно left_shift, left_alt и left_ctrl.
Al_Rado а не можешь выложить исправленную версию для dinux`а, с поменянными кнопками? На A320 и так кнопочек маловато -а если убрать из них еще 5 (влючая select нажатие которого приводит к выход из интерпритатора и power_off -соответсвенно выключающий плейер), то вообще становится трудновато разрабатывать всяческие интерфейсы будущих прог.

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: Pixilang на Dingux (кнопки)

Post by Al_Rado » Sat Apr 10, 2010 10:08 am

Честно говоря, не хотелось плодить версии пиксиленга с разными кодами клавиш, да и select c power_off я не трогал... Но если тебе нужно для отладки так сказать - то как доберусь домой, скину то что есть.
Да, есть ли смысл менять значение клавиши select (escape)? Пиксиленг может блокировать выход в ОСь, и можно попадать в отдельную менюшку, например.

altutov
Posts: 5
Joined: Thu Apr 08, 2010 1:33 am

Re: Pixilang на Dingux (кнопки)

Post by altutov » Sat Apr 10, 2010 11:44 am

Al_Rado wrote:Да, есть ли смысл менять значение клавиши select (escape)? Пиксиленг может блокировать выход в ОСь, и можно попадать в отдельную менюшку, например.
Ну насчет select`а я немного погорячился, его менять нет необходимости. Еще кстати кнопка power_off у меня не определяется, а вот ее положение блокировки hold находит -может есть смысл и ее переназначить?

User avatar
Al_Rado
Posts: 239
Joined: Tue Dec 04, 2007 2:33 pm
Location: Krasnodar
Contact:

Re: Pixilang на Dingux (кнопки)

Post by Al_Rado » Sat Apr 10, 2010 1:59 pm

Относительно слайдера power_off - если найти keycode нажатия, подправить можно... Нашел такое - POWER UP button: KEY_PAUSE, но не ясно в каком положении слайдер
ВекторКодПиксельПолигон - ВотЧтоЯЛюблю!

Post Reply