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:
Diffstat (limited to 'source/blender/src/ghostwinlay.c')
-rw-r--r--source/blender/src/ghostwinlay.c835
1 files changed, 0 insertions, 835 deletions
diff --git a/source/blender/src/ghostwinlay.c b/source/blender/src/ghostwinlay.c
deleted file mode 100644
index 597a23a20d7..00000000000
--- a/source/blender/src/ghostwinlay.c
+++ /dev/null
@@ -1,835 +0,0 @@
-/**
- * $Id$
- *
- * ***** BEGIN GPL/BL DUAL 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. The Blender
- * Foundation also sells licenses for use in proprietary software under
- * the Blender License. See http://www.blender.org/BL/ for information
- * about this.
- *
- * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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): none yet.
- *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
- */
-#include <stdlib.h>
-#include <stdio.h>
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "MEM_guardedalloc.h"
-
-#include "DNA_listBase.h"
-#include "DNA_userdef_types.h" /* U.flag & TWOBUTTONMOUSE */
-
-#include "BLI_blenlib.h"
-
-#include "GHOST_C-api.h"
-
-#include "BKE_utildefines.h"
-#include "BKE_global.h"
-
-#include "BIF_gl.h"
-#include "BIF_graphics.h"
-#include "BIF_mywindow.h"
-#include "BIF_screen.h"
-#include "BIF_usiblender.h"
-#include "BIF_cursors.h"
-
-#include "mydevice.h"
-#include "blendef.h"
-
-#include "winlay.h"
-
-#ifdef __APPLE__
-#include <OpenGL/OpenGL.h>
-#define __CARBONSOUND__
- /* XXX BIG WARNING: carbon.h should not be included in blender/src code, it conflicts with struct ID */
-#define ID ID_
-#include <Carbon/Carbon.h>
-
-/*declarations*/
-int checkAppleVideoCard(void);
-void getMacAvailableBounds(short *, short *, short *, short *);
-
-#endif
-///
-
-struct _Window {
- GHOST_WindowHandle ghostwin;
-
- /* Handler and private data for handler */
- WindowHandlerFP handler;
- void *user_data;
-
- /* Window state */
- int size[2], position[2];
- int active, visible;
-
- /* Last known mouse/button/qualifier state */
- int lmouse[2];
- int lqual; /* (LR_SHFTKEY, LR_CTRLKEY, LR_ALTKEY, LR_COMMANDKEY) */
- int lmbut; /* (L_MOUSE, M_MOUSE, R_MOUSE) */
-
- /* xtilt and ytilt represent how much the pen is tilted away from
- * vertically upright in either the X or Y direction, with X and Y the
- * axes of the tablet surface.
- * In other words, Xtilt and Ytilt are components of a vector created by projecting
- * the pen's angle in 3D space vertically downwards on to the XY plane
- * --Matt
- */
- float pressure; /* tablet pressure - 0.0 (no pressure) to 1.0 (full pressure) */
- /* mouse clicks and non-contacting stylus buttons generate pressure of 0.0. */
- float xtilt, ytilt; /* tablet tilt value - x and y components of 3D angle
- * ranging from 0.0 (pen upright) to 1.0 (pen fully leaning over) */
- short activedevice; /* Active input device currently in use (DEV_MOUSE, DEV_STYLUS, DEV_ERASER) */
-
-
- /* Tracks the faked mouse button, if non-zero it is
- * the event number of the last faked button.
- */
- int faked_mbut;
-
- GHOST_TimerTaskHandle timer;
- int timer_event;
-};
-
-///
-
-#ifdef __APPLE__
-
-/* to avoid killing small end comps, we want to allow
- blender to start maximised if all the followings are true :
- - Renderer is OpenGL capable
- - Hardware acceleration
- - VRAM > 16 Mo
-
- we will bail out if VRAM is less than 8Mo
- */
-
-static int macPrefState = 0;
-
-int checkAppleVideoCard(void) {
- long theErr;
- unsigned long display_mask;
- CGLRendererInfoObj rend;
- long nrend;
- int j;
- long value;
- long maxvram = 0; /* we get always more than 1 renderer, check one, at least, has 8 Mo */
-
- display_mask = CGDisplayIDToOpenGLDisplayMask (CGMainDisplayID() );
-
- theErr = CGLQueryRendererInfo( display_mask, &rend, &nrend);
- if (theErr == 0) {
- theErr = CGLDescribeRenderer (rend, 0, kCGLRPRendererCount, &nrend);
- if (theErr == 0) {
- for (j = 0; j < nrend; j++) {
- theErr = CGLDescribeRenderer (rend, j, kCGLRPVideoMemory, &value);
- if (value > maxvram)
- maxvram = value;
- if ((theErr == 0) && (value >= 20000000)) {
- theErr = CGLDescribeRenderer (rend, j, kCGLRPAccelerated, &value);
- if ((theErr == 0) && (value != 0)) {
- theErr = CGLDescribeRenderer (rend, j, kCGLRPCompliant, &value);
- if ((theErr == 0) && (value != 0)) {
- /*fprintf(stderr,"make it big\n");*/
- CGLDestroyRendererInfo (rend);
- macPrefState = 8;
- return 1;
- }
- }
- }
- }
- }
- }
- if (maxvram < 7500000 ) { /* put a standard alert and quit*/
- SInt16 junkHit;
- char inError[] = "* Not enough VRAM ";
- char inText[] = "* blender needs at least 8Mb ";
- inError[0] = 16;
- inText[0] = 28;
-
- fprintf(stderr, " vram is %li . not enough, aborting\n", maxvram);
- StandardAlert ( kAlertStopAlert, (ConstStr255Param) &inError, (ConstStr255Param)&inText,NULL,&junkHit);
- abort();
- }
- CGLDestroyRendererInfo (rend);
- return 0;
-}
-
-void getMacAvailableBounds(short *top, short *left, short *bottom, short *right) {
- Rect outAvailableRect;
-
- GetAvailableWindowPositioningBounds ( GetMainDevice(), &outAvailableRect);
-
- *top = outAvailableRect.top;
- *left = outAvailableRect.left;
- *bottom = outAvailableRect.bottom;
- *right = outAvailableRect.right;
-}
-
-#endif
-
-
-static GHOST_SystemHandle g_system= 0;
-
- /* Some simple ghost <-> blender conversions */
-
-static GHOST_TStandardCursor convert_cursor(int curs) {
- switch(curs) {
- default:
- case CURSOR_STD: return GHOST_kStandardCursorDefault;
- case CURSOR_VPAINT: return GHOST_kStandardCursorRightArrow;
- case CURSOR_FACESEL: return GHOST_kStandardCursorRightArrow;
- case CURSOR_WAIT: return GHOST_kStandardCursorWait;
- case CURSOR_EDIT: return GHOST_kStandardCursorCrosshair;
- case CURSOR_HELP: return GHOST_kStandardCursorHelp;
- case CURSOR_X_MOVE: return GHOST_kStandardCursorLeftRight;
- case CURSOR_Y_MOVE: return GHOST_kStandardCursorUpDown;
- case CURSOR_PENCIL: return GHOST_kStandardCursorPencil;
- }
-}
-
-static int convert_mbut(GHOST_TButtonMask but) {
- if (but == GHOST_kButtonMaskLeft) {
- return LEFTMOUSE;
- } else if (but == GHOST_kButtonMaskRight) {
- return RIGHTMOUSE;
- } else {
- return MIDDLEMOUSE;
- }
-}
-
-static int convert_key(GHOST_TKey key) {
- if (key>=GHOST_kKeyA && key<=GHOST_kKeyZ) {
- return (AKEY + ((int) key - GHOST_kKeyA));
- } else if (key>=GHOST_kKey0 && key<=GHOST_kKey9) {
- return (ZEROKEY + ((int) key - GHOST_kKey0));
- } else if (key>=GHOST_kKeyNumpad0 && key<=GHOST_kKeyNumpad9) {
- return (PAD0 + ((int) key - GHOST_kKeyNumpad0));
- } else if (key>=GHOST_kKeyF1 && key<=GHOST_kKeyF12) {
- return (F1KEY + ((int) key - GHOST_kKeyF1));
- } else {
- switch (key) {
- case GHOST_kKeyBackSpace: return BACKSPACEKEY;
- case GHOST_kKeyTab: return TABKEY;
- case GHOST_kKeyLinefeed: return LINEFEEDKEY;
- case GHOST_kKeyClear: return 0;
- case GHOST_kKeyEnter: return RETKEY;
-
- case GHOST_kKeyEsc: return ESCKEY;
- case GHOST_kKeySpace: return SPACEKEY;
- case GHOST_kKeyQuote: return QUOTEKEY;
- case GHOST_kKeyComma: return COMMAKEY;
- case GHOST_kKeyMinus: return MINUSKEY;
- case GHOST_kKeyPeriod: return PERIODKEY;
- case GHOST_kKeySlash: return SLASHKEY;
-
- case GHOST_kKeySemicolon: return SEMICOLONKEY;
- case GHOST_kKeyEqual: return EQUALKEY;
-
- case GHOST_kKeyLeftBracket: return LEFTBRACKETKEY;
- case GHOST_kKeyRightBracket: return RIGHTBRACKETKEY;
- case GHOST_kKeyBackslash: return BACKSLASHKEY;
- case GHOST_kKeyAccentGrave: return ACCENTGRAVEKEY;
-
- case GHOST_kKeyLeftShift: return LEFTSHIFTKEY;
- case GHOST_kKeyRightShift: return RIGHTSHIFTKEY;
- case GHOST_kKeyLeftControl: return LEFTCTRLKEY;
- case GHOST_kKeyRightControl: return RIGHTCTRLKEY;
- case GHOST_kKeyCommand: return COMMANDKEY;
- case GHOST_kKeyLeftAlt: return LEFTALTKEY;
- case GHOST_kKeyRightAlt: return RIGHTALTKEY;
-
- case GHOST_kKeyCapsLock: return CAPSLOCKKEY;
- case GHOST_kKeyNumLock: return 0;
- case GHOST_kKeyScrollLock: return 0;
-
- case GHOST_kKeyLeftArrow: return LEFTARROWKEY;
- case GHOST_kKeyRightArrow: return RIGHTARROWKEY;
- case GHOST_kKeyUpArrow: return UPARROWKEY;
- case GHOST_kKeyDownArrow: return DOWNARROWKEY;
-
- case GHOST_kKeyPrintScreen: return 0;
- case GHOST_kKeyPause: return PAUSEKEY;
-
- case GHOST_kKeyInsert: return INSERTKEY;
- case GHOST_kKeyDelete: return DELKEY;
- case GHOST_kKeyHome: return HOMEKEY;
- case GHOST_kKeyEnd: return ENDKEY;
- case GHOST_kKeyUpPage: return PAGEUPKEY;
- case GHOST_kKeyDownPage: return PAGEDOWNKEY;
-
- case GHOST_kKeyNumpadPeriod: return PADPERIOD;
- case GHOST_kKeyNumpadEnter: return PADENTER;
- case GHOST_kKeyNumpadPlus: return PADPLUSKEY;
- case GHOST_kKeyNumpadMinus: return PADMINUS;
- case GHOST_kKeyNumpadAsterisk: return PADASTERKEY;
- case GHOST_kKeyNumpadSlash: return PADSLASHKEY;
-
- case GHOST_kKeyGrLess: return GRLESSKEY;
-
- case GHOST_kKeyUnknown: return UNKNOWNKEY;
-
- default:
- return 0;
- }
- }
-}
-
- /***/
-
-
-static Window *window_new(GHOST_WindowHandle ghostwin)
-{
- Window *win= MEM_callocN(sizeof(*win), "Window");
- win->ghostwin= ghostwin;
-
- return win;
-}
-
-static void window_handle(Window *win, short event, short val)
-{
- if (win->handler) {
- win->handler(win, win->user_data, event, val, 0);
- }
-}
-
-static void window_handle_ext(Window *win, short event, short val, short extra)
-{
- if (win->handler) {
- win->handler(win, win->user_data, event, val, extra);
- }
-}
-
-static void window_free(Window *win)
-{
- MEM_freeN(win);
-}
-
- /***/
-
-static Window *active_gl_window= NULL;
-
-Window *window_open(char *title, int posx, int posy, int sizex, int sizey, int start_maximized)
-{
- GHOST_WindowHandle ghostwin;
- GHOST_TWindowState inital_state;
- int scr_w, scr_h;
-
- winlay_get_screensize(&scr_w, &scr_h);
- posy= (scr_h-posy-sizey);
-
- if (start_maximized == G_WINDOWSTATE_FULLSCREEN)
- inital_state = start_maximized?GHOST_kWindowStateFullScreen:GHOST_kWindowStateNormal;
- else
- inital_state = start_maximized?GHOST_kWindowStateMaximized:GHOST_kWindowStateNormal;
-#ifdef __APPLE__
- inital_state += macPrefState;
-#endif
-
- ghostwin= GHOST_CreateWindow(g_system,
- title,
- posx, posy, sizex, sizey,
- inital_state,
- GHOST_kDrawingContextTypeOpenGL,
- 0 /* no stereo */);
-
- if (ghostwin) {
- Window *win= window_new(ghostwin);
-
- if (win) {
- GHOST_SetWindowUserData(ghostwin, win);
-
- win->position[0]= posx;
- win->position[1]= posy;
- win->size[0]= sizex;
- win->size[1]= sizey;
-
- win->lmouse[0]= win->size[0]/2;
- win->lmouse[1]= win->size[1]/2;
-
-
- } else {
- GHOST_DisposeWindow(g_system, ghostwin);
- }
-
- return win;
- } else {
- return NULL;
- }
-}
-
-void window_set_handler(Window *win, WindowHandlerFP handler, void *user_data)
-{
- win->handler= handler;
- win->user_data= user_data;
-}
-
-static void window_timer_proc(GHOST_TimerTaskHandle timer, GHOST_TUns64 time)
-{
- Window *win= GHOST_GetTimerTaskUserData(timer);
-
- win->handler(win, win->user_data, win->timer_event, 0, 0);
-}
-
-void window_set_timer(Window *win, int delay_ms, int event)
-{
- if (win->timer) GHOST_RemoveTimer(g_system, win->timer);
-
- win->timer_event= event;
- win->timer= GHOST_InstallTimer(g_system, delay_ms, delay_ms, window_timer_proc, win);
-}
-
-void window_destroy(Window *win) {
- if (active_gl_window==win) {
- active_gl_window= NULL;
- }
-
- if (win->timer) {
- GHOST_RemoveTimer(g_system, win->timer);
- win->timer= NULL;
- }
-
- GHOST_DisposeWindow(g_system, win->ghostwin);
- window_free(win);
-}
-
-void window_set_cursor(Window *win, int curs) {
- if (curs==CURSOR_NONE) {
- GHOST_SetCursorVisibility(win->ghostwin, 0);
- } else {
- GHOST_SetCursorVisibility(win->ghostwin, 1);
-
- /* detect if we use system cursor or Blender cursor */
- switch(curs) {
- case CURSOR_TEXTEDIT:
- SetBlenderCursor(BC_TEXTEDITCURSOR);
- break;
- case CURSOR_VPAINT:
- SetBlenderCursor(BC_PAINTBRUSHCURSOR);
- break;
- default:
- GHOST_SetCursorShape(win->ghostwin, convert_cursor(curs));
- }
- }
-}
-
-void window_set_custom_cursor(Window *win, unsigned char mask[16][2],
- unsigned char bitmap[16][2], int hotx, int hoty) {
- GHOST_SetCustomCursorShape(win->ghostwin, bitmap, mask, hotx, hoty);
-}
-
-void window_set_custom_cursor_ex(Window *win, BCursor *cursor, int useBig) {
- if (useBig) {
- GHOST_SetCustomCursorShapeEx(win->ghostwin,
- (GHOST_TUns8 *)cursor->big_bm, (GHOST_TUns8 *)cursor->big_mask,
- cursor->big_sizex,cursor->big_sizey,
- cursor->big_hotx,cursor->big_hoty,
- cursor->fg_color, cursor->bg_color);
- } else {
- GHOST_SetCustomCursorShapeEx(win->ghostwin,
- (GHOST_TUns8 *)cursor->small_bm, (GHOST_TUns8 *)cursor->small_mask,
- cursor->small_sizex,cursor->small_sizey,
- cursor->small_hotx,cursor->small_hoty,
- cursor->fg_color, cursor->bg_color);
- }
-}
-
-void window_make_active(Window *win) {
- if (win != active_gl_window) {
- win->lmbut= 0; /* keeps hanging when mousepressed while other window opened */
- active_gl_window= win;
- GHOST_ActivateWindowDrawingContext(win->ghostwin);
- }
-}
-
-void window_swap_buffers(Window *win) {
- GHOST_SwapWindowBuffers(win->ghostwin);
-}
-
-static int query_qual(char qual) {
- GHOST_TModifierKeyMask left, right;
- int val= 0;
-
- if (qual=='s') {
- left= GHOST_kModifierKeyLeftShift;
- right= GHOST_kModifierKeyRightShift;
- } else if (qual=='c') {
- left= GHOST_kModifierKeyLeftControl;
- right= GHOST_kModifierKeyRightControl;
- } else if (qual=='C') {
- left= right= GHOST_kModifierKeyCommand;
- } else {
- left= GHOST_kModifierKeyLeftAlt;
- right= GHOST_kModifierKeyRightAlt;
- }
-
- GHOST_GetModifierKeyState(g_system, left, &val);
- if (!val)
- GHOST_GetModifierKeyState(g_system, right, &val);
-
- return val;
-}
-
-static int change_bit(int val, int bit, int to_on) {
- return to_on?(val|bit):(val&~bit);
-}
-
-static void update_tablet_data(Window *win, Window *ghostwin) {
- const GHOST_TabletData *td= GHOST_GetTabletData(ghostwin);
-
- /* if there's tablet data from an active tablet device then use it,
- * otherwise set all tablet related data to default */
- if ((td != NULL) && ELEM(td->Active, DEV_STYLUS, DEV_ERASER)) {
- win->activedevice = (short)td->Active;
- win->pressure = td->Pressure;
- win->xtilt = td->Xtilt;
- win->ytilt = td->Ytilt;
- } else {
- win->activedevice = DEV_MOUSE;
- win->pressure = 0.0;
- win->xtilt = win->ytilt = 0.0;
- }
-}
-
-
-static int event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private)
-{
- GHOST_TEventType type= GHOST_GetEventType(evt);
-
- if (type == GHOST_kEventQuit) {
- exit_usiblender();
- } else {
- GHOST_WindowHandle ghostwin= GHOST_GetEventWindow(evt);
- GHOST_TEventDataPtr data= GHOST_GetEventData(evt);
- Window *win;
-
- if (!ghostwin) {
- // XXX - should be checked, why are we getting an event here, and
- // what is it?
-
- return 1;
- } else if (!GHOST_ValidWindow(g_system, ghostwin)) {
- // XXX - should be checked, why are we getting an event here, and
- // what is it?
-
- return 1;
- } else {
- win= GHOST_GetWindowUserData(ghostwin);
- }
-
- switch (type) {
- case GHOST_kEventCursorMove: {
- if(win->active == 1) {
- GHOST_TEventCursorData *cd= data;
-
- int cx, cy;
-
- GHOST_ScreenToClient(win->ghostwin, cd->x, cd->y, &cx, &cy);
- win->lmouse[0]= cx;
- win->lmouse[1]= (win->size[1]-1) - cy;
-
- update_tablet_data(win, ghostwin);
- window_handle(win, MOUSEX, win->lmouse[0]);
- window_handle(win, MOUSEY, win->lmouse[1]);
- }
- break;
- }
- case GHOST_kEventButtonDown:
- case GHOST_kEventButtonUp: {
- GHOST_TEventButtonData *bd= data;
- int val= (type==GHOST_kEventButtonDown);
- int bbut= convert_mbut(bd->button);
-
- if (bbut==LEFTMOUSE) {
- if (val) {
- if (win->lqual & LR_COMMANDKEY) {
- bbut= win->faked_mbut= RIGHTMOUSE;
- } else if ((win->lqual & LR_ALTKEY) && (U.flag & USER_TWOBUTTONMOUSE)) {
- /* finally, it actually USES the userpref! :) -intrr */
- bbut= win->faked_mbut= MIDDLEMOUSE;
- }
- } else {
- if (win->faked_mbut) {
- bbut= win->faked_mbut;
- win->faked_mbut= 0;
- }
- }
- }
-
- if (bbut==LEFTMOUSE) {
- win->lmbut= change_bit(win->lmbut, L_MOUSE, val);
- } else if (bbut==MIDDLEMOUSE) {
- win->lmbut= change_bit(win->lmbut, M_MOUSE, val);
- } else {
- win->lmbut= change_bit(win->lmbut, R_MOUSE, val);
- }
-
- update_tablet_data(win, ghostwin);
- window_handle(win, bbut, val);
-
- break;
- }
-
- case GHOST_kEventKeyDown:
- case GHOST_kEventKeyUp: {
- GHOST_TEventKeyData *kd= data;
- int val= (type==GHOST_kEventKeyDown);
- int bkey= convert_key(kd->key);
-
- if (bkey) {
- if (bkey==LEFTSHIFTKEY || bkey==RIGHTSHIFTKEY) {
- win->lqual= change_bit(win->lqual, LR_SHIFTKEY, val);
- } else if (bkey==LEFTCTRLKEY || bkey==RIGHTCTRLKEY) {
- win->lqual= change_bit(win->lqual, LR_CTRLKEY, val);
- } else if (bkey==LEFTALTKEY || bkey==RIGHTALTKEY) {
- win->lqual= change_bit(win->lqual, LR_ALTKEY, val);
- } else if (bkey==COMMANDKEY) {
- win->lqual= change_bit(win->lqual, LR_COMMANDKEY, val);
- }
-
- window_handle_ext(win, bkey, val, kd->ascii);
- }
-
- break;
- }
-
- case GHOST_kEventWheel: {
- GHOST_TEventWheelData* wheelData = (GHOST_TEventWheelData*) data;
- if (wheelData->z > 0) {
- window_handle(win, WHEELUPMOUSE, 1);
- } else {
- window_handle(win, WHEELDOWNMOUSE, 1);
- }
- break;
- }
-
- case GHOST_kEventWindowDeactivate:
- case GHOST_kEventWindowActivate: {
- win->active= (type==GHOST_kEventWindowActivate);
- window_handle(win, INPUTCHANGE, win->active);
-
- if (win->active) {
- if ((win->lqual & LR_SHIFTKEY) && !query_qual('s')) {
- win->lqual= change_bit(win->lqual, LR_SHIFTKEY, 0);
- window_handle(win, LEFTSHIFTKEY, 0);
- }
- if ((win->lqual & LR_CTRLKEY) && !query_qual('c')) {
- win->lqual= change_bit(win->lqual, LR_CTRLKEY, 0);
- window_handle(win, LEFTCTRLKEY, 0);
- }
- if ((win->lqual & LR_ALTKEY) && !query_qual('a')) {
- win->lqual= change_bit(win->lqual, LR_ALTKEY, 0);
- window_handle(win, LEFTALTKEY, 0);
- }
- if ((win->lqual & LR_COMMANDKEY) && !query_qual('C')) {
- win->lqual= change_bit(win->lqual, LR_COMMANDKEY, 0);
- window_handle(win, LR_COMMANDKEY, 0);
- }
-
- /*
- * XXX quick hack so OSX version works better
- * when the window is clicked on (focused).
- *
- * it used to pass on the old win->lmouse value,
- * which causes a wrong click in Blender.
- * Actually, a 'focus' click should not be passed
- * on to blender... (ton)
- */
- if(1) { /* enables me to add locals */
- int cx, cy, wx, wy;
- GHOST_GetCursorPosition(g_system, &wx, &wy);
-
- GHOST_ScreenToClient(win->ghostwin, wx, wy, &cx, &cy);
- win->lmouse[0]= cx;
- win->lmouse[1]= (win->size[1]-1) - cy;
- window_handle(win, MOUSEX, win->lmouse[0]);
- window_handle(win, MOUSEY, win->lmouse[1]);
- }
- }
-
- break;
- }
- case GHOST_kEventWindowClose: {
- window_handle(win, WINCLOSE, 1);
- break;
- }
- case GHOST_kEventWindowUpdate: {
- window_handle(win, REDRAW, 1);
- break;
- }
- case GHOST_kEventWindowSize: {
- GHOST_RectangleHandle client_rect;
- int l, t, r, b, scr_w, scr_h;
-
- client_rect= GHOST_GetClientBounds(win->ghostwin);
- GHOST_GetRectangle(client_rect, &l, &t, &r, &b);
-
- GHOST_DisposeRectangle(client_rect);
-
- winlay_get_screensize(&scr_w, &scr_h);
- win->position[0]= l;
- win->position[1]= scr_h - b - 1;
- win->size[0]= r-l;
- win->size[1]= b-t;
-
- window_handle(win, RESHAPE, 1);
- break;
- }
- case GHOST_kEventUnknown:
- case GHOST_kEventQuit:
- case GHOST_kNumEventTypes:
- break;
- }
- }
-
- return 1;
-}
-
-char *window_get_title(Window *win) {
- char *title= GHOST_GetTitle(win->ghostwin);
- char *mem_title= BLI_strdup(title);
- free(title);
-
- return mem_title;
-}
-
-void window_set_title(Window *win, char *title) {
- GHOST_SetTitle(win->ghostwin, title);
-}
-
-short window_get_qual(Window *win)
-{
- int qual= 0;
-
- if( query_qual('s')) qual |= LR_SHIFTKEY;
- if( query_qual('a')) qual |= LR_ALTKEY;
- if( query_qual('c')) qual |= LR_CTRLKEY;
- return qual;
-// return win->lqual;
-}
-
-short window_get_mbut(Window *win) {
- return win->lmbut;
-}
-
-void window_get_mouse(Window *win, short *mval) {
- mval[0]= win->lmouse[0];
- mval[1]= win->lmouse[1];
-}
-
-float window_get_pressure(Window *win) {
- return win->pressure;
-}
-
-void window_get_tilt(Window *win, float *xtilt, float *ytilt) {
- *xtilt= win->xtilt;
- *ytilt= win->ytilt;
-}
-
-short window_get_activedevice(Window *win) {
- return win->activedevice;
-}
-
-void window_get_position(Window *win, int *posx_r, int *posy_r) {
- *posx_r= win->position[0];
- *posy_r= win->position[1];
-}
-
-void window_get_size(Window *win, int *width_r, int *height_r) {
- *width_r= win->size[0];
- *height_r= win->size[1];
-}
-
-void window_set_size(Window *win, int width, int height) {
- GHOST_SetClientSize(win->ghostwin, width, height);
-}
-
-void window_lower(Window *win) {
- GHOST_SetWindowOrder(win->ghostwin, GHOST_kWindowOrderBottom);
-}
-
-void window_raise(Window *win) {
- GHOST_SetWindowOrder(win->ghostwin, GHOST_kWindowOrderTop);
-#ifdef _WIN32
- markdirty_all(); /* to avoid redraw errors in fullscreen mode (aphex) */
-#endif
-}
-
-#if 0
-//#ifdef _WIN32 //FULLSCREEN
-void window_toggle_fullscreen(Window *win, int fullscreen) {
- /* these two lines make sure front and backbuffer are equal. for swapbuffers */
- markdirty_all();
- screen_swapbuffers();
-
- if(fullscreen)
- GHOST_SetWindowState(win->ghostwin, GHOST_kWindowStateFullScreen);
- else
- GHOST_SetWindowState(win->ghostwin, GHOST_kWindowStateMaximized);
-}
-#endif
-
-void window_warp_pointer(Window *win, int x, int y) {
- int oldx=x, oldy=y;
-
- y= win->size[1] - y - 1;
- GHOST_ClientToScreen(win->ghostwin, x, y, &x, &y);
- GHOST_SetCursorPosition(g_system, x, y);
-
- /* on OSX (for example) the setcursor doesnt create event */
- win->lmouse[0]= oldx;
- win->lmouse[1]= oldy;
-}
-
-void window_queue_redraw(Window *win) {
- GHOST_InvalidateWindow(win->ghostwin); // ghost will send back a redraw to blender
-}
-
-/***/
-
-void winlay_process_events(int wait_for_event) {
- GHOST_ProcessEvents(g_system, wait_for_event);
- GHOST_DispatchEvents(g_system);
-}
-
-void winlay_get_screensize(int *width_r, int *height_r) {
- unsigned int uiwidth;
- unsigned int uiheight;
-
- if (!g_system) {
- GHOST_EventConsumerHandle consumer= GHOST_CreateEventConsumer(event_proc, NULL);
-
- g_system= GHOST_CreateSystem();
- GHOST_AddEventConsumer(g_system, consumer);
- }
-
- GHOST_GetMainDisplayDimensions(g_system, &uiwidth, &uiheight);
- *width_r= uiwidth;
- *height_r= uiheight;
-}
-
-Window *winlay_get_active_window(void) {
- return active_gl_window;
-}