157 lines
5.9 KiB
C
157 lines
5.9 KiB
C
/*
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
|
|
* All rights reserved.
|
|
*
|
|
* The Original Code is: all of this file.
|
|
*
|
|
* Contributor(s): Joshua Leung
|
|
*
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
*/
|
|
|
|
/** \file DNA_view2d_types.h
|
|
* \ingroup DNA
|
|
*/
|
|
|
|
#ifndef __DNA_VIEW2D_TYPES_H__
|
|
#define __DNA_VIEW2D_TYPES_H__
|
|
|
|
#include "DNA_vec_types.h"
|
|
|
|
/* ---------------------------------- */
|
|
|
|
/* View 2D data - stored per region */
|
|
typedef struct View2D {
|
|
rctf tot, cur; /* tot - area that data can be drawn in; cur - region of tot that is visible in viewport */
|
|
rcti vert, hor; /* vert - vertical scrollbar region; hor - horizontal scrollbar region */
|
|
rcti mask; /* mask - region (in screenspace) within which 'cur' can be viewed */
|
|
|
|
float min[2], max[2]; /* min/max sizes of 'cur' rect (only when keepzoom not set) */
|
|
float minzoom, maxzoom; /* self explanatory. allowable zoom factor range (only when keepzoom set) */
|
|
|
|
short scroll; /* scroll - scrollbars to display (bitflag) */
|
|
short scroll_ui; /* scroll_ui - temp settings used for UI drawing of scrollers */
|
|
|
|
short keeptot; /* keeptot - 'cur' rect cannot move outside the 'tot' rect? */
|
|
short keepzoom; /* keepzoom - axes that zooming cannot occur on, and also clamp within zoom-limits */
|
|
short keepofs; /* keepofs - axes that translation is not allowed to occur on */
|
|
|
|
short flag; /* settings */
|
|
short align; /* alignment of content in totrect */
|
|
|
|
short winx, winy; /* storage of current winx/winy values, set in UI_view2d_size_update */
|
|
short oldwinx, oldwiny; /* storage of previous winx/winy values encountered by UI_view2d_curRect_validate(), for keepaspect */
|
|
|
|
short around; /* pivot point for transforms (rotate and scale) */
|
|
|
|
float *tab_offset; /* different offset per tab, for buttons */
|
|
int tab_num; /* number of tabs stored */
|
|
int tab_cur; /* current tab */
|
|
|
|
/* animated smooth view */
|
|
struct SmoothView2DStore *sms;
|
|
struct wmTimer *smooth_timer;
|
|
|
|
} View2D;
|
|
|
|
/* ---------------------------------- */
|
|
|
|
/* view zooming restrictions, per axis (v2d->keepzoom) */
|
|
/* zoom is clamped to lie within limits set by minzoom and maxzoom */
|
|
#define V2D_LIMITZOOM 0x0001
|
|
/* aspect ratio is maintained on view resize */
|
|
#define V2D_KEEPASPECT 0x0002
|
|
/* zoom is kept when the window resizes */
|
|
#define V2D_KEEPZOOM 0x0004
|
|
/* zooming on x-axis is not allowed */
|
|
#define V2D_LOCKZOOM_X 0x0100
|
|
/* zooming on y-axis is not allowed */
|
|
#define V2D_LOCKZOOM_Y 0x0200
|
|
|
|
/* view panning restrictions, per axis (v2d->keepofs) */
|
|
/* panning on x-axis is not allowed */
|
|
#define V2D_LOCKOFS_X (1<<1)
|
|
/* panning on y-axis is not allowed */
|
|
#define V2D_LOCKOFS_Y (1<<2)
|
|
/* on resize, keep the x offset */
|
|
#define V2D_KEEPOFS_X (1<<3)
|
|
/* on resize, keep the y offset */
|
|
#define V2D_KEEPOFS_Y (1<<4)
|
|
|
|
/* view extent restrictions (v2d->keeptot) */
|
|
/* 'cur' view can be out of extents of 'tot' */
|
|
#define V2D_KEEPTOT_FREE 0
|
|
/* 'cur' rect is adjusted so that it satisfies the extents of 'tot', with some compromises */
|
|
#define V2D_KEEPTOT_BOUNDS 1
|
|
/* 'cur' rect is moved so that the 'minimum' bounds of the 'tot' rect are always respected (particularly in x-axis) */
|
|
#define V2D_KEEPTOT_STRICT 2
|
|
|
|
/* general refresh settings (v2d->flag) */
|
|
/* global view2d horizontal locking (for showing same time interval) */
|
|
/* TODO: this flag may be set in old files but is not accessible currently, should be exposed from RNA - Campbell */
|
|
#define V2D_VIEWSYNC_SCREEN_TIME (1<<0)
|
|
/* within area (i.e. between regions) view2d vertical locking */
|
|
#define V2D_VIEWSYNC_AREA_VERTICAL (1<<1)
|
|
/* apply pixel offsets on x-axis when setting view matrices */
|
|
#define V2D_PIXELOFS_X (1<<2)
|
|
/* apply pixel offsets on y-axis when setting view matrices */
|
|
#define V2D_PIXELOFS_Y (1<<3)
|
|
/* view settings need to be set still... */
|
|
#define V2D_IS_INITIALISED (1<<10)
|
|
|
|
/* scroller flags for View2D (v2d->scroll) */
|
|
/* left scrollbar */
|
|
#define V2D_SCROLL_LEFT (1<<0)
|
|
#define V2D_SCROLL_RIGHT (1<<1)
|
|
#define V2D_SCROLL_VERTICAL (V2D_SCROLL_LEFT|V2D_SCROLL_RIGHT)
|
|
/* horizontal scrollbar */
|
|
#define V2D_SCROLL_TOP (1<<2)
|
|
#define V2D_SCROLL_BOTTOM (1<<3)
|
|
|
|
/* UNUSED (1<<4) */
|
|
#define V2D_SCROLL_HORIZONTAL (V2D_SCROLL_TOP|V2D_SCROLL_BOTTOM)
|
|
/* scale markings - vertical */
|
|
#define V2D_SCROLL_SCALE_VERTICAL (1<<5)
|
|
/* scale markings - horizontal */
|
|
#define V2D_SCROLL_SCALE_HORIZONTAL (1<<6)
|
|
/* induce hiding of scrollbars - set by region drawing in response to size of region */
|
|
#define V2D_SCROLL_VERTICAL_HIDE (1<<7)
|
|
#define V2D_SCROLL_HORIZONTAL_HIDE (1<<8)
|
|
/* scrollbar extends beyond its available window - set when calculating scrollbars for drawing */
|
|
#define V2D_SCROLL_VERTICAL_FULLR (1<<9)
|
|
#define V2D_SCROLL_HORIZONTAL_FULLR (1<<10)
|
|
|
|
/* scroll_ui, activate flag for drawing */
|
|
#define V2D_SCROLL_H_ACTIVE (1<<0)
|
|
#define V2D_SCROLL_V_ACTIVE (1<<1)
|
|
|
|
/* alignment flags for totrect, flags use 'shading-out' convention (v2d->align) */
|
|
/* all quadrants free */
|
|
#define V2D_ALIGN_FREE 0
|
|
/* horizontal restrictions */
|
|
#define V2D_ALIGN_NO_POS_X (1<<0)
|
|
#define V2D_ALIGN_NO_NEG_X (1<<1)
|
|
/* vertical restrictions */
|
|
#define V2D_ALIGN_NO_POS_Y (1<<2)
|
|
#define V2D_ALIGN_NO_NEG_Y (1<<3)
|
|
|
|
|
|
#endif
|
|
|