Skip to content

Commit

Permalink
Refactor: Moved lots of files to the core module
Browse files Browse the repository at this point in the history
  • Loading branch information
Martomate committed Jun 7, 2024
1 parent 13ab50a commit 3c8a1e6
Show file tree
Hide file tree
Showing 33 changed files with 104 additions and 67 deletions.
2 changes: 1 addition & 1 deletion app/src/main/scala/tripaint/TriPaint.scala
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package tripaint

import tripaint.TriPaintModel
import tripaint.control.TriPaintController
import tripaint.model.TriPaintModel
import tripaint.view.gui.MainStage

import scalafx.application.{JFXApp3, Platform}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tripaint.model
package tripaint

import tripaint.grid.ImageGrid
import tripaint.image.ImagePool
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/scala/tripaint/control/Actions.scala
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package tripaint.control

import tripaint.{Color, ImageSaver}
import tripaint.TriPaintModel
import tripaint.coords.{GridCoords, StorageCoords}
import tripaint.effects.Effect
import tripaint.grid.{GridCell, ImageChange, ImageGrid, ImageGridChange, ImageSaveCollisionHandler}
import tripaint.image.{ImagePool, ImageStorage, RegularImage}
import tripaint.image.ImagePool.{SaveInfo, SaveLocation}
import tripaint.image.format.StorageFormat
import tripaint.infrastructure.FileSystem
import tripaint.model.TriPaintModel
import tripaint.model.effects.Effect
import tripaint.util.CachedLoader
import tripaint.view.{FileOpenSettings, FileSaveSettings}

Expand Down
6 changes: 3 additions & 3 deletions app/src/main/scala/tripaint/control/TriPaintController.scala
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package tripaint.control

import tripaint.TriPaintModel
import tripaint.coords.GridCoords
import tripaint.grid.GridCell
import tripaint.model.TriPaintModel
import tripaint.model.effects.{
import tripaint.effects.{
BlurEffect,
CellEffect,
MotionBlurEffect,
RandomNoiseEffect,
ScrambleEffect
}
import tripaint.grid.GridCell
import tripaint.view.{TriPaintView, TriPaintViewFactory, TriPaintViewListener}
import tripaint.view.gui.UIAction

Expand Down
2 changes: 1 addition & 1 deletion app/src/main/scala/tripaint/view/TriPaintViewFactory.scala
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package tripaint.view

import tripaint.model.TriPaintModel
import tripaint.TriPaintModel

trait TriPaintViewFactory {
def createView(controls: TriPaintViewListener, model: TriPaintModel): TriPaintView
Expand Down
19 changes: 17 additions & 2 deletions app/src/main/scala/tripaint/view/gui/ImageTabPane.scala
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,16 @@ object ImageTabPane {
val b = new ToggleButton
b.graphic = preview
b.tooltip = TriImageTooltip.fromImagePool(image, imagePool.locationOf)
b.selected <==> image.editableProperty

image.trackChanges {
case GridCell.Event.StateUpdated(editable, _) =>
b.selected = editable
case _ =>
}
b.selected.onChange { (_, _, selected) =>
image.setEditable(selected)
}

b
}

Expand All @@ -56,7 +65,13 @@ object ImageTabPane {
star.image = new Image("/icons/star.png")
star.alignmentInParent = Pos.TopLeft
star.mouseTransparent = true
star.visible <== image.changedProperty

image.trackChanges {
case GridCell.Event.StateUpdated(_, changed) =>
star.visible = changed
case _ =>
}

star
}
}
4 changes: 2 additions & 2 deletions app/src/main/scala/tripaint/view/gui/MainStage.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ package tripaint.view.gui

import tripaint.Color
import tripaint.ScalaFxExt.{*, given}
import tripaint.TriPaintModel
import tripaint.effects.{BlurEffect, MotionBlurEffect, RandomNoiseEffect}
import tripaint.grid.GridCell
import tripaint.image.{ImagePool, ImageStorage}
import tripaint.image.format.{RecursiveStorageFormat, SimpleStorageFormat}
import tripaint.model.TriPaintModel
import tripaint.model.effects.{BlurEffect, MotionBlurEffect, RandomNoiseEffect}
import tripaint.view.{
EditMode,
FileOpenSettings,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class TriImageForPreview(content: GridCell, previewWidth: Double) extends Pane {
drawTriangle(coords)
case ImageChangedALot =>
redraw()
case _ =>
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,40 +1,23 @@
package tripaint.image
package tripaint.control

import munit.FunSuite
import scalafx.scene.paint.Color as FXColor
import tripaint.Color
import tripaint.ScalaFxExt.given
import tripaint.control.Actions
import tripaint.TriPaintModel
import tripaint.coords.{GridCoords, StorageCoords}
import tripaint.image.{ImagePool, ImageStorage, RegularImage}
import tripaint.image.{ImageStorage, RegularImage}
import tripaint.image.ImagePool.SaveLocation
import tripaint.image.format.{SimpleStorageFormat, StorageFormat}
import tripaint.infrastructure.FileSystem
import tripaint.model.TriPaintModel
import tripaint.view.FileOpenSettings

import munit.FunSuite
import scalafx.scene.paint.Color as FXColor

import java.io.File
import scala.language.implicitConversions

class ImagePoolTest extends FunSuite {
class ActionsTest extends FunSuite {
val storageFormat: StorageFormat = SimpleStorageFormat

test("locationOf should return None if the image doesn't exist") {
val image = ImageStorage.fill(2, Color.Black)
assertEquals(new ImagePool().locationOf(image), None)
}

test("locationOf should return the location of the image if it exists") {
val image = ImageStorage.fill(2, Color.Black)
val location = SaveLocation(null)
val info = ImagePool.SaveInfo(null)

val f = new ImagePool()
f.set(image, location, info)

assertEquals(f.locationOf(image), Some(location))
}

test("Actions.openImage should do nothing if loading failed") {
val location = SaveLocation(null)
val imageSize = 16
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package tripaint.control.action

import tripaint.Color
import tripaint.TriPaintModel
import tripaint.control.Actions
import tripaint.coords.GridCoords
import tripaint.image.RegularImage
import tripaint.image.format.SimpleStorageFormat
import tripaint.model.TriPaintModel

import munit.FunSuite

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package tripaint.control.action

import tripaint.Color
import tripaint.TriPaintModel
import tripaint.control.Actions
import tripaint.coords.{GridCoords, StorageCoords}
import tripaint.image.RegularImage
import tripaint.image.format.SimpleStorageFormat
import tripaint.infrastructure.FileSystem
import tripaint.model.TriPaintModel
import tripaint.view.FileOpenSettings

import munit.FunSuite
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tripaint.model
package tripaint

trait Change {
def undo(): Unit
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tripaint.model.effects
package tripaint.effects

import tripaint.{Color, ColorLookup}
import tripaint.coords.GlobalPixCoords
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tripaint.model.effects
package tripaint.effects

import tripaint.{Color, ColorLookup}
import tripaint.coords.GlobalPixCoords
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tripaint.model.effects
package tripaint.effects

import tripaint.coords.GridCoords
import tripaint.grid.ImageGrid
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tripaint.model.effects
package tripaint.effects

import tripaint.{Color, ColorLookup, FloodFillSearcher}
import tripaint.coords.{GlobalPixCoords, GridCoords, PixelCoords}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tripaint.model.effects
package tripaint.effects

import tripaint.{Color, ColorLookup}
import tripaint.coords.GlobalPixCoords
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tripaint.model.effects
package tripaint.effects

import tripaint.{Color, HsbColor}
import tripaint.coords.GridCoords
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tripaint.model.effects
package tripaint.effects

import tripaint.coords.GridCoords
import tripaint.grid.ImageGrid
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@ import tripaint.coords.{GridCoords, TriangleCoords}
import tripaint.image.ImageStorage
import tripaint.util.{EventDispatcher, Tracker}

import scalafx.beans.property.{BooleanProperty, ReadOnlyBooleanProperty, ReadOnlyBooleanWrapper}

object GridCell:
enum Event:
object GridCell {
enum Event {
case PixelChanged(coords: TriangleCoords, from: Color, to: Color)
case ImageChangedALot
case StateUpdated(editable: Boolean, changed: Boolean)
}
}

class GridCell(val coords: GridCoords, init_image: ImageStorage):
private var _image: ImageStorage = init_image
Expand All @@ -22,17 +23,25 @@ class GridCell(val coords: GridCoords, init_image: ImageStorage):

def storage: ImageStorage = _image

val editableProperty: BooleanProperty = BooleanProperty(true)
def editable: Boolean = editableProperty.value
private var _editable = true
def editable: Boolean = _editable
def setEditable(editable: Boolean): Unit = {
_editable = editable
dispatcher.notify(GridCell.Event.StateUpdated(editable, changed))
}

def onImageChangedALot(): Unit =
dispatcher.notify(GridCell.Event.ImageChangedALot)

private val _changed: ReadOnlyBooleanWrapper = ReadOnlyBooleanWrapper(false)
def changed: Boolean = _changed.value
def changedProperty: ReadOnlyBooleanProperty = _changed.readOnlyProperty
private var _changed = false
def changed: Boolean = _changed

def setImageSaved(): Unit = _changed.value = false
def setImageSaved(): Unit = {
if _changed then {
_changed = false
dispatcher.notify(GridCell.Event.StateUpdated(editable, changed))
}
}

def replaceImage(newImage: ImageStorage): Unit =
_image = newImage
Expand All @@ -42,5 +51,8 @@ class GridCell(val coords: GridCoords, init_image: ImageStorage):
private def onStorageChanged(event: ImageStorage.Event): Unit =
event match
case ImageStorage.Event.PixelChanged(coords, from, to) =>
_changed.value = true
if !_changed then {
_changed = true
dispatcher.notify(GridCell.Event.StateUpdated(editable, changed))
}
dispatcher.notify(GridCell.Event.PixelChanged(coords, from, to))
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package tripaint.grid

import tripaint.Change
import tripaint.Color
import tripaint.coords.TriangleCoords
import tripaint.image.ImageStorage
import tripaint.model.Change

import scala.collection.mutable.ArrayBuffer

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ class ImageGrid(init_imageSize: Int) {
dispatcher.notify(ImageGrid.Event.PixelChanged(PixelCoords(cell, pix), from, to))
case GridCell.Event.ImageChangedALot =>
dispatcher.notify(ImageGrid.Event.ImageChangedALot(cell))
case _ =>
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package tripaint.grid

import tripaint.Change
import tripaint.coords.GridCoords
import tripaint.model.Change

class ImageGridChange(val changes: Map[GridCoords, ImageChange]) extends Change {
override def undo(): Unit = for (_, change) <- changes do change.undo()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package tripaint.grid

import tripaint.model.Change
import tripaint.Change

import scala.collection.mutable.ArrayBuffer

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package tripaint.image

import tripaint.coords.StorageCoords
import tripaint.image.ImageStorage
import tripaint.image.format.StorageFormat
import tripaint.util.{InjectiveHashMap, InjectiveMap}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tripaint.model.effects
package tripaint.effects

import tripaint.Color
import tripaint.coords.{GlobalPixCoords, GridCoords, PixelCoords, TriangleCoords}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tripaint.model.effects
package tripaint.effects

import tripaint.Color
import tripaint.coords.{GridCoords, TriangleCoords}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,12 +146,12 @@ class ImageGridTest extends FunSuite with MockitoSugar {
f.set(image2)

assertEquals(f.selectedImages.sortBy(_.##), Seq(image, image2).sortBy(_.##))
image.editableProperty() = false
image.setEditable(false)
assertEquals(f.selectedImages.sortBy(_.##), Seq(image2).sortBy(_.##))
image.editableProperty() = true
image2.editableProperty() = false
image.setEditable(true)
image2.setEditable(false)
assertEquals(f.selectedImages.sortBy(_.##), Seq(image).sortBy(_.##))
image2.editableProperty() = true
image2.setEditable(true)
assertEquals(f.selectedImages.sortBy(_.##), Seq(image, image2).sortBy(_.##))
}

Expand Down
26 changes: 26 additions & 0 deletions core/src/test/scala/tripaint/image/ImagePoolTest.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package tripaint.image

import munit.FunSuite
import tripaint.Color
import tripaint.image.ImagePool.SaveLocation
import tripaint.image.format.{SimpleStorageFormat, StorageFormat}

class ImagePoolTest extends FunSuite {
val storageFormat: StorageFormat = SimpleStorageFormat

test("locationOf should return None if the image doesn't exist") {
val image = ImageStorage.fill(2, Color.Black)
assertEquals(new ImagePool().locationOf(image), None)
}

test("locationOf should return the location of the image if it exists") {
val image = ImageStorage.fill(2, Color.Black)
val location = SaveLocation(null)
val info = ImagePool.SaveInfo(null)

val f = new ImagePool()
f.set(image, location, info)

assertEquals(f.locationOf(image), Some(location))
}
}

0 comments on commit 3c8a1e6

Please sign in to comment.