@startuml
class DesktopGraphics {
~ Graphics2D graphics2D
~ JFrame jFrame
~ Color currentColor
~ AffineTransform currentTransform
~ AffineTransform defaultTransform
~ BufferStrategy bufferStrategy
- double scaleX
- double scaleY
# int topInsetOffset
+ <<Create>> DesktopGraphics(JFrame,int,int)
~ void handleWindowsResize()
~ void calculateScaleFactor()
~ void calculateBorderOffset()
~ void resizeFrameToAddInsets()
~ void updateGraphics()
~ void prepareFrame()
~ void finishFrame()
~ boolean swapBuffer()
+ IImage newImage(String)
+ IFont newFont(String,int,boolean)
+ void setLogicSize(int,int)
+ void setColor(int,int,int)
+ void setColor(int,int,int,int)
+ void setFont(IFont)
+ void clear(int,int,int)
+ void drawImage(IImage,int,int)
+ void drawRectangle(int,int,int,int,int)
+ void fillRectangle(int,int,int,int)
+ void drawLine(int,int,int,int)
+ void drawCircle(int,int,int)
+ void drawText(String,int,int,IFont)
+ void drawTextCentered(String,int,int,IFont)
+ int getStringWidth(String,IFont)
+ int getFontHeight(IFont)
+ int getFontAscent(IFont)
+ int getWidth()
+ int getHeight()
+ int getLogicWidth()
+ int getLogicHeight()
+ void setGraphicsAlpha(int)
+ void scale(double,double)
+ void translate(double,double)
+ void rotate(double)
+ int logicXPositionToWindowsXPosition(int)
+ int logicYPositionToWindowsYPosition(int)
+ int windowsXPositionToLogicXPosition(int)
+ int windowsYPositionToLogicYPosition(int)
+ void setScale(double,double)
+ void setTranslation(double,double)
+ void setRotation(double)
+ void resetScale()
+ void resetTranslation()
+ boolean isInsideLogicCanvas(int,int)
+ void resetRotation()
+ void resetTransform()
+ void save()
- void apply()
+ void restore()
}
class DesktopImage {
~ Image image
+ <<Create>> DesktopImage(String)
~ Image getImage()
+ int getWidth()
+ int getHeight()
}
class DesktopInput {
- List<InputEvent>[] eventos
- int listBufferCount
- int listBufferIndex
+ <<Create>> DesktopInput()
+ <<Create>> DesktopInput(int)
+ void addEvent(MouseEvent)
+ List<InputEvent> getEventList()
+ void swapListBuffer()
+ void clear()
}
class DesktopSound {
~ Clip clip
+ <<Create>> DesktopSound(Clip)
+ void play()
+ void stop()
+ boolean isPlaying()
+ float getVolume()
+ void setVolume(float)
}
class DesktopFont {
~ Font font
+ <<Create>> DesktopFont(String,int,boolean)
~ Font getFont()
+ int getSize()
+ boolean isBold()
}
class DesktopAudio {
~ Dictionary<String,ISound> sounds
~ Dictionary<String,ISound> music
+ <<Create>> DesktopAudio()
+ ISound newSound(String,String)
+ ISound newMusic(String,String)
}
class DesktopEngine {
~ DesktopGraphics graphics
~ DesktopAudio audio
~ DesktopInput inputManager
~ JFrame mView
~ Thread renderThread
~ StateManager stateManager
~ boolean isRunning
~ Cursor blankCursor
~ Cursor defaultCursor
+ <<Create>> DesktopEngine(int,int,String)
+ void resume()
+ void pause()
+ void run()
+ IGraphics getGraphics()
+ IAudio getAudio()
+ IState getState()
+ String getAssetsPath()
+ boolean supportsTouch()
+ void render()
+ void update(double)
+ void handleInput()
+ void setState(IState)
+ void mouseClicked(MouseEvent)
+ void mousePressed(MouseEvent)
+ void mouseReleased(MouseEvent)
+ void mouseEntered(MouseEvent)
+ void mouseExited(MouseEvent)
+ void mouseDragged(MouseEvent)
+ void mouseMoved(MouseEvent)
}


AbstractGraphics <|-- DesktopGraphics
IImage <|.. DesktopImage
IInput <|.. DesktopInput
ISound <|.. DesktopSound
IFont <|.. DesktopFont
IAudio <|.. DesktopAudio
IEngine <|.. DesktopEngine
Runnable <|.. DesktopEngine
MouseInputListener <|.. DesktopEngine
@enduml