|
@ -639,6 +639,7 @@ public class Game : GameWindow { |
|
|
int ribbonIndex = 0; |
|
|
int ribbonIndex = 0; |
|
|
Vector2i mouseDragStart; |
|
|
Vector2i mouseDragStart; |
|
|
Vector2i mouseDragEnd; |
|
|
Vector2i mouseDragEnd; |
|
|
|
|
|
float activeScale = 1f; |
|
|
Shader shader = new(); |
|
|
Shader shader = new(); |
|
|
Matrix4 projection; |
|
|
Matrix4 projection; |
|
|
float zoomLevel = 0f; |
|
|
float zoomLevel = 0f; |
|
@ -737,6 +738,11 @@ public class Game : GameWindow { |
|
|
photoIndex -= 5; |
|
|
photoIndex -= 5; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// FIXME: crop should be a modal tool that starts with C and ends with Enter or Escape.
|
|
|
|
|
|
if (input.IsKeyPressed(Keys.C)) { |
|
|
|
|
|
ApplyCrop(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
if (input.IsKeyPressed(Keys.P) && altIsDown) { |
|
|
if (input.IsKeyPressed(Keys.P) && altIsDown) { |
|
|
ExportPhotos(); |
|
|
ExportPhotos(); |
|
|
} |
|
|
} |
|
@ -993,7 +999,11 @@ public class Game : GameWindow { |
|
|
SwapBuffers(); |
|
|
SwapBuffers(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void DrawCropBox() { |
|
|
|
|
|
|
|
|
// left, right, top, bottom
|
|
|
|
|
|
(int, int, int, int) GetCrop() { |
|
|
|
|
|
// FIXME: this expects the start point in the top left and the end point
|
|
|
|
|
|
// in the bottom right; some sign flipping needs to occur to make anchors
|
|
|
|
|
|
// in other direction work well.
|
|
|
Vector2i start = mouseDragStart; |
|
|
Vector2i start = mouseDragStart; |
|
|
Vector2i end = mouseDragEnd; |
|
|
Vector2i end = mouseDragEnd; |
|
|
end.Y = Math.Min(end.Y, start.Y + (end.X - start.X) * 4 / 6); |
|
|
end.Y = Math.Min(end.Y, start.Y + (end.X - start.X) * 4 / 6); |
|
@ -1002,6 +1012,20 @@ public class Game : GameWindow { |
|
|
int right = Math.Max(start.X, end.X); |
|
|
int right = Math.Max(start.X, end.X); |
|
|
int top = Math.Min(start.Y, end.Y); |
|
|
int top = Math.Min(start.Y, end.Y); |
|
|
int bottom = Math.Max(start.Y, end.Y); |
|
|
int bottom = Math.Max(start.Y, end.Y); |
|
|
|
|
|
return (left, right, top, bottom); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void ApplyCrop() { |
|
|
|
|
|
var (left, right, top, bottom) = GetCrop(); |
|
|
|
|
|
int area = (right - left) * (bottom - top); |
|
|
|
|
|
if (area < 100) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void DrawCropBox() { |
|
|
|
|
|
var (left, right, top, bottom) = GetCrop(); |
|
|
int area = (right - left) * (bottom - top); |
|
|
int area = (right - left) * (bottom - top); |
|
|
|
|
|
|
|
|
if (area < 100) { |
|
|
if (area < 100) { |
|
@ -1032,10 +1056,12 @@ public class Game : GameWindow { |
|
|
if (zoomLevel > 0f) { |
|
|
if (zoomLevel > 0f) { |
|
|
scale = zoomLevel; |
|
|
scale = zoomLevel; |
|
|
} |
|
|
} |
|
|
|
|
|
activeScale = scale; |
|
|
|
|
|
|
|
|
Vector2i renderSize = (Vector2i) (((Vector2) active.Size) * scale); |
|
|
Vector2i renderSize = (Vector2i) (((Vector2) active.Size) * scale); |
|
|
Vector2i center = (Vector2i) geometry.PhotoBox.Center; |
|
|
Vector2i center = (Vector2i) geometry.PhotoBox.Center; |
|
|
Box2i photoBox = Util.MakeBox(center.X - renderSize.X / 2, center.Y - renderSize.Y / 2, renderSize.X, renderSize.Y); |
|
|
|
|
|
|
|
|
// Box2i photoBox = Util.MakeBox(center.X - renderSize.X / 2, center.Y - renderSize.Y / 2, renderSize.X, renderSize.Y);
|
|
|
|
|
|
Box2i photoBox = Util.MakeBox(0, 0, renderSize.X, renderSize.Y); |
|
|
DrawTexture(active, photoBox); |
|
|
DrawTexture(active, photoBox); |
|
|
for (int i = 0; i < 5; i++) { |
|
|
for (int i = 0; i < 5; i++) { |
|
|
Texture star = (activePhoto.Rating > i) ? STAR_FILLED : STAR_EMPTY; |
|
|
Texture star = (activePhoto.Rating > i) ? STAR_FILLED : STAR_EMPTY; |
|
|