|
csapp.h00001 /* 00002 Crystal Space Windowing System: Windowing System Application class interface 00003 Copyright (C) 2001 by Jorrit Tyberghein 00004 Copyright (C) 1998,1999 by Andrew Zabolotny <bit@eltech.ru> 00005 00006 This library is free software; you can redistribute it and/or 00007 modify it under the terms of the GNU Library General Public 00008 License as published by the Free Software Foundation; either 00009 version 2 of the License, or (at your option) any later version. 00010 00011 This library is distributed in the hope that it will be useful, 00012 but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 Library General Public License for more details. 00015 00016 You should have received a copy of the GNU Library General Public 00017 License along with this library; if not, write to the Free 00018 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00019 */ 00020 00021 #ifndef __CSAPP_H__ 00022 #define __CSAPP_H__ 00023 00024 #include <stdarg.h> 00025 00026 #define CSWS_INTERNAL 00027 #include "csws.h" 00028 #include "cscomp.h" 00029 #include "cswstex.h" 00030 #include "cshints.h" 00031 #include "csmouse.h" 00032 #include "csgfxppl.h" 00033 #include "csutil/cseventq.h" 00034 #include "csutil/csstrvec.h" 00035 #include "csutil/cfgacc.h" 00036 #include "iutil/eventh.h" 00037 #include "iutil/comp.h" 00038 #include "iutil/event.h" 00039 00040 class csSkin; 00041 struct iImageIO; 00042 struct iKeyboardDriver; 00043 struct iMouseDriver; 00044 struct iObjectRegistry; 00045 struct iPluginManager; 00046 struct iVirtualClock; 00047 struct iEventQueue; 00048 00052 enum csAppBackgroundStyle 00053 { 00055 csabsNothing = 0, 00057 csabsSolid 00058 }; 00059 00071 class csApp : public csComponent 00072 { 00073 protected: 00074 friend class csMouse; 00075 00077 csGraphicsPipeline GfxPpl; 00079 csMouse *Mouse; 00081 csWSTexVector Textures; 00083 csHintManager *hints; 00085 int WindowListWidth, WindowListHeight; 00087 csMouseCursorID MouseCursorID, OldMouseCursorID; 00089 int DismissCode; 00091 int PhysColorShift; 00093 csTicks CurrentTime; 00095 iEventOutlet *EventOutlet; 00097 csAppBackgroundStyle BackgroundStyle; 00099 bool InFrame; 00100 00102 class csAppPlugin : public iComponent 00103 { 00104 public: 00105 SCF_DECLARE_IBASE; 00107 csApp *app; 00108 00110 csAppPlugin (csApp *iParent); 00111 00113 virtual bool Initialize (iObjectRegistry *object_reg); 00115 virtual bool HandleEvent (iEvent &Event); 00116 00117 struct eiEventHandler : public iEventHandler 00118 { 00119 SCF_DECLARE_EMBEDDED_IBASE(csAppPlugin); 00120 virtual bool HandleEvent(iEvent& e) { return scfParent->HandleEvent(e); } 00121 } scfiEventHandler; 00122 friend struct eiEventHandler; 00123 } *scfiPlugin; 00124 friend class csAppPlugin; 00125 00127 struct csModalInfo 00128 { 00129 csComponent* component; // Component that is modal 00130 csComponent* old_focus; // Old focus before this component was modal 00131 iBase* userdata; // Userdata 00132 }; 00136 csVector ModalInfo; 00137 00138 public: 00140 iObjectRegistry* object_reg; 00142 iVirtualClock* vc; 00144 iEventQueue* event_queue; 00146 iPluginManager* plugin_mgr; 00148 iVFS *VFS; 00150 csConfigAccess config; 00152 iFontServer *FontServer; 00154 iImageIO *ImageLoader; 00156 iKeyboardDriver* KeyboardDriver; 00158 iMouseDriver* MouseDriver; 00160 int Pal [cs_Color_Last]; 00162 csComponent *MouseOwner; 00164 csComponent *KeyboardOwner; 00166 csComponent *FocusOwner; 00168 csComponent *LastMouseContainer; 00170 csSkin *skin; 00172 bool WindowListChanged; 00174 bool InsertMode; 00176 int ScreenWidth, ScreenHeight; 00178 iFont *DefaultFont; 00180 int DefaultFontSize; 00181 00183 csApp (iObjectRegistry *object_reg, csSkin &Skin); 00185 virtual ~csApp (); 00186 00188 virtual bool Initialize (); 00189 00191 void SetSkin (csSkin *Skin, bool DeleteOld = true); 00192 00194 virtual void StartFrame (); 00196 virtual void FinishFrame (); 00197 00199 void FlushEvents (); 00200 00202 iEvent *CreateEvent () 00203 { return EventOutlet->CreateEvent (); } 00204 00206 void Post (iEvent *Event) 00207 { EventOutlet->Post (Event); } 00208 00210 void ShutDown (); 00211 00213 virtual void Idle (); 00214 00216 virtual void Draw (); 00217 00219 virtual void GetFont (iFont *&oFont, int &oFontSize); 00220 00222 void SetBackgroundStyle (csAppBackgroundStyle iBackgroundStyle); 00223 00225 void Printf (int mode, char const* format, ...) CS_GNUC_PRINTF (3, 4); 00226 00228 void PrintfV (int mode, char const* format, va_list) CS_GNUC_PRINTF (3, 0); 00229 00231 bool LoadTexture (const char *iTexName, const char *iTexParams, 00232 int iFlags); 00233 00235 virtual void PrepareTextures (); 00236 00238 csWSTexVector *GetTextures () 00239 { return &Textures; } 00240 00242 iTextureHandle *GetTexture (const char *Name) 00243 { 00244 csWSTexture *tex = GetTextures ()->FindTexture (Name); 00245 return tex ? tex->GetHandle () : (iTextureHandle*)NULL; 00246 } 00247 00249 csMouse &GetMouse () { return *Mouse; } 00250 00252 void SetMouseCursor (csMouseCursorID ID) { MouseCursorID = ID; } 00253 00255 csMouseCursorID GetMouseCursor () { return MouseCursorID; } 00256 00258 csComponent *CaptureMouse (csComponent *who) 00259 { csComponent *c = MouseOwner; MouseOwner = who; return c; } 00260 00262 csComponent *CaptureKeyboard (csComponent *who) 00263 { csComponent *c = KeyboardOwner; KeyboardOwner = who; return c; } 00264 00266 csComponent *CaptureFocus (csComponent *who) 00267 { csComponent *c = FocusOwner; FocusOwner = who; return c; } 00268 00270 bool GetKeyState (int iKey); 00271 00273 csTicks GetCurrentTime () 00274 { return CurrentTime; } 00275 00277 void WindowList (); 00278 00280 void SetWindowListSize (int iWidth, int iHeight) 00281 { WindowListWidth = iWidth; WindowListHeight = iHeight; } 00282 00284 virtual void Insert (csComponent *comp); 00285 00287 virtual void Delete (csComponent *comp); 00288 00294 bool StartModal (csComponent* comp, iBase* userdata); 00295 00299 void StopModal (int iCode = cscmdCancel); 00300 00305 csComponent* GetTopModalComponent (); 00306 00311 iBase* GetTopModalUserdata (); 00312 00314 void Dismiss (int iCode = cscmdCancel); 00315 00317 virtual bool PreHandleEvent (iEvent &Event); 00318 00320 virtual bool HandleEvent (iEvent &Event); 00321 00323 virtual bool PostHandleEvent (iEvent &Event); 00324 00326 virtual void NotifyDelete (csComponent *iComp); 00327 00329 virtual csSkin *GetSkin (); 00330 00332 void HintAdd (const char *iText, csComponent *iComp) 00333 { hints->Add (iText, iComp); } 00334 00336 void HintRemove (csComponent *iComp); 00337 00339 csHintManager &GetHintManager () 00340 { return *hints; } 00341 00343 iFont *LoadFont (const char *iFontName) 00344 { return FontServer->LoadFont (iFontName); } 00345 00346 /* 00347 * The following methods are simple redirectors to csGraphicsPipeline 00348 * object (which is private property of csApp class). 00349 */ 00350 00352 int FindColor (int r, int g, int b); 00353 00355 int pplColor (int color) 00356 { return color & 0x80000000 ? (color & 0x7fffffff) << PhysColorShift : Pal [color]; } 00357 00359 void pplBox (int x, int y, int w, int h, int color) 00360 { GfxPpl.Box (x, y, w, h, pplColor (color)); } 00361 00363 void pplLine (float x1, float y1, float x2, float y2, int color) 00364 { GfxPpl.Line (x1, y1, x2, y2, pplColor (color)); } 00365 00367 void pplPixel (int x, int y, int color) 00368 { GfxPpl.Pixel (x, y, pplColor (color)); } 00369 00371 void pplText (int x, int y, int fg, int bg, iFont *Font, int FontSize, const char *s) 00372 { GfxPpl.Text (x, y, pplColor (fg), bg != -1 ? pplColor (bg) : bg, Font, FontSize, s); } 00373 00375 void pplPixmap (csPixmap *s2d, int x, int y, int w, int h, uint8 Alpha) 00376 { GfxPpl.Pixmap (s2d, x, y, w, h, Alpha); } 00378 void pplTiledPixmap (csPixmap *s2d, int x, int y, int w, int h, 00379 int orgx, int orgy, uint8 Alpha) 00380 { GfxPpl.TiledPixmap (s2d, x, y, w, h, orgx, orgy, Alpha); } 00381 00383 void pplTexture (iTextureHandle *hTex, int sx, int sy, int sw, int sh, 00384 int tx, int ty, int tw, int th, uint8 Alpha = 0) 00385 { GfxPpl.Texture (hTex, sx, sy, sw, sh, tx, ty, tw, th, Alpha); } 00386 00388 void pplSaveArea (csImageArea *&Area, int x, int y, int w, int h) 00389 { GfxPpl.SaveArea (&Area, x, y, w, h); } 00391 void pplRestoreArea (csImageArea *Area, bool Free = false) 00392 { GfxPpl.RestoreArea (Area, Free); } 00394 void pplFreeArea (csImageArea *Area) 00395 { GfxPpl.FreeArea (Area); } 00396 00398 void pplClear (int color) 00399 { GfxPpl.Clear (pplColor (color)); } 00400 00402 void pplSetClipRect (int xmin, int ymin, int xmax, int ymax) 00403 { GfxPpl.SetClipRect (xmin, ymin, xmax, ymax); } 00404 00406 void pplSetClipRect (csRect &clip) 00407 { GfxPpl.SetClipRect (clip.xmin, clip.ymin, clip.xmax, clip.ymax); } 00408 00410 void pplRestoreClipRect () 00411 { GfxPpl.RestoreClipRect (); } 00412 00414 bool ClipLine (float &x1, float &y1, float &x2, float &y2, 00415 int ClipX1, int ClipY1, int ClipX2, int ClipY2) 00416 { return GfxPpl.ClipLine (x1, y1, x2, y2, ClipX1, ClipY1, ClipX2, ClipY2); } 00417 00419 bool SwitchMouseCursor (csMouseCursorID Shape) 00420 { return GfxPpl.SwitchMouseCursor (Shape); } 00421 00423 void GetPixel (int x, int y, uint8 &oR, uint8 &oG, uint8 &oB) 00424 { GfxPpl.GetPixel (x, y, oR, oG, oB); } 00425 00426 //--- 3D drawing ---// 00427 00429 void pplPolygon3D (G3DPolygonDPFX &poly, uint mode) 00430 { GfxPpl.Polygon3D (poly, mode); } 00431 00433 void pplClearZbuffer (int x1, int y1, int x2, int y2) 00434 { GfxPpl.ClearZbuffer (x1, y1, x2, y2); } 00435 00437 void pplClearZbuffer () 00438 { GfxPpl.ClearZbuffer (); } 00439 00441 void SetZbufferMode (unsigned mode) 00442 { GfxPpl.SetZbufferMode (mode); } 00443 00445 void pplBeginDraw (unsigned mode) 00446 { GfxPpl.BeginDraw (mode); } 00447 00449 void pplInvalidate (csRect &rect) 00450 { GfxPpl.Invalidate (rect); } 00451 00461 void pplDontCacheFrame () 00462 { GfxPpl.DontCacheFrame = true; } 00463 00468 iGraphics2D *GetG2D () 00469 { return GfxPpl.G2D; } 00470 00475 iGraphics3D *GetG3D () 00476 { return GfxPpl.G3D; } 00477 00478 protected: 00480 void InitializeSkin (); 00482 void SetupPalette (); 00483 }; 00484 00485 #endif // __CSAPP_H__ Generated for Crystal Space by doxygen 1.2.5 written by Dimitri van Heesch, ©1997-2000 |