@@ -313,7 +313,7 @@ private void _Initialize(string fileName)
313313 }
314314
315315 sldZoom . PropertyChanged += SldZoom_PropertyChanged ;
316- sldFrame . PropertyChanged += SldFrame_PropertyChanged ;
316+ txtFrame . PropertyChanged += TxtFrame_PropertyChanged ;
317317
318318 btnClear . Tapped += BtnClear_Tapped ;
319319 btnCut . Tapped += BtnCut_Tapped ;
@@ -351,7 +351,6 @@ private void _Initialize(string fileName)
351351 this . Focus ( ) ;
352352 }
353353
354-
355354 #region Color
356355
357356 private void BtnPaper_Click ( object ? sender , Avalonia . Interactivity . RoutedEventArgs e )
@@ -465,6 +464,8 @@ private void SpriteList_Command(SpritePatternControl sender, string command)
465464 ctrlPreview . Refresh ( ) ;
466465 ctrlProperties . SpriteData = sender . SpriteData ;
467466 ctrlProperties . Refresh ( ) ;
467+ SpriteProperties_FrameUpdate ( ctrlProperties , command ) ;
468+ txtFrame . Text = "0" ;
468469 break ;
469470 }
470471 }
@@ -498,24 +499,25 @@ private void SpriteProperties_Command(SpritePropertiesControl sender, string com
498499 SpriteList_Clone ( sender . SpriteData ) ;
499500 SpriteList_Modified ( sender . SpriteData ) ;
500501 break ;
502+ case "FRAMEUPDATE" :
503+ SpriteProperties_FrameUpdate ( sender , command ) ;
504+ break ;
501505 case "REFRESH" :
502506 ctrlEditor . SpriteData = sender . SpriteData ;
503507 SpriteList_Modified ( sender . SpriteData ) ;
504508 if ( ctrlEditor . SpriteData . CurrentFrame != actualFrame )
505509 {
506- actualFrame = ctrlEditor . SpriteData . CurrentFrame ;
507- if ( sldFrame . Maximum < actualFrame )
510+ txtFrame . Value = actualFrame ;
511+ if ( txtFrame . Maximum < actualFrame )
508512 {
509- sldFrame . Maximum = actualFrame ;
513+ txtFrame . Maximum = actualFrame ;
510514 }
511- sldFrame . Value = actualFrame ;
515+ txtFrame . Value = actualFrame ;
512516 Refresh ( ) ;
513517 }
514518 UpdateColorPanel ( ) ;
515519 break ;
516520 case "CHANGEMODE" :
517- ctrlEditor . SpriteData = sender . SpriteData ;
518- SpriteList_Modified ( sender . SpriteData ) ;
519521 switch ( sender . SpriteData . GraphicMode )
520522 {
521523 case GraphicsModes . Monochrome :
@@ -526,17 +528,38 @@ private void SpriteProperties_Command(SpritePropertiesControl sender, string com
526528 ctrlEditor . PrimaryColorIndex = 0 ;
527529 ctrlEditor . SecondaryColorIndex = 7 ;
528530 break ;
529- case GraphicsModes . Next :
530- ctrlEditor . PrimaryColorIndex = 255 ;
531- ctrlEditor . SecondaryColorIndex = 0 ;
532- break ;
533531 }
532+ ctrlEditor . SpriteData = sender . SpriteData ;
533+ SpriteList_Modified ( sender . SpriteData ) ;
534534 UpdateColorPanel ( ) ;
535535 break ;
536536 }
537537 }
538538
539539
540+ private void SpriteProperties_FrameUpdate ( SpritePropertiesControl sender , string command )
541+ {
542+ if ( sender . SpriteData == null )
543+ {
544+ return ;
545+ }
546+
547+ int f = sender . SpriteData . Frames - 1 ;
548+ if ( f < 0 )
549+ {
550+ f = 0 ;
551+ }
552+ else if ( f > 255 )
553+ {
554+ f = 255 ;
555+ }
556+ txtFrame . Maximum = f ;
557+ txtFrame . Text = f . ToString ( ) ;
558+ txtFrame . UpdateLayout ( ) ;
559+ SpriteProperties_Command ( sender , "REFRESH" ) ;
560+ }
561+
562+
540563 private void SpriteList_AddSprite ( )
541564 {
542565 SpritePatternControl selectedSprite = null ;
@@ -611,7 +634,7 @@ private void SpriteList_Insert(Sprite spriteData)
611634 spriteData . Frames ++ ;
612635 ctrlProperties . Refresh ( ) ;
613636 ctrlEditor . Refresh ( ) ;
614- sldFrame . Maximum = spriteData . Frames ;
637+ txtFrame . MaxHeight = spriteData . Frames - 1 ;
615638 }
616639
617640
@@ -692,16 +715,16 @@ private void Editor_Command(SpritePatternEditor sender, string command)
692715
693716 private void Refresh ( )
694717 {
695- txtFrame . Text = "Frame " + actualFrame . ToString ( ) ;
718+ txtFrame . Text = actualFrame . ToString ( ) ;
696719 if ( ctrlProperties . SpriteData != null )
697720 {
698- sldFrame . Maximum = ctrlProperties . SpriteData . Frames ;
721+ txtFrame . Maximum = ctrlProperties . SpriteData . Frames - 1 ;
699722 }
700723 else
701724 {
702- sldFrame . Maximum = 0 ;
725+ txtFrame . Maximum = 0 ;
703726 }
704- sldFrame . UpdateLayout ( ) ;
727+ txtFrame . UpdateLayout ( ) ;
705728 }
706729
707730
@@ -746,13 +769,20 @@ private void ZoomOut()
746769 }
747770
748771
749- private void SldFrame_PropertyChanged ( object ? sender , Avalonia . AvaloniaPropertyChangedEventArgs e )
772+ private void TxtFrame_PropertyChanged ( object ? sender , AvaloniaPropertyChangedEventArgs e )
750773 {
751- byte v = ( byte ) sldFrame . Value ;
752- if ( actualFrame == v || ctrlProperties . SpriteData == null || v < 0 || v >= ( ctrlProperties . SpriteData . Frames ) )
774+ byte v = txtFrame . Text . ToByte ( ) ;
775+ if ( actualFrame == v ||
776+ ctrlProperties . SpriteData == null ||
777+ v < 0 ||
778+ v >= ( ctrlProperties . SpriteData . Frames ) )
753779 {
754780 return ;
755781 }
782+ if ( v > 255 )
783+ {
784+ v = 255 ;
785+ }
756786 actualFrame = v ;
757787 if ( ctrlEditor . SpriteData != null )
758788 {
0 commit comments