TDT4102-Ovinger/Oving 7/Oving 7/Emoji.h

103 lines
1.8 KiB
C++

#pragma once
// Include Graph_lib library files that holds declarations needed for Window,
// and Shape derivatives.
#include "Graph.h"
#include "GUI.h"
// This part is only relevant for non-Windows users in 2019.
// Windows users has Graph_lib::Arc, Mac don't.
#ifndef WIN32
#include "Graph_lib.h"
#endif
using namespace Graph_lib;
class Emoji
{
public:
// Disable copying. Disable slicing, etc.
Emoji(const Emoji&) = delete;
Emoji& operator=(const Emoji&) = delete;
Emoji() {}
virtual void attach_to(Graph_lib::Window&) = 0;
virtual ~Emoji() {}
};
// A yellow, empty face.
// An abstract class.
class Face : public Emoji
{
public:
Face(const Face&) = delete;
Face& operator=(const Face&) = delete;
virtual ~Face() {}
Face(Point c, int r);
void attach_to(Graph_lib::Window& win) override;
private:
Circle faceMask;
};
class EmptyFace : public Face
{
public:
EmptyFace(Point p, int r);
void attach_to(Graph_lib::Window& win) override;
private:
Circle leftEye;
Circle rightEye;
};
class SmileyFace : public EmptyFace
{
public:
SmileyFace(Point p, int r);
virtual ~SmileyFace() {};
void attach_to(Graph_lib::Window& win) override;
private:
Arc Smile;
};
class SadFace : public EmptyFace
{
public:
SadFace(Point p, int r);
virtual ~SadFace() {};
void attach_to(Graph_lib::Window& win) override;
private:
Arc Sad;
};
class AngryFace : public EmptyFace
{
public:
AngryFace(Point p, int r);
virtual ~AngryFace() {};
void attach_to(Graph_lib::Window& win) override;
private:
int x1, y1;
int x2, y2;
Arc AngryOver;
Line leftBrow, rightBrow;
};
class WinkingFace : public Face
{
public:
WinkingFace(Point p, int r);
void attach_to(Graph_lib::Window& win) override;
private:
Circle leftEye;
Arc smile;
Open_polyline wink;
int x1,x2;
int y1, y2, y3;
};