Skip to content

Commit 8ae39b1

Browse files
committed
add image scrolling (pan)
1 parent 214fa9d commit 8ae39b1

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

PixelArtTool/MainWindow.xaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@
8989
<Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left" Height="256" Margin="89,50,0,0" VerticalAlignment="Top" Width="256">
9090
<Image x:Name="imgOutline" IsHitTestVisible="False" HorizontalAlignment="Left" Height="256" Margin="-1" VerticalAlignment="Top" Width="256" Stretch="Fill" IsEnabled="False"/>
9191
</Border>
92+
<Button x:Name="btnScrollUp" Click="OnScrollButtonUpClicked" Content="/\" HorizontalAlignment="Left" Margin="388,252,0,0" VerticalAlignment="Top" Width="24"/>
93+
<Button x:Name="btnScrollDown" Click="OnScrollButtonDownClicked" Content="\/" HorizontalAlignment="Left" Margin="388,274,0,0" VerticalAlignment="Top" Width="24"/>
94+
<Button x:Name="btnScrollLeft" Click="OnScrollButtonLeftClicked" Content="&lt;" HorizontalAlignment="Left" Margin="361,263,0,0" VerticalAlignment="Top" Width="24"/>
95+
<Button x:Name="btnScrollRight" Click="OnScrollButtonRightClicked" Content="&gt;" HorizontalAlignment="Left" Margin="415,262,0,0" VerticalAlignment="Top" Width="24"/>
9296
</Grid>
9397
<CheckBox x:Name="chkOutline" Content="Outline" HorizontalAlignment="Left" Margin="648,50,0,0" VerticalAlignment="Top" Width="64"/>
9498
<Rectangle x:Name="rectCurrentColor" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="24" Margin="10,181,0,0" Stroke="Black" VerticalAlignment="Top" Width="24"/>

PixelArtTool/MainWindow.xaml.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -765,6 +765,50 @@ void UpdateOutline()
765765
SetPixel(outlineBitmap, x, y, (int)c.ColorBGRA);
766766
}
767767
}
768+
} // UpdateOutline()
769+
770+
void OnScrollButtonUpClicked(object sender, RoutedEventArgs e)
771+
{
772+
ScrollCanvas(0, -1);
773+
}
774+
void OnScrollButtonDownClicked(object sender, RoutedEventArgs e)
775+
{
776+
ScrollCanvas(0, 1);
777+
}
778+
void OnScrollButtonRightClicked(object sender, RoutedEventArgs e)
779+
{
780+
ScrollCanvas(1, 0);
781+
}
782+
void OnScrollButtonLeftClicked(object sender, RoutedEventArgs e)
783+
{
784+
ScrollCanvas(-1, 0);
785+
}
786+
787+
void ScrollCanvas(int sx, int sy)
788+
{
789+
// clone canvas, FIXME not really needed..could just copy pixels to array or so..
790+
var tempCanvasBitmap = new WriteableBitmap(canvasResolutionX, canvasResolutionY, dpiX, dpiY, PixelFormats.Bgra32, null);
791+
tempCanvasBitmap = canvasBitmap.Clone();
792+
793+
// TODO add wrap or clamp option?
794+
795+
for (int x = 0; x < canvasResolutionX; x++)
796+
{
797+
for (int y = 0; y < canvasResolutionY; y++)
798+
{
799+
var c = GetPixelColor(x, y, tempCanvasBitmap);
800+
int xx = Repeat(x + sx, canvasResolutionX);
801+
int yy = Repeat(y + sy, canvasResolutionY);
802+
SetPixel(canvasBitmap, xx, yy, (int)c.ColorBGRA);
803+
}
804+
}
805+
}
806+
807+
int Repeat(int val, int max)
808+
{
809+
int result = val % max;
810+
if (result < 0) result += max;
811+
return result;
768812
}
769813

770814
} // class

0 commit comments

Comments
 (0)