26 сентября | 2026г. | 00:32:11

АвторТема: Модификация скинов (общие вопросы) (часть 3)  (Прочитано 319227 раз)

0 Пользователей и 6 Гостей смотрят эту тему.

Оффлайн Марчелла

  • Совет Джедаев
  • ****
  • Сообщений: 4202
  • Поблагодарили: 13793
  • Уважение: +98
Интересный этот параметр cornerRadius для закругленных углов.
Добавили, как я понял еще в OpenATV 7.3
на OpenPLi 9.X так же этот параметр есть к примеру скин от DimitarCC DarkOS там к стате используется именно этот параметр для eLabel


LG 55UJ630V 4K UHD > Яндекс Станция Дуо Макс & Zgemma H7 S 4K UHD
 
Samsung QE55Q60A 4K UHD > Яндекс Станция Макс & Zgemma H9 Twin 4K UHD <> LCD4linux met Samsung SPF 87H

Оффлайн mic71

  • Совет Джедаев
  • ****
  • Сообщений: 6770
  • Поблагодарили: 29073
  • Уважение: +286
Evg77734, на DreamOS этот параметр с 2017 или 2018 года, если скин на лейблах, то это супер, мы с Ярославом это обсуждали давным давно, он как то исхитрялся свой скин сделать...

Но в DreamOS есть темы, где эти радиусы можно менять с пульта, кому как нравится от прямого угла до бесконечности, если конечно этот параметр вписан в скин и плагин с темами..  возможно и на Open имиджах такое замутят  ;)

вещь хорошая и на скорострельность скина никак не влияет

P.S. вот мой скин, сделан конкретно на лейблах Скин BlackRainbow HD для имиджа Merlin4 (OE2.5)

где то там обсуждение с Sirius103 по этому параметру

вот из 1го поста цитата
Закругление углов 0, 10, 20 пикселей на всех менюшках, выбор по вкусу

Оффлайн mic71

  • Совет Джедаев
  • ****
  • Сообщений: 6770
  • Поблагодарили: 29073
  • Уважение: +286
Марчелла, на DreamOS был ещё параметр градиент, тоже прикольно и что то ещё, там образно менюшку лейблом можно было по косой рисовать, не прямоугольник, а образно трапеция

Оффлайн Evg77734

  • Совет Джедаев
  • ****
  • Сообщений: 2073
  • Поблагодарили: 15067
  • Уважение: +642
mic71, я разве спорю?  :yes4: Одно дело где то прочитать, что у кого то..., другое дело самому попробовать.
Я читал это раньше у ATV, вчера нашел это в скине infinity-neo, сегодня взял свой плагин для тестов и "легким движением руки" получил интересный для меня результат. Открываются интересные возможности  :yes4:
По градиенту тоже есть:
Спойлер   :
[ePixmap]
* add new separate drawing lib
* remove drawGradient
* add new drawRectangle
* add corner radius for pixmaps
* add new transparent flag

[eWidget]
* enable corner radius and gradient paint
* add border properties
* add setBorderWidth, setBorderColor for compatibility reasons
* add setWidgetBorderWidth, setWidgetBorderColor
* add setCornerRadius
* auto correction of wrong radius values

[MultiContentEntryRectangle]
* add corner attributes

[eWindow]
* add setCornerRadius

[eWidgetDesktop]
* improve clip for corners
* improve background if gradient set

[gPainter]
* remove drawGradient
* add new drawRectangle including setGradient, setRadius and setBorder
* improve alphablend

[eListboxcontent]
* replace drawGradient with drawRectangle
* add radius feature for RECT type
* add RT_BLEND flag for each text if gradient set

[eListbox]
* improve corner radius and gradient for the items
* add default corner radius
* add scrollbar gradient and radius

[epng/picload]
* detect transparency from png, set transparency to false for jpg and bmp
* fix possible memory leak

[grc]
* respect new transparent flag and disable blend if not transparent

[TemplatedMultiContent]
* add radius edges constants

[eListboxPythonStringContent, eListboxPythonConfigContent]
* add corner radius
* fix gradient

[eListboxPythonMultiContent]
* add radius and gradient for progress
* add radius for pixmap progress
* add corner radius for TEXT_TYPE

[blit]
* improve alphablend

[font]
* fix alphablend especially for gradient backgrounds

[multicontent]
* add radius to gradient

[eLabel]
* add RT_BLEND flag if gradient set

[eSlider]
* add radius and gradient

[skin]
* add cornerRadius, itemCornerRadius, widgetBorderColor, widgetBorderWidth attibutes
* add new scrollbar attributes
С примером:
Спойлер   :
skin = """
<screen name="Test" position="0,0" size="1280,720" resolution="1280,720" title="Test" flags="wfNoBorder" backgroundColor="black">
<eLabel text="GFX Test" position="10,10" size="300,20"/>

<eRectangle backgroundGradient="blue,red,horizontal" position="10,30" size="100,100"/>
<eRectangle backgroundGradient="blue,red,vertical" position="120,30" size="100,100"/>
<eRectangle backgroundGradient="blue,red,horizontal" cornerRadius="50" position="230,30" size="100,100"/>
<eLabel backgroundGradient="blue,red,vertical" cornerRadius="10" position="340,30" size="100,100"/>

<widget name="boxinfo" position="900,10" size="300,50"/>
<widget name="info" position="900,60" size="300,650"/>

<widget source="vlist" backgroundGradient="yellow,red,horizontal" selectionZoomSize="174,125" borderWidth="0" borderColor="green" scrollbarLength="auto" itemGradientSelected="red,blue,horizontal" itemGradient="blue,green,vertical" itemCornerRadius="10" itemAlignment="center" cornerRadius="10" spacingColor="yellow" itemSpacing="10,10" render="Listbox" position="10,140" size="840,491" scrollbarOffset="0" scrollbarMode="showAlways" listOrientation="grid" scrollbarForegroundColor="blue">
<convert type="TemplatedMultiContent">
{
"template": [
MultiContentEntryPixmapAlphaBlend(pos=(27, 10), size=(100, 40), png=2, flags=BT_SCALE),
MultiContentEntryText(pos=(1, 54), size=(152, 45), font=0, flags=RT_VALIGN_CENTER | RT_HALIGN_CENTER | RT_WRAP, text=0)
],
"fonts": [gFont("Regular", 18),gFont("Regular", 14)],
"itemWidth" : 152,
"itemHeight" : 105
}
</convert>
</widget>
<widget source="key_red" render="Label" position="10,e-50" size="180,40" backgroundColor="key_red" conditional="key_red" font="Regular;20" foregroundColor="key_text" halign="center" valign="center">
<convert type="ConditionalShowHide" />
</widget>
<widget source="key_green" render="Label" position="200,e-50" size="180,40" backgroundColor="key_green" conditional="key_green" font="Regular;20" foregroundColor="key_text" halign="center" valign="center">
<convert type="ConditionalShowHide" />
</widget>
<widget source="key_yellow" render="Label" position="390,e-50" size="180,40" backgroundColor="key_yellow" conditional="key_yellow" font="Regular;20" foregroundColor="key_text" halign="center" valign="center">
<convert type="ConditionalShowHide" />
</widget>
<widget source="key_blue" render="Label" position="580,e-50" size="180,40" backgroundColor="key_blue" conditional="key_blue" font="Regular;20" foregroundColor="key_text" halign="center" valign="center">
<convert type="ConditionalShowHide" />
</widget>
</screen>"""

Оффлайн mic71

  • Совет Джедаев
  • ****
  • Сообщений: 6770
  • Поблагодарили: 29073
  • Уважение: +286
Evg77734, кстати , я точно не помню, но вроде даже кнопки делал с корнер радиусом, прикольно получалось, давно это было  :drinks:

Оффлайн Evg77734

  • Совет Джедаев
  • ****
  • Сообщений: 2073
  • Поблагодарили: 15067
  • Уважение: +642
Взял этот пример, скопировал в мою e2designer на Linux которая, получил ошибку Unknow widget tad 'eRectangle'
Это только в ресивере проверять, а это каждый раз нужно перегружать GUI, что напрягает конечно.
Программа e2designer очень строптивая, но я как то к ней притерся за последний год. В любом случае возвращаться на Windows я не собираюсь  :yes4:

Оффлайн mic71

  • Совет Джедаев
  • ****
  • Сообщений: 6770
  • Поблагодарили: 29073
  • Уважение: +286
сегодня взял свой плагин для тестов
а что за плагин?

Оффлайн Evg77734

  • Совет Джедаев
  • ****
  • Сообщений: 2073
  • Поблагодарили: 15067
  • Уважение: +642
а что за плагин?
Так тот, что на скрине из поста 989, пустой каркас плагина, со скином и кнопками Выход, ОК, несколько виджетов. Его я использую для опытов и проверки идей, если требуются возможности самой Энигмы2, а если не требуются, то все я делаю на компьютере, ведь основную массу кода можно разрабатывать на компьютере, ну а энигма только для вывода на эран тв.

Оффлайн Mari

  • Падаван
  • *
  • Сообщений: 40
  • Поблагодарили: 43
  • Уважение: +6
Подскажите, скин metrixhd-mod-pli by Taykun345(3.1), как настроить прокрутку длинного епг, помню чтото связано со словом «label» «stroll label»

Оффлайн sunriser

  • Друзья Джедаев
  • *****
  • Сообщений: 1070
  • Поблагодарили: 5062
  • Уважение: +119
как настроить прокрутку длинного епг
Например для <screen name="EPGSelection":
Спойлер   :
    <widget source="Event" render="RunningText" position="1340,515" size="540,460" font="Regular; 28" backgroundColor="background" foregroundColor="title" halign="block" options="movetype=running,direction=top,step=1,oneshot=1000,always=0,steptime=150,startpoint=2,wrap">
      <convert type="EventName2">ExtendedDescription</convert>
    </widget>
А в options уже подбираете параметры Вам нужные.

Оффлайн Faluk

  • Младший Джедай
  • **
  • Сообщений: 91
  • Поблагодарили: 365
  • Уважение: +5
Кто в курсе или пользуется скином army-touch-fhd-atv-py3_1.2-r2 на OpenATV 7.6 подскажите как убрать левый
столбик где погода, температура и т.д. Автор на форуме забанен и обратиться к нему нельзя.

Оффлайн Evg77734

  • Совет Джедаев
  • ****
  • Сообщений: 2073
  • Поблагодарили: 15067
  • Уважение: +642
для WQHD(2560*1440)
Необходимость в них и вероятность появления скинов WQHD под большим сомнением. Но этот китайский "автор" применил хорошую идею пересчитывать при запуске плагина параметры его скина
Спойлер   :
def scale_skin(skin, factor):
    if factor == 1.0:
        return skin
    # replace position="x,y"
    skin = re.sub(r'(position=")(\d+),(\d+)(")',
                  lambda m: m.group(1) + str(int(float(m.group(2)) * factor)) + ',' +
                            str(int(float(m.group(3)) * factor)) + m.group(4), skin)
    # replace size="w,h"
    skin = re.sub(r'(size=")(\d+),(\d+)(")',
                  lambda m: m.group(1) + str(int(float(m.group(2)) * factor)) + ',' +
                            str(int(float(m.group(3)) * factor)) + m.group(4), skin)
    # replace font="...; size"
    skin = re.sub(r'(font=")([^"]*); (\d+)(")',
                  lambda m: m.group(1) + m.group(2) + '; ' +
                            str(int(float(m.group(3)) * factor)) + m.group(4), skin)
    return skin

и далее
class WeatherMSN(Screen):
    def __init__(self, session):
        Screen.__init__(self, session)
        self.session = session
        # choose skin dynamically
        width = getDesktop(0).size().width()
        if width >= 1920:
            base_skin = FHD_SKIN_MSN
            factor = width / 1920.0
        else:
            base_skin = HD_SKIN_MSN
            factor = 1.0
        self.skin = scale_skin(base_skin, factor)
Это заточено только в сторону увеличения. Но если взять за базовый FHD скин любого плагина, то если width = 1920 factor = 1.0, если width < 1920 другой factor, если width > 1920, то третий коэффициент. Так, как минимум, отпадет необходимость конвертации FHD в HD скин плагина. Главное не забыть в скине, где нужно прописать scale="1", иначе все картинки будут "кривые", ну или в коде каждый раз перед загрузкой картинки писать self["pic"].instance.setScale(1), что не удобно. И эта идея хороша только для "простых скинов",  а например с TemplatedMultiContent не справится в таком виде, так как никто не пользуется едиными правилами написания скинов. А регулярные выражения не могут заранее знать все варианты пробелов, переносов строк и оформления.
Тем не менее, идея интересная и можно взять ее на вооружение.

Онлайн Gintaras

  • Друзья Джедаев
  • *****
  • Сообщений: 221
  • Поблагодарили: 1442
  • Уважение: +250
Может кто-то подскажет где поменять эти три progress бары на другой цвет?, смотрел в скине E2-DarkOS этого нигде не нашёл чтобы был progress или sprogress бар
Спойлер   :
[ Гостям не разрешен просмотр вложений ][ Гостям не разрешен просмотр вложений ]

Оффлайн Evg77734

  • Совет Джедаев
  • ****
  • Сообщений: 2073
  • Поблагодарили: 15067
  • Уважение: +642
в скине E2-DarkOS
Gintaras, в skin_templates.xml
Спойлер   :
<screen name="InfoBarTemplate" size="0,0" position="0,0">
  <eLabel position="38,862" size="1839,184" zPosition="-11" backgroundColor="background5" cornerRadius="12"/>
  <eLabel position="370,864" size="1505,180" zPosition="-10" backgroundColor="background" cornerRadius="10"/>
  <eLabel position="380,915" size="1485,2" zPosition="-9" backgroundColor="dark_grey"/>
  <eLabel position="1630,930" size="2,100" zPosition="-9" backgroundColor="dark_grey"/>
  <widget alphatest="blend" position="90,891" render="Picon" size="227,130" source="session.CurrentService" zPosition="1" transparent="1" backgroundColor="secondBG">
    <convert type="ServiceName">Reference</convert>
  </widget>
  <widget font="Regular;32" foregroundColor="white" noWrap="1" position="390,864" valign="center" render="Label" size="1200,51" source="session.CurrentService" backgroundColor="background" zPosition="100">
    <convert type="ServiceName">  •  ,NUMBER,NAME,ORBPOS,PROVIDER</convert>
  </widget>
  <widget addon="ServiceInfoBar" connection="session" position="1200,877" size="658,26" zPosition="110" backgroundColor="background" transparent="1" elements="gamma,videoRes,separator,crypt,currentCrypto,separator,txt,dolby,audiotrack,subtitletrack,subservices,stream,hbbtv,separator,catchup,separator,servicetype,separator,record" pixmaps="IS_HDR:icons/hdr_on.png,IS_HDR10:icons/hdr_on.png,IS_HLG:icons/hdr_on.png,IS_HD:icons/HD_s_n.png,IS_4K:icons/4K_s_n.png,IS_SD:icons/SD_s_n.png,txt:icons/ico_txt_on.png,dolby:icons/dd_s.png,crypt:icons/crypt_s.png,audiotrack:icons/ml_s_alt2.png,subtitletrack:icons/subs_s.png,hbbtv:icons/hbbtv_s.png,subservices:icons/ico_subs_on.png,stream:icons/streaming.png,record:icons/rec2.png,catchup:icons/ico_catchup.png,sat:icons/satdish.png,cable:icons/ico_dvb-c.png,terestrial:icons/ico_dvb-t.png,iptv:icons/ico_stream.png" pixmapsDisabled="crypt:icons/crypt_s_off.png" permanent="videoRes,crypt,currentCrypto" alignment="right" spacing="20" autoresizeMode="condensed" separatorLineColor="separator" separatorLineThickness="1" font="Bold;25" foregroundColor="green"/>
  <widget backgroundColor="dark_grey" font="Bold;32" noWrap="1" position="390,927" render="Label" size="80,45" source="session.Event_Now" transparent="1" valign="center" zPosition="3" foregroundColor="light_yellow">
    <convert type="EventTime">StartTime</convert>
    <convert type="ClockToText">Default</convert>
  </widget>
  <widget backgroundColor="background2" font="Bold;60" foregroundColor="white" halign="center" position="1590,920" render="Label" size="320,70" source="global.CurrentTime" transparent="1" zPosition="20">
    <convert type="ClockToText">Default</convert>
  </widget>
  <widget backgroundColor="background2" font="Bold;30" foregroundColor="white" halign="center" position="1590,990" render="Label" size="320,45" source="global.CurrentTime" transparent="1" zPosition="20">
    <convert type="ClockToText">Format: %d %B %Y</convert>
  </widget>
  <widget source="session.Event_Now" position="390,979" zPosition="5" size="1220,4" backgroundColor="background" foregroundColor="blue" cornerRadius="2">
    <convert type="EventTime">Progress</convert>
  </widget>
  <widget source="session.Event_Now" render="Label" position="500,930" size="980,36" font="Regular;30" backgroundColor="dark_grey" transparent="1" foregroundColor="light_yellow">
    <convert type="EventName">Name</convert>
  </widget>
  <widget render="FixedLabel" source="session.Event_Now" text="•" position="470,930" size="20,36" font="Bold;30" backgroundColor="dark_grey" transparent="1" noWrap="1">
    <convert type="EventName">Name</convert>
    <convert type="ConditionalShowHide"/>
  </widget>
  <widget source="session.Event_Now" render="Label" position="1362,930" size="250,35" font="Bold;30" backgroundColor="dark_grey" halign="right" transparent="1" valign="center" foregroundColor="light_yellow">
    <convert type="EventTime">Remaining</convert>
    <convert type="RemainingToText">InMinutes</convert>
  </widget>
  <widget source="session.Event_Next" render="Label" position="390,993" size="80,36" font="Bold;30" backgroundColor="black" transparent="1" noWrap="1">
    <convert type="EventTime">StartTime</convert>
    <convert type="ClockToText">Default</convert>
  </widget>
  <widget render="FixedLabel" source="session.Event_Next" text="•" position="470,993" size="20,36" font="Bold;30" backgroundColor="dark_grey" transparent="1" noWrap="1">
    <convert type="EventName">Name</convert>
    <convert type="ConditionalShowHide"/>
  </widget>
  <widget source="session.Event_Next" render="Label" position="500,993" zPosition="2" size="980,36" font="Regular;30" valign="bottom" transparent="1" noWrap="1" backgroundColor="dark_grey">
    <convert type="EventName">Name</convert>
  </widget>
  <widget source="session.Event_Next" render="Label" position="1362,993" size="250,35" font="Bold;30" backgroundColor="dark_grey" halign="right" valign="center" transparent="1">
    <convert type="EventTime">Duration</convert>
    <convert type="ClockToText">InMinutes</convert>
  </widget>
</screen>
Виджет
Спойлер   :
<widget source="session.Event_Now" position="390,979" zPosition="5" size="1220,4" backgroundColor="background" foregroundColor="blue" cornerRadius="2">
  <convert type="EventTime">Progress</convert>
</widget>
Цвет foregroundColor="blue"
Смотрим в skin.xml раздел
Спойлер   :
   <colors>
      <color name="#232323" value="#00232323" />
      <color name="#25062748" value="#25062748" />
      <color name="#254f7497" value="#254f7497" />
      <color name="#26b5ff" value="#0026b5ff" />
      <color name="#7f000000" value="#7f000000" />
      <color name="#dddddd" value="#00dddddd" />
      <color name="#eeeeee" value="#00eeeeee" />
      <color name="#ffffff" value="#00ffffff" />
      <color name="background" value="#02111111" />
      <color name="background2" value="#0017191a" />
      <color name="background3" value="#00252525" />
      <color name="background5" value="#02444444" />
      <color name="black" value="#00000000" />
      <color name="blue" value="#00879ce1" />
      <color name="bluetransparent" value="#08001e4b" />
      <color name="dark" value="#00242424" />
      <color name="dark_grey" value="#00555556" />
      <color name="darkgrey" value="#00555556" />
      <color name="darkorange" value="#00CB6622" />
      <color name="darkgreen" value="#0016401a" />
      <color name="darkblue" value="#000e518e" />
      <color name="fallback" value="#00b0b0c0" />
      <color name="foreground" value="#00f0f0f0" />
      <color name="green" value="#0056c856" />
      <color name="grey" value="#00b6b6b6" />
      <color name="light_green" value="#000bc97f" />
      <color name="light_yellow" value="#00fdfc93" />
      <color name="listbox" value="#000f56a4" />
      <color name="noTransBG" value="#00101214" />
      <color name="orange" value="#00ffc000" />
      <color name="potem" value="#008fe66d" />
      <color name="progress" value="#00242426" />
      <color name="red" value="#00ff4a3c" />
      <color name="secondBG" value="#18101214" />
      <color name="secondFG" value="#00f9c731" />
      <color name="selectedFG" value="#00fcc000" />
      <color name="separator" value="#01555555" />
      <color name="toptemplatecolor" value="#000d0f16" />
      <color name="transparent" value="#ff000000" />
      <color name="transpBlack" value="#2d101214" />
      <color name="transpPIG" value="#fa101214" />
      <color name="transponderinfo" value="#00f0f0f0" />
      <color name="un33333a" value="#0033333a" />
      <color name="un40a0aa0" value="#040a0aa0" />
      <color name="un4a00a0a" value="#04a00a0a" />
      <color name="uncccccc" value="#00cccccc" />
      <color name="white" value="#00f0f0f0" />
      <color name="yellow" value="#00f9c731" />
      <color name="yellowsoft" value="#00ccac68" />
      <color name="yellowtransparent" value="#084b4b00" />
   </colors>
Сам цвет <color name="blue" value="#00879ce1" />, то есть #00879ce1 Но если его здесь изменить, то он изменится глобально везде, где прописан blue. Но можно конечно и локально например только в widget source="session.Event_Now"

Онлайн Gintaras

  • Друзья Джедаев
  • *****
  • Сообщений: 221
  • Поблагодарили: 1442
  • Уважение: +250
Evg77734, Большое спасибо вам за ответ обязательно попробую и дам вам знать что получилось :hi:

Теги:
 


X

Добро пожаловать!

Мы заметили, что у Вас установлено расширение AdBlock или ему подобное. Пожалуйста добавьте наш Клуб в белый список, внесите этим посильную лепту в его развитие. Спасибо!