Building a skin from scratch - a tour - (3 Viewers)

mbuzina

Retired Team Member
  • Premium Supporter
  • April 11, 2005
    2,839
    726
    Germany
    Home Country
    Germany Germany
    So, I came around to making a Little preview video. Unfortunately, CAMStudio recorded in a low frame rate (any suggestion for a better screen recorder? Next time I will us a camera). The animations are very smooth.

    Have fun.

     

    mbuzina

    Retired Team Member
  • Premium Supporter
  • April 11, 2005
    2,839
    726
    Germany
    Home Country
    Germany Germany
    Another difficult thing to master, maybe someone has an idea?

    I currently show available backsides (if in thumbs dir, similar to CD Art) if you turn around the coverflow card. But most will not have many backsides, so I am looking for a way to show the mirror image of the front side, which is proving really hard.Currently the control inside the card do not run any animations (why?), so I have to rely on other tricks.

    I have used flipX with a full opaque image to get the mirror image, but I can not shift it to the left. The image will move outside of the card, it will be clipped (great!) but unfortunately, the mirror image will be clipped exactly the same. I can get a double with card, but not restrict it to the mirror image only. See image in mid-transition:
    13-27-32.png
     

    mbuzina

    Retired Team Member
  • Premium Supporter
  • April 11, 2005
    2,839
    726
    Germany
    Home Country
    Germany Germany
    Oh, btw. I added an option to disable the NowPlaying overlay at the bottom for music (will add for all screens), so you can have more space, as can be seen in the screenshot above. For coverflow it will mean more visible fanart.

    P.S.: As soon as I get selected fanart working. I have spent 2 hours yesterday. FA works in DefaultWide, but even including the original FA background XML file from Default Wide (and setting the same Define) will not give me Selected Music FA. Random is working. Any other suggestions?
     
    Last edited:

    mbuzina

    Retired Team Member
  • Premium Supporter
  • April 11, 2005
    2,839
    726
    Germany
    Home Country
    Germany Germany
    A last one: Camera position seems to be broken for me. I moved the coverflow down for 270 px and moved the camera down the same 270 px, but if I do so, the camera is jumpy, usually shows from the center but when scrolling fast jumps down for a fraction of a second. Strange.
     

    catavolt

    Design Group Manager
  • Team MediaPortal
  • August 13, 2007
    14,445
    10,470
    Königstein (Taunus)
    Home Country
    Germany Germany
    so I am looking for a way to show the mirror image of the front side
    ... which is #selectedthumb actually ;)
    So put #selectedthumb in the cards back, and rotate it for 180 degress on x-axis ;)
    Music fanart is difficult at the moment, because HTbackdrops is down. If you have no backdrops in your db/folder, you won´t see any.
     

    mbuzina

    Retired Team Member
  • Premium Supporter
  • April 11, 2005
    2,839
    726
    Germany
    Home Country
    Germany Germany
    Music fanart is difficult at the moment, because HTbackdrops is down. If you have no backdrops in your db/folder, you won´t see any.
    I have (some) fanart, random works - but I do not see any artwork for selected. I checked if the control controls change visibility, and they don't - both selected are visible, available is invisible, expressions are empty.

    I use the following, mymusicsongs.xml:
    XML:
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <window>
    	<id>504</id>
    	<defaultcontrol>50</defaultcontrol>
    	<allowoverlay>no</allowoverlay>
    	<disabletopbar>no</disabletopbar>
    	<rememberLastFocusedControl>yes</rememberLastFocusedControl>
     
    	<define>#useSelectedFanart:Yes</define>
     
    	<define>#header.label:#currentmodule</define>
     
    <controls>
    		<include>common.background.default.xml</include>
    		<include>mymusic.background.xml</include>
    		<include>mymusic.common.hiddenMenu.xml</include>
     
    <!-- a lot of code -->
     
    </controls>
    </window>
    mymusic.background.xml (I put in the labels to allow me to see the mechanism in action, kind of debugging. The hiddenGroupStyle is a StackLayout that moves everything to x=2000 out of view):
    XML:
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <window>
    	<controls>	
    		<control Style="hiddenGroupStyle">
    			<type>group</type>
    			<!--<posX>200</posX>
    			<posY>200</posY>-->
    			<control Style="hiddenStyle">
    				<description>DUMMY CONTROL FOR RANDOM FANART 1 VISIBILITY CONDITION</description>
    				<type>label</type>
    				<id>91919297</id>
    				<label>Random FA 1 Visible (#fanarthandler.music.scraper.backdrop1.any)</label>
    				<width>600</width>
    			</control>
    			<control Style="hiddenStyle">
    				<description>DUMMY CONTROL FOR RANDOM FANART 2 VISIBILITY CONDITION</description>
    				<type>label</type>
    				<id>91919298</id>
    				<label>Random FA 2 Visible (#fanarthandler.music.scraper.backdrop1.any)</label>
    				<width>600</width>
    			</control>
    			<control Style="hiddenStyle">
    				<description>DUMMY CONTROL FOR SELECTED FANART 1 VISIBILITY CONDITION</description>
    				<type>label</type>
    				<id>91919291</id>
    				<label>1#fanarthandler.music.backdrop1.selected1</label>
    			</control>
    			<control Style="hiddenStyle">
    				<description>DUMMY CONTROL FOR SELECTED FANART 2 VISIBILITY CONDITION</description>
    				<type>label</type>
    				<id>91919292</id>
    				<width>300</width>
    				<height>30</height>
    				<font>labelFont</font>
    				<textcolor>FFFF3333</textcolor>
    				<label>2#fanarthandler.music.backdrop2.selected2</label>
    				<visible>true</visible>
    			</control>
    			<control Style="hiddenStyle">
    				<description>DUMMY CONTROL FOR SELECTED FANART AVAILABILITY CONDITION</description>
    				<type>label</type>
    				<id>91919293</id>
    				<label>Selected is Available</label>
    			</control>
    		</control>
    	 
    		<control Style="backdropStyle">
    			<description>Default Background</description>
    			<type>image</type>
    			<texture>hover_my music.png</texture>
    			<!--<texture>white.png</texture>-->
    			<visible>true</visible> 
    		</control>
    		<control Style="backdropStyle">
    			<description>Selected Background 1</description>
    			<type>image</type>
    			<texture>#fanarthandler.music.backdrop1.selected</texture>
    			<visible>control.isvisible(91919291)+control.isivisble(91919293)</visible> 
    		</control>
    		<control Style="backdropStyle">
    			<description>Selected Background 2</description>
    			<type>image</type>
    			<texture>#fanarthandler.music.backdrop2.selected</texture>
    			<visible>control.isvisible(91919292)+control.isivisble(91919293)</visible> 
    		</control>
    	</controls>
    </window>
     
    Last edited:

    mbuzina

    Retired Team Member
  • Premium Supporter
  • April 11, 2005
    2,839
    726
    Germany
    Home Country
    Germany Germany
    UPDATE 2: Yes, now the window seems to work, but the playlistcontrol is not visible and I still have an error in the log (same as below).

    UPDATE: Forgetit, I placed the playlistcontrol outside of the inner group of the façade. It was just in the wrong group control...

    Just now trying to finish the playlist view - strange things happen here. I seem to hang the window. I can ESC back out, the topbar is working, but the playlist Video fails with the following error in the log:
    Code:
    [2013-06-26 09:50:29,954] [Log	] [MPMain  ] [ERROR] - Exception: System.ArgumentException: Illegales Zeichen im Pfad.
      bei System.IO.Path.CheckInvalidPathChars(String path)
      bei System.IO.Path.IsPathRooted(String path)
      bei MediaPortal.GUI.Library.GUITextureManager.GetFileName(String fileName)
      bei MediaPortal.GUI.Library.GUITextureManager.Load(String fileNameOrg, Int64 lColorKey, Int32 iMaxWidth, Int32 iMaxHeight, Boolean persistent)
      bei MediaPortal.GUI.Library.GUIImage.AllocResources()  Message: Illegales Zeichen im Pfad.  Site  : Void CheckInvalidPathChars(System.String)  Source : mscorlib  Stack Trace:	 bei System.IO.Path.CheckInvalidPathChars(String path)
      bei System.IO.Path.IsPathRooted(String path)
      bei MediaPortal.GUI.Library.GUITextureManager.GetFileName(String fileName)
      bei MediaPortal.GUI.Library.GUITextureManager.Load(String fileNameOrg, Int64 lColorKey, Int32 iMaxWidth, Int32 iMaxHeight, Boolean persistent)
      bei MediaPortal.GUI.Library.GUIImage.AllocResources()
    [2013-06-26 09:50:29,956] [Log	] [MPMain  ] [ERROR] - Exception: System.ArgumentException: Illegales Zeichen im Pfad.
      bei System.IO.Path.CheckInvalidPathChars(String path)
      bei System.IO.Path.IsPathRooted(String path)
      bei MediaPortal.GUI.Library.GUITextureManager.GetFileName(String fileName)
      bei MediaPortal.GUI.Library.GUITextureManager.Load(String fileNameOrg, Int64 lColorKey, Int32 iMaxWidth, Int32 iMaxHeight, Boolean persistent)
      bei MediaPortal.GUI.Library.GUIImage.AllocResources()  Message: Illegales Zeichen im Pfad.  Site  : Void CheckInvalidPathChars(System.String)  Source : mscorlib  Stack Trace:	 bei System.IO.Path.CheckInvalidPathChars(String path)
      bei System.IO.Path.IsPathRooted(String path)
      bei MediaPortal.GUI.Library.GUITextureManager.GetFileName(String fileName)
      bei MediaPortal.GUI.Library.GUITextureManager.Load(String fileNameOrg, Int64 lColorKey, Int32 iMaxWidth, Int32 iMaxHeight, Boolean persistent)
      bei MediaPortal.GUI.Library.GUIImage.AllocResources()
    [2013-06-26 09:50:29,957] [Log	] [MPMain  ] [ERROR] - Exception: System.ArgumentException: Illegales Zeichen im Pfad.
      bei System.IO.Path.CheckInvalidPathChars(String path)
      bei System.IO.Path.IsPathRooted(String path)
      bei MediaPortal.GUI.Library.GUITextureManager.GetFileName(String fileName)
      bei MediaPortal.GUI.Library.GUITextureManager.Load(String fileNameOrg, Int64 lColorKey, Int32 iMaxWidth, Int32 iMaxHeight, Boolean persistent)
      bei MediaPortal.GUI.Library.GUIImage.AllocResources()  Message: Illegales Zeichen im Pfad.  Site  : Void CheckInvalidPathChars(System.String)  Source : mscorlib  Stack Trace:	 bei System.IO.Path.CheckInvalidPathChars(String path)
      bei System.IO.Path.IsPathRooted(String path)
      bei MediaPortal.GUI.Library.GUITextureManager.GetFileName(String fileName)
      bei MediaPortal.GUI.Library.GUITextureManager.Load(String fileNameOrg, Int64 lColorKey, Int32 iMaxWidth, Int32 iMaxHeight, Boolean persistent)
      bei MediaPortal.GUI.Library.GUIImage.AllocResources()
    [2013-06-26 09:50:29,958] [Log	] [MPMain  ] [ERROR] - Exception: System.ArgumentException: Illegales Zeichen im Pfad.
      bei System.IO.Path.CheckInvalidPathChars(String path)
      bei System.IO.Path.IsPathRooted(String path)
      bei MediaPortal.GUI.Library.GUITextureManager.GetFileName(String fileName)
      bei MediaPortal.GUI.Library.GUITextureManager.Load(String fileNameOrg, Int64 lColorKey, Int32 iMaxWidth, Int32 iMaxHeight, Boolean persistent)
      bei MediaPortal.GUI.Library.GUIImage.AllocResources()  Message: Illegales Zeichen im Pfad.  Site  : Void CheckInvalidPathChars(System.String)  Source : mscorlib  Stack Trace:	 bei System.IO.Path.CheckInvalidPathChars(String path)
      bei System.IO.Path.IsPathRooted(String path)
      bei MediaPortal.GUI.Library.GUITextureManager.GetFileName(String fileName)
      bei MediaPortal.GUI.Library.GUITextureManager.Load(String fileNameOrg, Int64 lColorKey, Int32 iMaxWidth, Int32 iMaxHeight, Boolean persistent)
      bei MediaPortal.GUI.Library.GUIImage.AllocResources()
    [2013-06-26 09:50:29,962] [Log	] [MPMain  ] [ERROR] - Exception: System.ArgumentException: Illegales Zeichen im Pfad.
      bei System.IO.Path.CheckInvalidPathChars(String path)
      bei System.IO.Path.IsPathRooted(String path)
      bei MediaPortal.GUI.Library.GUITextureManager.GetFileName(String fileName)
      bei MediaPortal.GUI.Library.GUITextureManager.Load(String fileNameOrg, Int64 lColorKey, Int32 iMaxWidth, Int32 iMaxHeight, Boolean persistent)
      bei MediaPortal.GUI.Library.GUIImage.AllocResources()  Message: Illegales Zeichen im Pfad.  Site  : Void CheckInvalidPathChars(System.String)  Source : mscorlib  Stack Trace:	 bei System.IO.Path.CheckInvalidPathChars(String path)
      bei System.IO.Path.IsPathRooted(String path)
      bei MediaPortal.GUI.Library.GUITextureManager.GetFileName(String fileName)
      bei MediaPortal.GUI.Library.GUITextureManager.Load(String fileNameOrg, Int64 lColorKey, Int32 iMaxWidth, Int32 iMaxHeight, Boolean persistent)
      bei MediaPortal.GUI.Library.GUIImage.AllocResources()
    [2013-06-26 09:50:29,974] [Log	] [MPMain  ] [DEBUG] - Window: MediaPortal.GUI.Music.GUIMusicPlayList init
    [2013-06-26 09:50:29,980] [Error  ] [MPMain  ] [ERROR] - OnMessage exception:System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
      bei MediaPortal.GUI.Music.GUIMusicPlayList.OnPageLoad()
      bei MediaPortal.GUI.Library.GUIWindow.OnMessage(GUIMessage message)
    [2013-06-26 09:50:31,973] [Log	] [MPMain  ] [DEBUG] - Main: WM_ACTIVATE (WA_INACTIVE)
    [2013-06-26 09:50:31,973] [Log	] [MPMain  ] [INFO ] - Main: Deactivation request received
    [2013-06-26 09:50:31,977] [Log	] [MPMain  ] [DEBUG] - D3D: OnLostFocus()
    [2013-06-26 09:50:31,978] [Log	] [MPMain  ] [DEBUG] - D3D: MouseMoveEvent()
    [2013-06-26 09:50:32,149] [Log	] [MPMain  ] [DEBUG] - D3D: MouseMoveEvent()
    [2013-06-26 09:50:32,150] [Log	] [MPMain  ] [DEBUG] - D3D: MouseMoveEvent()
    [2013-06-26 09:50:32,173] [Log	] [MPMain  ] [DEBUG] - D3D: MouseMoveEvent()

    But I don't know where I can find the illegal character in the texture file name? The mymusicplaylist.xml is a perfect copy of mymusicsongs.xml, changed just window id and the imported menu file (which also works fine). Any ideas?
     
    Last edited:

    mbuzina

    Retired Team Member
  • Premium Supporter
  • April 11, 2005
    2,839
    726
    Germany
    Home Country
    Germany Germany
    And again a stumbling block: I am trying to build a nice Transition on my NowPlaying Screen. I want the thumb to switch every 10 seconds between front cover & back cover, so I created a label that has text every 10 seconds like this:
    XML:
    			<control Style="hiddenStyle">
    				<id>5546</id>
    				<description>10 Second Flip less than 1hour </description>
    				<type>fadelabel</type>
    				<label>#(switch(
    						eq(string.format('{0}',math.floor(cint(string.ltrim(string.ltrim(#currentplaytime,'0123456789'),':')),-1)),'0'),'0-9',
    						eq(string.format('{0}',math.floor(cint(string.ltrim(string.ltrim(#currentplaytime,'0123456789'),':')),-1)),'20'),'20-29',
    						eq(string.format('{0}',math.floor(cint(string.ltrim(string.ltrim(#currentplaytime,'0123456789'),':')),-1)),'40'),'40-49',
    						eq(1,1),''))</label>
    			</control>

    But setting visibility to this does not work correctly - it changes only once and than stays as it is. Is this too complicated for MP?
     

    Pog

    Retired Team Member
  • Premium Supporter
  • September 7, 2009
    401
    315
    Wicklow
    Home Country
    Ireland Ireland
    This will toggle A/B every 10 seconds:
    Code:
    <label>#iif(eq(string.trim(string.format('{0}',div(cint(string.ltrim(string.ltrim(#currentplaytime,'0123456789'),':')),10)),'0,2,4,6,8'),''),'A','B'))/<label>
    Man, so easy to break MP hard with typos in expressions!
     

    mbuzina

    Retired Team Member
  • Premium Supporter
  • April 11, 2005
    2,839
    726
    Germany
    Home Country
    Germany Germany
    This will toggle A/B every 10 seconds:
    Code:
    <label>#iif(eq(string.trim(string.format('{0}',div(cint(string.ltrim(string.ltrim(#currentplaytime,'0123456789'),':')),10)),'0,2,4,6,8'),''),'A','B'))/<label>
    Man, so easy to break MP hard with typos in expressions!
    Thanks - my version does toggle every 10 seconds as well. The text on screen is shown and it works, but MP animation or visibility does not react to it. I will try your (shorter) version to see if the less complicated version does not throw off MP change tracking.
     

    Users who are viewing this thread

    Top Bottom