Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Kim <pk15950@gmail.com>2021-10-03 06:22:05 +0300
committerPeter Kim <pk15950@gmail.com>2021-10-03 06:22:05 +0300
commit6fc81d6bca6424a1e44305df7cdc3598e03b00ba (patch)
treea66f17c5378f2a68f4c5d8b09f56687c3d9bf888 /source/blender/editors/space_image
parent85e1f28fcaafd137a546bf192777b00f96851e80 (diff)
parentd3afe0c1265c9ebb53053de68f176b30f0132281 (diff)
Merge branch 'master' into xr-controller-supportxr-controller-support
Diffstat (limited to 'source/blender/editors/space_image')
-rw-r--r--source/blender/editors/space_image/image_draw.c60
-rw-r--r--source/blender/editors/space_image/space_image.c16
2 files changed, 69 insertions, 7 deletions
diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c
index d2af26aa1d7..fc04ec1fe02 100644
--- a/source/blender/editors/space_image/image_draw.c
+++ b/source/blender/editors/space_image/image_draw.c
@@ -34,6 +34,7 @@
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "DNA_view2d_types.h"
#include "PIL_time.h"
@@ -576,3 +577,62 @@ void draw_image_cache(const bContext *C, ARegion *region)
ED_mask_draw_frames(mask, region, cfra, sfra, efra);
}
}
+
+float ED_space_image_zoom_level(const View2D *v2d, const int grid_dimension)
+{
+ /* UV-space length per pixel */
+ float xzoom = (v2d->cur.xmax - v2d->cur.xmin) / ((float)(v2d->mask.xmax - v2d->mask.xmin));
+ float yzoom = (v2d->cur.ymax - v2d->cur.ymin) / ((float)(v2d->mask.ymax - v2d->mask.ymin));
+
+ /* Zoom_factor for UV/Image editor is calculated based on:
+ * - Default grid size on startup, which is 256x256 pixels
+ * - How blend factor for grid lines is set up in the fragment shader `grid_frag.glsl`. */
+ float zoom_factor;
+ zoom_factor = (xzoom + yzoom) / 2.0f; /* Average for accuracy. */
+ zoom_factor *= 256.0f / (powf(grid_dimension, 2));
+ return zoom_factor;
+}
+
+void ED_space_image_grid_steps(SpaceImage *sima,
+ float grid_steps[SI_GRID_STEPS_LEN],
+ const int grid_dimension)
+{
+ if (sima->flag & SI_CUSTOM_GRID) {
+ for (int step = 0; step < SI_GRID_STEPS_LEN; step++) {
+ grid_steps[step] = powf(1, step) * (1.0f / ((float)sima->custom_grid_subdiv));
+ }
+ }
+ else {
+ for (int step = 0; step < SI_GRID_STEPS_LEN; step++) {
+ grid_steps[step] = powf(grid_dimension, step) *
+ (1.0f / (powf(grid_dimension, SI_GRID_STEPS_LEN)));
+ }
+ }
+}
+
+/**
+ * Calculate the increment snapping value for UV/image editor based on the zoom factor
+ * The code in here (except the offset part) is used in `grid_frag.glsl` (see `grid_res`) for
+ * drawing the grid overlay for the UV/Image editor.
+ */
+float ED_space_image_increment_snap_value(const int grid_dimesnions,
+ const float grid_steps[SI_GRID_STEPS_LEN],
+ const float zoom_factor)
+{
+ /* Small offset on each grid_steps[] so that snapping value doesn't change until grid lines are
+ * significantly visible.
+ * `Offset = 3/4 * (grid_steps[i] - (grid_steps[i] / grid_dimesnsions))`
+ *
+ * Refer `grid_frag.glsl` to find out when grid lines actually start appearing */
+
+ for (int step = 0; step < SI_GRID_STEPS_LEN; step++) {
+ float offset = (3.0f / 4.0f) * (grid_steps[step] - (grid_steps[step] / grid_dimesnions));
+
+ if ((grid_steps[step] - offset) > zoom_factor) {
+ return grid_steps[step];
+ }
+ }
+
+ /* Fallback */
+ return grid_steps[0];
+}
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index de8e4684d45..f14a8266cdd 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -126,13 +126,7 @@ static SpaceLink *image_create(const ScrArea *UNUSED(area), const Scene *UNUSED(
simage->tile_grid_shape[0] = 1;
simage->tile_grid_shape[1] = 1;
- /* tool header */
- region = MEM_callocN(sizeof(ARegion), "tool header for image");
-
- BLI_addtail(&simage->regionbase, region);
- region->regiontype = RGN_TYPE_TOOL_HEADER;
- region->alignment = (U.uiflag & USER_HEADER_BOTTOM) ? RGN_ALIGN_BOTTOM : RGN_ALIGN_TOP;
- region->flag = RGN_FLAG_HIDDEN | RGN_FLAG_HIDDEN_BY_USER;
+ simage->custom_grid_subdiv = 10;
/* header */
region = MEM_callocN(sizeof(ARegion), "header for image");
@@ -141,6 +135,14 @@ static SpaceLink *image_create(const ScrArea *UNUSED(area), const Scene *UNUSED(
region->regiontype = RGN_TYPE_HEADER;
region->alignment = (U.uiflag & USER_HEADER_BOTTOM) ? RGN_ALIGN_BOTTOM : RGN_ALIGN_TOP;
+ /* tool header */
+ region = MEM_callocN(sizeof(ARegion), "tool header for image");
+
+ BLI_addtail(&simage->regionbase, region);
+ region->regiontype = RGN_TYPE_TOOL_HEADER;
+ region->alignment = (U.uiflag & USER_HEADER_BOTTOM) ? RGN_ALIGN_BOTTOM : RGN_ALIGN_TOP;
+ region->flag = RGN_FLAG_HIDDEN | RGN_FLAG_HIDDEN_BY_USER;
+
/* buttons/list view */
region = MEM_callocN(sizeof(ARegion), "buttons for image");