summaryrefslogtreecommitdiff
path: root/src/libs/graphics/context.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/graphics/context.h')
-rw-r--r--src/libs/graphics/context.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/src/libs/graphics/context.h b/src/libs/graphics/context.h
new file mode 100644
index 0000000..09b50cf
--- /dev/null
+++ b/src/libs/graphics/context.h
@@ -0,0 +1,147 @@
+//Copyright Paul Reiche, Fred Ford. 1992-2002
+
+/*
+ * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef LIBS_GRAPHICS_CONTEXT_H_
+#define LIBS_GRAPHICS_CONTEXT_H_
+
+#include "tfb_draw.h"
+#include "libs/memlib.h"
+
+typedef UWORD FBK_FLAGS;
+#define FBK_DIRTY (1 << 0)
+#define FBK_IMAGE (1 << 1)
+
+struct context_desc
+{
+ UWORD Flags;
+ // Low nibble currently unused
+ // High nibble contains GRAPHICS_STATUS
+
+ Color ForeGroundColor, BackGroundColor;
+ DrawMode Mode;
+ FRAME ForeGroundFrame;
+ FONT Font;
+
+ RECT ClipRect;
+
+ FRAME FontEffect;
+ TFB_Image *FontBacking;
+ FBK_FLAGS BackingFlags;
+
+#ifdef DEBUG
+ const char *name;
+ CONTEXT next;
+#endif
+};
+
+#define AllocContext() HCalloc (sizeof (CONTEXT_DESC))
+#define FreeContext HFree
+
+extern CONTEXT _pCurContext;
+extern PRIMITIVE _locPrim;
+
+#define _get_context_fg_color() (_pCurContext->ForeGroundColor)
+#define _get_context_bg_color() (_pCurContext->BackGroundColor)
+#define _get_context_flags() (_pCurContext->Flags)
+#define _get_context_fg_frame() (_pCurContext->ForeGroundFrame)
+#define _get_context_font() (_pCurContext->Font)
+#define _get_context_fbk_flags() (_pCurContext->BackingFlags)
+#define _get_context_fonteff() (_pCurContext->FontEffect)
+#define _get_context_font_backing() (_pCurContext->FontBacking)
+#define _get_context_draw_mode() (_pCurContext->Mode)
+
+#define SwitchContextDrawMode(m) \
+{ \
+ _pCurContext->Mode = (m); \
+}
+#define SwitchContextForeGroundColor(c) \
+{ \
+ _pCurContext->ForeGroundColor = (c); \
+}
+#define SwitchContextBackGroundColor(c) \
+{ \
+ _pCurContext->BackGroundColor = (c); \
+}
+#define SetContextFlags(f) \
+{ \
+ _pCurContext->Flags |= (f); \
+}
+#define UnsetContextFlags(f) \
+{ \
+ _pCurContext->Flags &= ~(f); \
+}
+#define SwitchContextFGFrame(f) \
+{ \
+ _pCurContext->ForeGroundFrame = (f); \
+}
+#define SwitchContextFont(f) \
+{ \
+ _pCurContext->Font = (f); \
+ SetContextFBkFlags (FBK_DIRTY); \
+}
+#define SwitchContextBGFunc(f) \
+{ \
+ _pCurContext->BackGroundFunc = (f); \
+}
+#define SetContextFBkFlags(f) \
+{ \
+ _pCurContext->BackingFlags |= (f); \
+}
+#define UnsetContextFBkFlags(f) \
+{ \
+ _pCurContext->BackingFlags &= ~(f); \
+}
+#define SwitchContextFontEffect(f) \
+{ \
+ _pCurContext->FontEffect = (f); \
+ SetContextFBkFlags (FBK_DIRTY); \
+}
+
+typedef BYTE GRAPHICS_STATUS;
+
+extern GRAPHICS_STATUS _GraphicsStatusFlags;
+#define GRAPHICS_ACTIVE (GRAPHICS_STATUS)(1 << 0)
+#define GRAPHICS_VISIBLE (GRAPHICS_STATUS)(1 << 1)
+#define CONTEXT_ACTIVE (GRAPHICS_STATUS)(1 << 2)
+#define DRAWABLE_ACTIVE (GRAPHICS_STATUS)(1 << 3)
+#define DeactivateGraphics() (_GraphicsStatusFlags &= ~GRAPHICS_ACTIVE)
+#define ActivateGraphics() (_GraphicsStatusFlags |= GRAPHICS_ACTIVE)
+#define GraphicsActive() (_GraphicsStatusFlags & GRAPHICS_ACTIVE)
+#define DeactivateVisible() (_GraphicsStatusFlags &= ~GRAPHICS_VISIBLE)
+#define ActivateVisible() (_GraphicsStatusFlags |= GRAPHICS_VISIBLE)
+#define DeactivateContext() (_GraphicsStatusFlags &= ~CONTEXT_ACTIVE)
+#define ActivateContext() (_GraphicsStatusFlags |= CONTEXT_ACTIVE)
+#define ContextActive() (_GraphicsStatusFlags & CONTEXT_ACTIVE)
+#define DeactivateDrawable() (_GraphicsStatusFlags &= ~DRAWABLE_ACTIVE)
+#define ActivateDrawable() (_GraphicsStatusFlags |= DRAWABLE_ACTIVE)
+#define DrawableActive() (_GraphicsStatusFlags & DRAWABLE_ACTIVE)
+
+#define SYSTEM_ACTIVE (GRAPHICS_STATUS)(CONTEXT_ACTIVE | DRAWABLE_ACTIVE)
+
+#define GraphicsSystemActive() \
+ ((_GraphicsStatusFlags & SYSTEM_ACTIVE) == SYSTEM_ACTIVE)
+#define GraphicsStatus() \
+ (_GraphicsStatusFlags & (GRAPHICS_STATUS)(GRAPHICS_ACTIVE \
+ | GRAPHICS_VISIBLE))
+
+// pValidRect or origin may be NULL
+BOOLEAN GetContextValidRect (RECT *pValidRect, POINT *origin);
+extern void FixContextFontEffect (void);
+
+#endif /* LIBS_GRAPHICS_CONTEXT_H_ */
+