LINUX.ORG.RU

Как создать маленькое полупрозрачное окно?

 , ,


0

1

Что нужно: простой строкой в консоли создать окно без всяких декораций, но полупрозрачное по заданному проценту и иметь флаг поверх всех окон. Оно должно перетаскиваться мышой с ATL, изменяться размер по правому нижнему углу. Выглядеть просто как полупрозрачный прямоугольник.

Зачем: Люто, бешенно раздражают любители замазывать логотипы в кино слоем мнимой прозрачности. На статичном фоне это работает, но на динамичном выглядит убого, мерцает, отвлекает и утомляет глаза. Хочется это говно прикрыть отдельным окном. а то леплю на экран кусок изоленты, она меньше глаза насилует)

Врядли мой SMPlayer сам умеет такое, а хотелось бы. Поэтому подумал вот же простой костыль. Ибо нейросети долго ещё не научатся воссоздавать фон за удалённым объектом, либо эти высокие технологии недоступны мамкиным релизерам обнаружившим в видеоредакторе модную свистелку-перделку сделанную вероятно не совсем для этого.

★★★

Последнее исправление: hikikomori (всего исправлений: 2)

Ответ на: комментарий от Binkledum

Права (я писал выше) принадлежат стране, которой больше нет, и народу, который остался. Почему меня должно интересовать мнение присвоивших себе кино жуликов и воров, что я должен платить им за украденное у меня?

hikikomori ★★★
() автор топика
Ответ на: комментарий от zenonix

Я пересматриваю Вавилон5, пересматривал Светлечка, хочу потом стартрек глянуть и аниме роботек пересмотреть. Нет времени на скорее всего говно. наше кино если просто посредственное или выхолощенное то уже радуемся как дети, потому что снимают такую дрянь..

hikikomori ★★★
() автор топика
Ответ на: комментарий от hikikomori

Star Trek рекомендую The Next Generation. Там Уэсли Крашер..

Ну и вообще зачетно + Пикар с фейспалмом.

anonymous
()
Ответ на: комментарий от hikikomori

Нет времени на скорее всего говно. наше кино если просто посредственное или выхолощенное то уже радуемся как дети, потому что снимают такую дрянь

Ты просто не знаешь где искать. Море неизученных фильмов. Ну ладно, во многом ты прав.

anonymous
()
Ответ на: комментарий от anonymous

Star Trek рекомендую The Next Generation.

Да, именно его и я планирую после Вавилона. Очень жаль, что космический вестерн Светлячок не продолжили. Там классно показано отсутствие звуков при работе двигателя корабля в космосе. И вообще, I am a leaf on the wind. Watch how I soar

Пикар с его знаменитым фейспалмом — это как Кутулу. Многие не читали ГФЛ, но мало кто не знает, что Кутулу фхтагн.

hikikomori ★★★
() автор топика
Последнее исправление: hikikomori (всего исправлений: 1)
Ответ на: комментарий от anonymous

Старых проверенных фильмов всё ещё значительно много. Ограниченность свободного времени требует расставлять приоритеты. Но я постоянно ищу и открываю что-то.

hikikomori ★★★
() автор топика

Мда, народ в комментариях заморочился писать отдельные программы для того чтобы сделать окно. И куда только катится мир! А можно было просто запустить любое х-приложение (xcalc и т.п.) в заголовке wm выбрать поверх всех окон и всё.

gtk3 ★★★
()
Ответ на: комментарий от gtk3

Это решение ненамного лучше изоленты. нужно уменьшать до минимума, и оно не полупрозрачное. Я с таким же успехом мог tilda вытащить в угол экрана, но это весь угол съест. а лого эти телепузики лепят не с самого угла, а часто довольно далеко от..

hikikomori ★★★
() автор топика
Ответ на: комментарий от hikikomori

Кстати а почему так сложно? Такой префикс длинный QT_QPA_PLATFORM=xcb qmlscene

Переменную окружения QT_QPA_PLATFORM=xcb можно опустить. Она просто запускает qmlscene на Wayland-сеансах через XWayland. Если ты в своём дистрибутиве используешь X.Org, то выполняй просто qmlscene Overlay.qml.

P.S. Оно вообще нормально на KDE (в Manjaro вроде он) работает?

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)

Держи, набросал по быстрому

alt + правая кнопка мышки - изменять размер

alt + левая кнопка мышки - перемещать

q выход

колёсико вверх/вниз менять прозрачность

gcc main.cpkg-config –libs –cflags sdl2&& ./a.out


#include <SDL2/SDL.h>

int main(int argc, char const *argv[]) {

    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Window* wnd = SDL_CreateWindow("Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 300, 300, SDL_WINDOW_OPENGL);
    SDL_Renderer* renderer = SDL_CreateRenderer(wnd, 0, SDL_RENDERER_ACCELERATED);
    SDL_SetWindowBordered(wnd,SDL_FALSE);
    SDL_SetWindowResizable(wnd,SDL_TRUE);
    float opa = 0.5;
    int   run = 1;
    SDL_Event e;
            SDL_RaiseWindow(wnd);

    while(run)
    {
        SDL_WaitEvent(&e);
        if (e.type == SDL_KEYDOWN &&  e.key.keysym.sym == SDLK_q)
        {
            run=0;
        }
        if(e.type == SDL_MOUSEWHEEL)
        {
            opa+=e.wheel.y*0.1;
        }
        if(e.type == SDL_WINDOWEVENT)
        {

            SDL_ShowWindow(wnd);
        }


        SDL_SetWindowOpacity(wnd,opa);
        SDL_SetRenderDrawColor(renderer, 255, 255, 255 , 255);
        SDL_RenderClear(renderer);
        SDL_RenderPresent(renderer);
    }

    SDL_Quit();
    return 0;
}

На счёт всегда по вех всех окон… Мне запариваться было лень, или через свой wm этому окну дай такое состояние или доработай код что-бы в начале была декорация и через неё установить поверх всех окон, а по нажатию клавиши декорацию отключаешь снова. Ой или ещё как. Но это сам =)

anonymous
()
Ответ на: комментарий от anonymous
gcc main.cpkg-config --libs --cflags sdl2&& ./a.out
gcc: error: sdl2: Нет такого файла или каталога
gcc: error: unrecognized command line option ‘--libs’
gcc: error: unrecognized command line option ‘--cflags’
gcc main.cpkg-config
main.cpkg-config: file not recognized: Формат файла не распознан
collect2: error: ld returned 1 exit status

gcc main.cpp
main.cpp: In function ‘int main(int, const char**)’:
main.cpp:9:40: error: ‘SDL_SetWindowResizable’ was not declared in this scope
     SDL_SetWindowResizable(wnd,SDL_TRUE);
                                        ^
main.cpp:33:37: error: ‘SDL_SetWindowOpacity’ was not declared in this scope
         SDL_SetWindowOpacity(wnd,opa);
Hungarian-Deniska
()
Ответ на: комментарий от anonymous

Сконпелять надеюсь sdl2 только доустанови если нету, зато никаких жирых культей как выше предложили не надо =)

anonymous
()
Ответ на: комментарий от anonymous

бляяяяяя

gcc main.c  `pkg-config --libs --cflags sdl2` && ./a.out
anonymous
()
Ответ на: комментарий от anonymous

Не хочет. Может в sdl2 дело?

gcc main.c  `pkg-config --libs --cflags sdl2` && ./a.out
main.c: В функции «main»:
main.c:9:5: предупреждение: неявная декларация функции «SDL_SetWindowResizable»; имелось в виду «SDL_SetWindowSize»? [-Wimplicit-function-declaration]
    9 |     SDL_SetWindowResizable(wnd,SDL_TRUE);
      |     ^~~~~~~~~~~~~~~~~~~~~~
      |     SDL_SetWindowSize
main.c:33:9: предупреждение: неявная декларация функции «SDL_SetWindowOpacity»; имелось в виду «SDL_SetWindowData»? [-Wimplicit-function-declaration]
   33 |         SDL_SetWindowOpacity(wnd,opa);
      |         ^~~~~~~~~~~~~~~~~~~~
      |         SDL_SetWindowData
/tmp/ccejkTYa.o: In function `main':
main.c:(.text+0x78): undefined reference to `SDL_SetWindowResizable'
main.c:(.text+0x116): undefined reference to `SDL_SetWindowOpacity'
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
Hungarian-Deniska
()
Ответ на: комментарий от Hungarian-Deniska

Это GCC 10, но система Ubuntu 16.04. Установлены libsdl2-2.0-0 и libsdl2-dev версии 2.0.4.

Кстати, заметил, что системный GCC 5 на английском, а собрал ванильный GCC 10 и он с локализацией.

Hungarian-Deniska
()
Ответ на: комментарий от EXL

и прочих Visual Code с такими вот «подарунками».

Уже почти четыре года таскаете один небольшой баг, хотя реально vs соde получился очень не требовательным к ресурсам приложением, чуть хуже чем редакторы/иде написанные на чистом C++ и намного лучше чем редакторы/иде написанные на яве.

anonymous
()
Ответ на: комментарий от anonymous

👍🏻

Тоже выглядит просто. Хотя ресайз окна и его перемещение ты на WM переложил.

Сконпелять надеюсь sdl2 только доустанови если нету, зато никаких жирых культей как выше предложили не надо =)

Выше у человека, который попытался это скомпилировать, в дистрибутиве древний SDL2 2.0.4 (привет, deb-based) без кроссплатформенных функций SDL_SetWindowResizable() и SDL_SetWindowOpacity(), они появились в версии SDL2 2.0.5.

Самое паршивое в том, что установить новую версию SDL2 или Qt 5 (там Qt 5.5.1) в Ubuntu 16.04 довольно нетривиальная задача.

В этом проблема десктопных дистрибутивов Linux, когда нет удобного и гибкого GAPI по типу WinAPI или CocoaAPI, а в голом X11-коде ковыряться никому не хочется.

EXL ★★★★★
()
Ответ на: комментарий от EXL

установить новую версию Qt 5 (там Qt 5.5.1) в Ubuntu 16.04 довольно нетривиальная задача

Без проблем все ставится. 5.9 есть в PPA. Если хочется 5.12, то вот:

https://download.qt.io/official_releases/qt/5.12/5.12.10/submodules/qtbase-everywhere-src-5.12.10.tar.xz
https://download.qt.io/official_releases/qt/5.12/5.12.10/submodules/qtdeclarative-everywhere-src-5.12.10.tar.xz
https://download.qt.io/official_releases/qt/5.12/5.12.10/submodules/qtxmlpatterns-everywhere-src-5.12.10.tar.xz
https://download.qt.io/official_releases/qt/5.12/5.12.10/submodules/qtquickcontrols2-everywhere-src-5.12.10.tar.xz
https://download.qt.io/official_releases/qt/5.12/5.12.10/submodules/qttranslations-everywhere-src-5.12.10.tar.xz
https://download.qt.io/official_releases/qt/5.12/5.12.10/submodules/qtsvg-everywhere-src-5.12.10.tar.xz

qtbase
cd qtbase-everywhere-src
./configure --prefix=/opt/qt512
make
sudo make install
build 1h10m

qtdeclarative
cd /home/denis/qtdeclarative-everywhere-src
export PATH=/opt/qt512/bin:$PATH
qmake
make
sudo make install
build 35m

qtxmlpatterns
cd /home/denis/qtxmlpatterns-everywhere-src
export PATH=/opt/qt512/bin:$PATH
qmake
make
sudo make install
build 8m

qtquickcontrols2
cd /home/denis/qtquickcontrols2-everywhere-src
export PATH=/opt/qt512/bin:$PATH
qmake
make
sudo make install
build 13m

qtsvg
cd /home/denis/qtsvg-everywhere-src
export PATH=/opt/qt512/bin:$PATH
qmake
make
sudo make install
build 3m

Это надо с каждым нужным модулем и зависимости проверить самому.

Hungarian-Deniska
()
Ответ на: комментарий от Hungarian-Deniska

Если хочется 5.12, то вот:

Ты серьёзно многочасовую компиляцию Qt из исходного кода называешь

Без проблем

?

EXL ★★★★★
()
Ответ на: комментарий от EXL

многочасовую компиляцию

На самом деле я цифры разделил на 3, чтобы было более актуально окружающим, т.к. проц у меня старый.

Hungarian-Deniska
()
Ответ на: комментарий от Hungarian-Deniska

Если это такой беспроблемный вариант, почему ты до сих пор не можешь собрать новую версию SDL2 и скомпилировать тривиальный код, который предложил @anonymous?

EXL ★★★★★
()
Ответ на: комментарий от Hungarian-Deniska

Кстати, вот так не раз меня подлавливали на старье. Люди дают код для ublock’а, а он старый и код не работает. Зато позволяет выявить минимальные системные требования, а не бездумно код впаривать, написанный на свежем роллинге, где даже актуальные релизные дистры отваливаются, типа buster (что неуважение).

Hungarian-Deniska
()
Ответ на: комментарий от EXL

Ой, ну тут, да я тоже не подумал и вызов из жирной версии вкрячил, хотя тут его можно убрать вообще, оно не рыба не мясо. И да переложил всё на wm, я супчик кушал когда писал. Можно ещё доделать что-бы по левому нажатию мышки таскать а по правой на границе окна ресайзить (хотя бы за уголок просто). А вот как на sdl сделать тру поверх всех окон не знаю, разве что xlib/xcb дёргать из нутри узнавать id окна и флаг задавать… Ну тут ели надо выбирет твоё моё и допилит до желаемого. Основу ему дали, хоть так хоть эдак ))))))

anonymous
()
Ответ на: комментарий от Hungarian-Deniska

Так и скажи неосилил )))) скачать, собрать и слинковать статически нужно 10 минут максимум.

anonymous
()
Ответ на: комментарий от EXL
apt show libsdl2-2.0-0
Package: libsdl2-2.0-0
Version: 2.0.14+dfsg2-2

Debian testing. Всё ок. =) Но, так то да. Идея когда всё собрано плотно и подогнано друг под друга хороша и прекрасна, пока ты не сделаешь шаг в сторону функционала недоступного из коробки. Оно конечно будет доступно, но через время (порой года) и как бы проблемы нет в целом. НО если брать вот здесь и сейчас то она есть. Хотя иметь полностью стабильное апи это тоже бомба замедленного действия. Вот было бы оно и функционал был бы завязан на либах, а какие то архитектурные вещи в линуксе поменялись бы снова и всё, тащи во веки веков повозку с бесполезными вызовами, да ладно бы рабочее ещё, оно ведь и нерабочим станет. Короче тут делема, шо то шо это. Есть Nix, но прости хоспади это не дистрибутив, это блевотная помойка. Все радуются что у них одно место конфигурирования и одна фс. И всё к этому прибито гвоздями. А внутри, ад кромешный, а если какой руткит пропишется или иная малварь в систему пролезет то хрен ты её там найдёшь, да и в целом там беда, ради просто конфигурирования весь человеческий интерфейс по пизде пустили.

anonymous
()
Ответ на: комментарий от Binkledum

тк CEO моей компании просит, чтобы сотрудники в профилях linkedin указывали текущую компанию (то есть нашу)

А где вы работаете? Устроите меня к вам в компанию?

Владимир

anonymous
()
Ответ на: комментарий от anonymous

Ну собрал я sdl2 (cmake и ninja у меня обновлены, если что).

sudo apt build-dep libsdl2
wget https://www.libsdl.org/release/SDL2-2.0.6.tar.gz
tar -xf SDL2-2.0.6.tar.gz
cd SDL2-2.0.6
cmake . -Bbuild -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/sdl2
ninja -C build
cd build
sudo ninja install
sudo ldconfig
build 2min
cd ..
export CPATH=/opt/sdl2/include:$CPATH
gcc main.c `pkg-config --libs --cflags sdl2` && ./a.out

Та же ошибка. Может быть 2.0.6 тоже старый.
Короче, вы забодали.
Я ламер, имейте в виду. Я и не говорил, что спец. Все делаю методом тыка, но кто-то и этого не умеет.

Код, который не запускается без плясок на системе 4-летней давности нужно отправлять в тот же утиль, что и Qt5, имхо. Люди до сих пор под XP собирают.

Hungarian-Deniska
()
Ответ на: комментарий от anonymous

Можно ещё доделать что-бы по левому нажатию мышки таскать а по правой на границе окна ресайзить (хотя бы за уголок просто).

Вот в моём маленьком примере кода на QML как раз управляется примерно так. Всё-таки декларативный подход для описания интерфейса вещь интересная.

А вот как на sdl сделать тру поверх всех окон не знаю, разве что xlib/xcb дёргать из нутри узнавать id окна и флаг задавать…

В Qt это сделано через проброс атома _NET_WM_STATE_STAYS_ON_TOP вроде как.

Debian testing. Всё ок. =)

А Qt там какой версии?

EXL ★★★★★
()
Ответ на: комментарий от Hungarian-Deniska

Люди до сих пор под XP собирают.

Использовать систему без поддержки и заплаток безопасности ну такое себе. Вспоминаем криптеры просочившиеся через Samba и прочих Петь.

Тут это, в 2021 уже и Windows 7 давно EOL.

Может быть компилятор новый SDL.h не видит?

Нет, просто ты неправильно компилируешь.

gcc main.c -I/opt/sdl2/include -I/opt/sdl2/include/SDL -L/opt/sdl2/lib -lSDL2 && ./a.out
EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от anonymous

Конечно нет. У нас строгая политика по поводу Владимиров.

Binkledum
()

Кастую [user]metaprog[/user] в сей тред. Оживить, так сказать, атмосферу.

anonymous
()
Ответ на: комментарий от EXL

Сейчас заметил, что поверх всех окон не распространяется на полноэкранный режим f youtube в браузере. Можешь ли запостить «коммит» или это концептуально нерешаемо?

hikikomori ★★★
() автор топика
Ответ на: комментарий от hikikomori

Сейчас заметил, что поверх всех окон не распространяется на полноэкранный режим f youtube в браузере.

У меня в GNOME 3 и браузере Firefox такой проблемы нет, окно всегда наверху, что в полноэкранном YouTube, что в mpv.

Попробуй тогда вызвать меню KWin’а на этом окне и там сделать «поверх всех окон».

Можешь ли запостить «коммит» или это концептуально нерешаемо?

Там уже уходит индивидуально в твой WM это.

EXL ★★★★★
()
Ответ на: комментарий от hikikomori

Потри плёнку матовую об кота и на экран висеть минут 20, и коту приятно и софт писать не надо и у тебя мелкая моторика развивается.

anonymous
()
Ответ на: комментарий от EXL

Наверное надо так, либо твой, либо мой вариант запускать через скрипт где осле запуска окошечка выполнять wmctrl -r "матово окошечко" -b add,above тогда по идее будет всегда поверх всего автоматом. Только имя окну надо дать соответствующее. Но если у него вялый то пусть курит бамбуки ))

anonymous
()
Ответ на: комментарий от hikikomori

Очевидный «Зелёный Слоник».

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.