113 lines
1.9 KiB
C++
113 lines
1.9 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;
|
|
};
|
|
|
|
class AwkwardFace : public Face
|
|
{
|
|
public:
|
|
AwkwardFace(Point p, int r);
|
|
void attach_to(Graph_lib::Window& win) override;
|
|
private:
|
|
Circle leftEye, rightEye;
|
|
Open_polyline mouth;
|
|
}; |