Files
scummvm-cursorfix/engines/director/lingo/xlibs/p/printomatic.cpp
2026-02-02 04:50:13 +01:00

389 lines
15 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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 3 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, see <http://www.gnu.org/licenses/>.
*
*/
#include "common/system.h"
#include "director/director.h"
#include "director/lingo/lingo.h"
#include "director/lingo/lingo-object.h"
#include "director/lingo/lingo-utils.h"
#include "director/lingo/xlibs/p/printomatic.h"
/**************************************************
*
* USED IN:
* Plates are People Too!
* I Spy
*
**************************************************/
/*
-- PrintOMatic XObject
-- Version 1.1.4, August 8, 1995
-- ©1994-95 Electronic Ink
--
-- STANDARD METHODS
I mNew
X mDispose
--
-- DOCUMENT ATTRIBUTES
X mReset
I mNewPage
XI mSetPage, pageNum
IIIII mSetMargins, left, top, right, bottom
X mSetPrintableMargins
I mGetPageWidth
I mGetPageHeight
--
-- GRAPHICS STATE
XIII mSetColor, r, g, b (scale = 0-255)
XI mSetGray, grayLevel (scale = 0-100)
XII mSetPenSize, h, v
XS mSetTextFont, fontName
XI mSetTextSize, fontSize
XS mSetTextStyle, styleNames
XS mSetTextJust, [ right | left | centered ]
--
-- TEXT ELEMENTS
XIIIII mTextBox, left, top, right, bottom, linkedToPrevious
V mSetText, textString [, autoAppend]
V mAppendText, textString [, autoAppend]
V mAppendTextFile, fileName [, autoAppend]
V mAppendTextResource, id | name [, autoAppend]
ISII mDrawText, text, startH, startV
S mGetInsertionPoint
--
-- MASTER FLOWS
XIIII mMasterTextBox, left, top, right, bottom
V mAppendMasterText, textString
V mAppendMasterTextFiles, fileName
XIIII mMasterPictBox, left, top, right, bottom
V mAppendMasterPict, pict | pictFile | pictFolder | pictResID
X mStageToMasterPict
--
-- GRAPHIC ELEMENTS
XIIII mStrokedRect, left, top, right, bottom
XIIII mFilledRect, left, top, right, bottom
XIIIII mStrokedRoundRect, left, top, right, bottom, cornerRadius
XIIIII mFilledRoundRect, left, top, right, bottom, cornerRadius
V mStrokedOval [, left, top, right, bottom | , centerH, centerV, radius ]
V mFilledOval [, left, top, right, bottom | , centerH, centerV, radius ]
XIIII mLine, startH, startV, endH, endV
V mPicture, pict | pictFile | pictResID, left, top [ , right, bottom ]
V mStagePicture, left, top , right, bottom [,clipLeft ,clipTop ...]
V m1BitStagePicture, left, top , right, bottom [,clipLeft ,clipTop ...]
V mEPSFile, fileName, left, top , right, bottom
--
-- PRINTING
II mSetLandscapeMode, trueOrFalse
XS mSetDocumentName, name
I mDoPageSetup
I mDoJobSetup
XS mSetProgressMsg, text
V mSetProgressPict, pict
XII mSetProgressLoc, left, top
I mPrintPreview
V mPrintPicts [, folder]
X mPrint
--
-- SAVING TO DISK
ISISS mSavePageSetup, fileName, resID, fileType, fileCreator
ISI mGetPageSetup, fileName, resID
--
-- MISCELLANEOUS
XI mHideMessages, trueOrFalse
IS mSetPageNumSymbol, symbol
IS mRegister, serialNumber
-- xtra PrintOMatic
--
-- PrintOMatic Xtra
-- Version 1.5.3
-- Copyright 1994-97 Electronic Ink
-- Published by g/matter, inc.
--
-- Product Information: http://www.gmatter.com/
-- Technical Support & Updates: <support@gmatter.com>
--
--
-- CREATE/DESTROY/RESET A DOCUMENT
new object
forget object
reset object
--
-- DOCUMENT/JOB SETUP
doPageSetup object -- returns TRUE or FALSE
doJobSetup object -- returns TRUE or FALSE
--
-- DOCUMENT ATTRIBUTES
setDocumentName object, string name
setLandscapeMode object, boolean landscape
setMargins object, rect margins
setPrintableMargins object
getPageWidth object -- returns page width
getPageHeight object -- returns page height
getPaperWidth object -- returns paper width
getPaperHeight object -- returns paper height
--
-- CREATE/SET PAGES
newPage object -- returns page number
setPage object, int pageNumber
--
-- TEXT/GRAPHIC ATTRIBUTES
setTextFont object, string fontName -- returns TRUE if font was set
setTextSize object, int pointSize
setTextStyle object, string styleCodes
setTextJust object, string justification
setTextLineSpacing object, int spacing
setColor object, int red, int green, int blue
setGray object, int graylevel
setLineWeight object, int pointSize
--
-- GRAPHIC ELEMENTS
drawRect object, rect bounds, boolean filled
drawLine object, point start, point end
drawRoundRect object, rect bounds, int cornerRadius, boolean filled
drawOval object, rect bounds, boolean filled
drawText object, string text, point location
drawPicture object, * -- castmem or fileName, location (point or rect)
drawStagePicture object, * -- location (point or rect), stage portion (rect)
--
-- CREATE FRAMES AND APPEND CONTENTS
newFrame object, rect bounds, boolean linkedToPrevious
append object, * any
appendFile object, * fileName
getInsertionPoint object -- returns string "page, x, y"
--
-- CUSTOMIZE THE PROGRESS BOX
setProgressMsg object, string message
setProgressPict object, * pictCastMember
setProgressLoc object, point location
--
-- PRINT OR PREVIEW
* printPreview *
* print *
--
-- MISCELLANEOUS
hideMessages object, boolean hide
setPageNumSymbol object, string symbol
+ register object, string serialNumber -- returns TRUE or FALSE
+ setLowMemLimits object, globalHeap, localHeap
*/
namespace Director {
const char *PrintOMaticXObj::xlibName = "PrintOMatic";
const XlibFileDesc PrintOMaticXObj::fileNames[] = {
{ "PrintOMatic", nullptr },
{ "PMATIC", nullptr },
{ nullptr, nullptr },
};
static MethodProto xlibMethods[] = {
{ "new", PrintOMaticXObj::m_new, 0, 0, 400 },
{ "dispose", PrintOMaticXObj::m_dispose, 0, 0, 400 },
{ "forget", PrintOMaticXObj::m_dispose, 0, 0, 500 },
{ "reset", PrintOMaticXObj::m_reset, 0, 0, 400 },
{ "newPage", PrintOMaticXObj::m_newPage, 0, 0, 400 },
{ "setPage", PrintOMaticXObj::m_setPage, 1, 1, 400 },
{ "setMargins", PrintOMaticXObj::m_setMargins, 4, 4, 400 },
{ "setPrintableMargins", PrintOMaticXObj::m_setPrintableMargins, 0, 0, 400 },
{ "getPageWidth", PrintOMaticXObj::m_getPageWidth, 0, 0, 400 },
{ "getPageHeight", PrintOMaticXObj::m_getPageHeight, 0, 0, 400 },
{ "getPaperWidth", PrintOMaticXObj::m_getPaperWidth, 0, 0, 500 },
{ "getPaperHeight", PrintOMaticXObj::m_getPaperHeight, 0, 0, 500 },
{ "setColor", PrintOMaticXObj::m_setColor, 3, 3, 400 },
{ "setGray", PrintOMaticXObj::m_setGray, 1, 1, 400 },
{ "setPenSize", PrintOMaticXObj::m_setPenSize, 2, 2, 400 },
{ "setLineWeight", PrintOMaticXObj::m_setLineWeight, 1, 1, 500 },
{ "setTextFont", PrintOMaticXObj::m_setTextFont, 1, 1, 400 },
{ "setTextSize", PrintOMaticXObj::m_setTextSize, 1, 1, 400 },
{ "setTextStyle", PrintOMaticXObj::m_setTextStyle, 1, 1, 400 },
{ "setTextJust", PrintOMaticXObj::m_setTextJust, 1, 1, 400 },
{ "setTextLineSpacing", PrintOMaticXObj::m_setTextLineSpacing, 1, 1, 500 },
{ "textBox", PrintOMaticXObj::m_textBox, 5, 5, 400 },
{ "setText", PrintOMaticXObj::m_setText, 0, 0, 400 },
{ "appendText", PrintOMaticXObj::m_appendText, 0, 0, 400 },
{ "appendTextFile", PrintOMaticXObj::m_appendTextFile, 0, 0, 400 },
{ "append", PrintOMaticXObj::m_appendText, 0, 0, 500 },
{ "appendFile", PrintOMaticXObj::m_appendTextFile, 0, 0, 500 },
{ "appendTextResource", PrintOMaticXObj::m_appendTextResource, 0, 0, 400 },
{ "newFrame", PrintOMaticXObj::m_newFrame, 2, 2, 500 },
{ "drawRect", PrintOMaticXObj::m_drawRect, 2, 2, 500 },
{ "drawLine", PrintOMaticXObj::m_drawLine, 2, 2, 500 },
{ "drawRoundRect", PrintOMaticXObj::m_drawRoundRect, 3, 3, 500 },
{ "drawOval", PrintOMaticXObj::m_drawOval, 2, 2, 500 },
{ "drawText", PrintOMaticXObj::m_drawText, 3, 3, 400 },
{ "drawPicture", PrintOMaticXObj::m_drawPicture, 2, 2, 500 },
{ "drawStagePicture", PrintOMaticXObj::m_drawStagePicture, 2, 2, 500 },
{ "getInsertionPoint", PrintOMaticXObj::m_getInsertionPoint, 0, 0, 400 },
{ "masterTextBox", PrintOMaticXObj::m_masterTextBox, 4, 4, 400 },
{ "appendMasterText", PrintOMaticXObj::m_appendMasterText, 0, 0, 400 },
{ "appendMasterTextFiles", PrintOMaticXObj::m_appendMasterTextFiles, 0, 0, 400 },
{ "masterPictBox", PrintOMaticXObj::m_masterPictBox, 4, 4, 400 },
{ "appendMasterPict", PrintOMaticXObj::m_appendMasterPict, 0, 0, 400 },
{ "stageToMasterPict", PrintOMaticXObj::m_stageToMasterPict, 0, 0, 400 },
{ "strokedRect", PrintOMaticXObj::m_strokedRect, 4, 4, 400 },
{ "filledRect", PrintOMaticXObj::m_filledRect, 4, 4, 400 },
{ "strokedRoundRect", PrintOMaticXObj::m_strokedRoundRect, 5, 5, 400 },
{ "filledRoundRect", PrintOMaticXObj::m_filledRoundRect, 5, 5, 400 },
{ "strokedOval", PrintOMaticXObj::m_strokedOval, 0, 0, 400 },
{ "filledOval", PrintOMaticXObj::m_filledOval, 0, 0, 400 },
{ "line", PrintOMaticXObj::m_line, 4, 4, 400 },
{ "picture", PrintOMaticXObj::m_picture, 0, 0, 400 },
{ "stagePicture", PrintOMaticXObj::m_stagePicture, 0, 0, 400 },
{ "1BitStagePicture", PrintOMaticXObj::m_1BitStagePicture, 0, 0, 400 },
{ "ePSFile", PrintOMaticXObj::m_ePSFile, 0, 0, 400 },
{ "setLandscapeMode", PrintOMaticXObj::m_setLandscapeMode, 1, 1, 400 },
{ "setDocumentName", PrintOMaticXObj::m_setDocumentName, 1, 1, 400 },
{ "doPageSetup", PrintOMaticXObj::m_doPageSetup, 0, 0, 400 },
{ "doJobSetup", PrintOMaticXObj::m_doJobSetup, 0, 0, 400 },
{ "setProgressMsg", PrintOMaticXObj::m_setProgressMsg, 1, 1, 400 },
{ "setProgressPict", PrintOMaticXObj::m_setProgressPict, 0, 0, 400 },
{ "setProgressLoc", PrintOMaticXObj::m_setProgressLoc, 2, 2, 400 },
{ "printPreview", PrintOMaticXObj::m_printPreview, 0, 0, 400 },
{ "printPicts", PrintOMaticXObj::m_printPicts, 0, 0, 400 },
{ "print", PrintOMaticXObj::m_print, 0, 0, 400 },
{ "savePageSetup", PrintOMaticXObj::m_savePageSetup, 4, 4, 400 },
{ "getPageSetup", PrintOMaticXObj::m_getPageSetup, 2, 2, 400 },
{ "hideMessages", PrintOMaticXObj::m_hideMessages, 1, 1, 400 },
{ "setPageNumSymbol", PrintOMaticXObj::m_setPageNumSymbol, 1, 1, 400 },
{ "register", PrintOMaticXObj::m_register, 1, 1, 400 },
{ nullptr, nullptr, 0, 0, 0 }
};
static BuiltinProto xlibBuiltins[] = {
{ nullptr, nullptr, 0, 0, 0, VOIDSYM }
};
PrintOMaticXObject::PrintOMaticXObject(ObjectType ObjectType) :Object<PrintOMaticXObject>("PrintOMatic") {
_objType = ObjectType;
}
bool PrintOMaticXObject::hasProp(const Common::String &propName) {
return (propName == "name");
}
Datum PrintOMaticXObject::getProp(const Common::String &propName) {
if (propName == "name")
return Datum(PrintOMaticXObj::xlibName);
warning("FileIO::PrintOMaticXObject: unknown property '%s'", propName.c_str());
return Datum();
}
void PrintOMaticXObj::open(ObjectType type, const Common::Path &path) {
PrintOMaticXObject::initMethods(xlibMethods);
PrintOMaticXObject *xobj = new PrintOMaticXObject(type);
if (type == kXtraObj) {
g_lingo->_openXtras.push_back(xlibName);
g_lingo->_openXtraObjects.push_back(xobj);
}
g_lingo->exposeXObject(xlibName, xobj);
g_lingo->initBuiltIns(xlibBuiltins);
}
void PrintOMaticXObj::close(ObjectType type) {
PrintOMaticXObject::cleanupMethods();
g_lingo->_globalvars[xlibName] = Datum();
}
void PrintOMaticXObj::m_new(int nargs) {
g_lingo->printSTUBWithArglist("PrintOMaticXObj::m_new", nargs);
g_lingo->dropStack(nargs);
g_lingo->push(g_lingo->_state->me);
}
XOBJSTUBNR(PrintOMaticXObj::m_dispose)
XOBJSTUBNR(PrintOMaticXObj::m_reset)
XOBJSTUB(PrintOMaticXObj::m_newPage, 0)
XOBJSTUBNR(PrintOMaticXObj::m_setPage)
XOBJSTUB(PrintOMaticXObj::m_setMargins, 0)
XOBJSTUBNR(PrintOMaticXObj::m_setPrintableMargins)
XOBJSTUB(PrintOMaticXObj::m_getPageWidth, 0)
XOBJSTUB(PrintOMaticXObj::m_getPageHeight, 0)
XOBJSTUB(PrintOMaticXObj::m_getPaperWidth, 0)
XOBJSTUB(PrintOMaticXObj::m_getPaperHeight, 0)
XOBJSTUBNR(PrintOMaticXObj::m_setColor)
XOBJSTUBNR(PrintOMaticXObj::m_setGray)
XOBJSTUBNR(PrintOMaticXObj::m_setPenSize)
XOBJSTUBNR(PrintOMaticXObj::m_setLineWeight)
XOBJSTUBNR(PrintOMaticXObj::m_setTextFont)
XOBJSTUBNR(PrintOMaticXObj::m_setTextSize)
XOBJSTUBNR(PrintOMaticXObj::m_setTextStyle)
XOBJSTUBNR(PrintOMaticXObj::m_setTextJust)
XOBJSTUBNR(PrintOMaticXObj::m_setTextLineSpacing)
XOBJSTUBNR(PrintOMaticXObj::m_textBox)
XOBJSTUB(PrintOMaticXObj::m_setText, 0)
XOBJSTUB(PrintOMaticXObj::m_appendText, 0)
XOBJSTUB(PrintOMaticXObj::m_appendTextFile, 0)
XOBJSTUB(PrintOMaticXObj::m_appendTextResource, 0)
XOBJSTUB(PrintOMaticXObj::m_newFrame, 0)
XOBJSTUBNR(PrintOMaticXObj::m_drawRect)
XOBJSTUBNR(PrintOMaticXObj::m_drawLine)
XOBJSTUBNR(PrintOMaticXObj::m_drawRoundRect)
XOBJSTUBNR(PrintOMaticXObj::m_drawOval)
XOBJSTUB(PrintOMaticXObj::m_drawText, 0)
XOBJSTUBNR(PrintOMaticXObj::m_drawPicture)
XOBJSTUBNR(PrintOMaticXObj::m_drawStagePicture)
XOBJSTUB(PrintOMaticXObj::m_getInsertionPoint, "page, 0, 0")
XOBJSTUBNR(PrintOMaticXObj::m_masterTextBox)
XOBJSTUB(PrintOMaticXObj::m_appendMasterText, 0)
XOBJSTUB(PrintOMaticXObj::m_appendMasterTextFiles, 0)
XOBJSTUBNR(PrintOMaticXObj::m_masterPictBox)
XOBJSTUB(PrintOMaticXObj::m_appendMasterPict, 0)
XOBJSTUBNR(PrintOMaticXObj::m_stageToMasterPict)
XOBJSTUBNR(PrintOMaticXObj::m_strokedRect)
XOBJSTUBNR(PrintOMaticXObj::m_filledRect)
XOBJSTUBNR(PrintOMaticXObj::m_strokedRoundRect)
XOBJSTUBNR(PrintOMaticXObj::m_filledRoundRect)
XOBJSTUB(PrintOMaticXObj::m_strokedOval, 0)
XOBJSTUB(PrintOMaticXObj::m_filledOval, 0)
XOBJSTUBNR(PrintOMaticXObj::m_line)
XOBJSTUB(PrintOMaticXObj::m_picture, 0)
XOBJSTUB(PrintOMaticXObj::m_stagePicture, 0)
XOBJSTUB(PrintOMaticXObj::m_1BitStagePicture, 0)
XOBJSTUB(PrintOMaticXObj::m_ePSFile, 0)
XOBJSTUB(PrintOMaticXObj::m_setLandscapeMode, 0)
XOBJSTUBNR(PrintOMaticXObj::m_setDocumentName)
XOBJSTUB(PrintOMaticXObj::m_doPageSetup, 0)
XOBJSTUB(PrintOMaticXObj::m_doJobSetup, 0)
XOBJSTUBNR(PrintOMaticXObj::m_setProgressMsg)
XOBJSTUB(PrintOMaticXObj::m_setProgressPict, 0)
XOBJSTUBNR(PrintOMaticXObj::m_setProgressLoc)
XOBJSTUB(PrintOMaticXObj::m_printPreview, 0)
XOBJSTUB(PrintOMaticXObj::m_printPicts, 0)
XOBJSTUBNR(PrintOMaticXObj::m_print)
XOBJSTUB(PrintOMaticXObj::m_savePageSetup, 0)
XOBJSTUB(PrintOMaticXObj::m_getPageSetup, 0)
XOBJSTUBNR(PrintOMaticXObj::m_hideMessages)
XOBJSTUB(PrintOMaticXObj::m_setPageNumSymbol, 0)
void PrintOMaticXObj::m_register(int nargs) {
Common::String serialNumber = g_lingo->pop().asString();
debugC(1, kDebugXObj, "PrintOMaticXObj::m_register: Registered with serial \"%s\"", serialNumber.c_str());
}
}