tornavis/source/blender/makesdna/DNA_view2d_types.h

172 lines
5.5 KiB
C

/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup DNA
*/
#pragma once
#include "DNA_vec_types.h"
/* ---------------------------------- */
/** View 2D data - stored per region. */
typedef struct View2D {
/** Tot - area that data can be drawn in; cur - region of tot that is visible in viewport. */
rctf tot, cur;
/** Vert - vertical scroll-bar region; hor - horizontal scroll-bar region. */
rcti vert, hor;
/** Mask - region (in screen-space) within which 'cur' can be viewed. */
rcti mask;
/** Min/max sizes of 'cur' rect (only when keepzoom not set). */
float min[2], max[2];
/** Allowable zoom factor range (only when (keepzoom & V2D_LIMITZOOM)) is set. */
float minzoom, maxzoom;
/** Scroll - scroll-bars to display (bit-flag). */
short scroll;
/** Scroll_ui - temp settings used for UI drawing of scrollers. */
short scroll_ui;
/** Keeptot - 'cur' rect cannot move outside the 'tot' rect? */
short keeptot;
/** Keepzoom - axes that zooming cannot occur on, and also clamp within zoom-limits. */
short keepzoom;
/** Keepofs - axes that translation is not allowed to occur on. */
short keepofs;
/** Settings. */
short flag;
/** Alignment of content in totrect. */
short align;
/** Storage of current winx/winy values, set in UI_view2d_size_update. */
short winx, winy;
/**
* Storage of previous winx/winy values encountered by #UI_view2d_curRect_validate(),
* for keep-aspect.
*/
short oldwinx, oldwiny;
/** Pivot point for transforms (rotate and scale). */
short around;
/* Usually set externally (as in, not in view2d files). */
/** Alpha of vertical and horizontal scroll-bars (range is [0, 255]). */
char alpha_vert, alpha_hor;
char _pad[2];
/** When set (not 0), determines how many pixels to scroll when scrolling an entire page.
* Otherwise the height of #View2D.mask is used. */
float page_size_y;
/* animated smooth view */
struct SmoothView2DStore *sms;
struct wmTimer *smooth_timer;
} View2D;
/* ---------------------------------- */
/** View zooming restrictions, per axis (#View2D.keepzoom) */
enum {
/* zoom is clamped to lie within limits set by minzoom and maxzoom */
V2D_LIMITZOOM = (1 << 0),
/* aspect ratio is maintained on view resize */
V2D_KEEPASPECT = (1 << 1),
/* zoom is kept when the window resizes */
V2D_KEEPZOOM = (1 << 2),
/* zooming on x-axis is not allowed */
V2D_LOCKZOOM_X = (1 << 8),
/* zooming on y-axis is not allowed */
V2D_LOCKZOOM_Y = (1 << 9),
};
/** View panning restrictions, per axis (#View2D.keepofs). */
enum {
/* panning on x-axis is not allowed */
V2D_LOCKOFS_X = (1 << 1),
/* panning on y-axis is not allowed */
V2D_LOCKOFS_Y = (1 << 2),
/* on resize, keep the x offset */
V2D_KEEPOFS_X = (1 << 3),
/* on resize, keep the y offset */
V2D_KEEPOFS_Y = (1 << 4),
};
/** View extent restrictions (#View2D.keeptot). */
enum {
/** 'cur' view can be out of extents of 'tot' */
V2D_KEEPTOT_FREE = 0,
/** 'cur' rect is adjusted so that it satisfies the extents of 'tot', with some compromises */
V2D_KEEPTOT_BOUNDS = 1,
/** 'cur' rect is moved so that the 'minimum' bounds of the 'tot' rect are always respected
* (particularly in x-axis) */
V2D_KEEPTOT_STRICT = 2,
};
/** General refresh settings (#View2D.flag). */
enum {
/* global view2d horizontal locking (for showing same time interval) */
V2D_VIEWSYNC_SCREEN_TIME = (1 << 0),
/* within area (i.e. between regions) view2d vertical locking */
V2D_VIEWSYNC_AREA_VERTICAL = (1 << 1),
/* apply pixel offsets on x-axis when setting view matrices */
V2D_PIXELOFS_X = (1 << 2),
/* apply pixel offsets on y-axis when setting view matrices */
V2D_PIXELOFS_Y = (1 << 3),
/* zoom, pan or similar action is in progress */
V2D_IS_NAVIGATING = (1 << 9),
/* view settings need to be set still... */
V2D_IS_INIT = (1 << 10),
/* Ensure scrolling always snaps to multiples of #View2D.page_size_y or the #View2D.mask height
* if this is 0. Zooming doesn't respect this. */
V2D_SNAP_TO_PAGESIZE_Y = (1 << 11),
};
/** Scroller flags for View2D (#View2D.scroll). */
enum {
/* Left scroll-bar. */
V2D_SCROLL_LEFT = (1 << 0),
V2D_SCROLL_RIGHT = (1 << 1),
V2D_SCROLL_VERTICAL = (V2D_SCROLL_LEFT | V2D_SCROLL_RIGHT),
/* Horizontal scroll-bar. */
V2D_SCROLL_TOP = (1 << 2),
V2D_SCROLL_BOTTOM = (1 << 3),
/* UNUSED = (1 << 4), */
V2D_SCROLL_HORIZONTAL = (V2D_SCROLL_TOP | V2D_SCROLL_BOTTOM),
/* display vertical scale handles */
V2D_SCROLL_VERTICAL_HANDLES = (1 << 5),
/* display horizontal scale handles */
V2D_SCROLL_HORIZONTAL_HANDLES = (1 << 6),
/* Induce hiding of scroll-bar - set by region drawing in response to size of region. */
V2D_SCROLL_VERTICAL_HIDE = (1 << 7),
V2D_SCROLL_HORIZONTAL_HIDE = (1 << 8),
/* Scroll-bar extends beyond its available window -
* set when calculating scroll-bar for drawing */
V2D_SCROLL_VERTICAL_FULLR = (1 << 9),
V2D_SCROLL_HORIZONTAL_FULLR = (1 << 10),
};
/** scroll_ui, activate flag for drawing. */
enum {
V2D_SCROLL_H_ACTIVE = (1 << 0),
V2D_SCROLL_V_ACTIVE = (1 << 1),
};
/**
* Alignment flags for `totrect`, flags use 'shading-out' convention (#View2D.align).
*/
enum {
/* all quadrants free */
V2D_ALIGN_FREE = 0,
/* horizontal restrictions */
V2D_ALIGN_NO_POS_X = (1 << 0),
V2D_ALIGN_NO_NEG_X = (1 << 1),
/* vertical restrictions */
V2D_ALIGN_NO_POS_Y = (1 << 2),
V2D_ALIGN_NO_NEG_Y = (1 << 3),
};