protected override void ChangeNotLikedFragmentToLiked(PaintingFragment fragment)
 {
     if (fragmentLiked != null)
     {
         shapeDrawers[fragment] = new ShapeDrawer(shapeDrawers[fragmentLiked.Value]);
     }
 }
 //    public override event EventHandler ImageChanged;
 protected override void ChangeNotLikedFragmentToLiked(PaintingFragment fragment)
 {
     if (fragmentLiked != null)
     {
         colorsWithProbability[fragment] =
             new List<ColorProbabilityPair>(colorsWithProbability[fragmentLiked.Value]);
     }
 }
 //   public override event EventHandler ImageChanged;
 protected override void ChangeNotLikedFragmentToLiked(PaintingFragment fragment)
 {
     if (fragmentLiked != null)
     {
         topics[fragment] = topics[fragmentLiked.Value];
         images[fragment] = googleTopicsImageFinder.GetPicture(topics[fragmentLiked.Value]);
     }
 }
        public void ReviewPainting(PaintingFragment fragment, bool likedIt)
        {
            if (likedIt)
            {
                fragmentLiked = fragment;

                //if (Mode == PaintingMode.GoogleTopicsImages)
                {
                    foreach (PaintingFragment value in Enum.GetValues(typeof (PaintingFragment)))
                    {
                        if (value != fragmentLiked.Value)
                        {
                            ChangeNotLikedFragmentToLiked(value);
                        }
                    }
                }
            }
            else
            {
                fragmentHated = fragment;
                ChangHatedFragment();
            }

            UpdatePainting();
            ImageChanged?.Invoke(this, EventArgs.Empty);
        }
 protected CoordsRange PaintingFragmentToRange(PaintingFragment pf)
 {
     switch (pf)
     {
         case PaintingFragment.LeftTop:
             return new CoordsRange(new Coords(0, 0), new Coords(width/2, height/2));
         case PaintingFragment.RightTop:
             return new CoordsRange(new Coords(width/2, 0), new Coords(width, height/2));
         case PaintingFragment.LeftBottom:
             return new CoordsRange(new Coords(0, height/2), new Coords(width/2, height));
         case PaintingFragment.RightBottom:
             return new CoordsRange(new Coords(width/2, height/2), new Coords(width, height));
         default:
             throw new ArgumentOutOfRangeException(nameof(pf), pf, null);
     }
 }
 protected bool DoesPaintingFragmentNeedRepaint(PaintingFragment pf)
 {
     return (!fragmentLiked.HasValue && !fragmentHated.HasValue) ||
            (fragmentLiked.HasValue && pf != fragmentLiked.Value) ||
            (fragmentHated.HasValue && pf == fragmentHated.Value);
 }
 protected void clearFragment(PaintingFragment pf)
 {
     for (var x = 0; x < width; x++)
         for (var y = 0; y < height; y++)
         {
             if (CoordsToPaintingFragment(x, y) == pf)
             {
                 Painting.SetPixel(x, y, Color.White);
             }
         }
 }
 protected abstract void ChangeNotLikedFragmentToLiked(PaintingFragment fragment);