Free the lizard
git-svn-id: svn://10.0.0.236/trunk@10 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
262
mozilla/cmd/winfe/feimage.cpp
Executable file
262
mozilla/cmd/winfe/feimage.cpp
Executable file
@@ -0,0 +1,262 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.0 (the "NPL"); you may not use this file except in
|
||||
* compliance with the NPL. You may obtain a copy of the NPL at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
||||
* for the specific language governing rights and limitations under the
|
||||
* NPL.
|
||||
*
|
||||
* The Initial Developer of this code under the NPL is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
||||
* Reserved.
|
||||
*/
|
||||
|
||||
#define JMC_INIT_IMGCB_ID 1
|
||||
#ifndef NSPR20
|
||||
#include "coremem.h"
|
||||
#include "stdafx.h"
|
||||
#else
|
||||
#include "stdafx.h"
|
||||
#include "coremem.h"
|
||||
#endif
|
||||
#include "feimage.h"
|
||||
#include "il_types.h"
|
||||
#include "cxdc.h"
|
||||
|
||||
JMC_PUBLIC_API(void)
|
||||
_IMGCB_NewPixmap(struct IMGCB* self, jint op, void* displayContext, jint width, jint height, IL_Pixmap* image, IL_Pixmap* mask)
|
||||
{
|
||||
MWContext *pContext = (MWContext *)displayContext;
|
||||
CAbstractCX *dispCxt = (CAbstractCX *) pContext->fe.cx;
|
||||
|
||||
FEBitmapInfo *imageInfo;
|
||||
|
||||
imageInfo = new FEBitmapInfo;
|
||||
|
||||
if (!imageInfo) return;
|
||||
NI_PixmapHeader* imageHeader = &image->header;
|
||||
imageInfo->targetWidth = CASTINT(width);
|
||||
imageInfo->targetHeight = CASTINT(height);
|
||||
imageInfo->width = CASTINT(width);
|
||||
imageHeader->width = width;
|
||||
|
||||
imageInfo->height = CASTINT(height);
|
||||
imageHeader->height = height;
|
||||
imageInfo->hBitmap = NULL;
|
||||
image->client_data = imageInfo;
|
||||
|
||||
|
||||
if ((imageInfo->bmpInfo = dispCxt->NewPixmap(image, FALSE)) == NULL) {// error
|
||||
delete imageInfo;
|
||||
image->client_data = NULL;
|
||||
return;
|
||||
}
|
||||
if (mask) {
|
||||
FEBitmapInfo * maskInfo;
|
||||
|
||||
NI_PixmapHeader* maskHeader = &mask->header;
|
||||
maskInfo = new FEBitmapInfo;
|
||||
if (!maskInfo) {
|
||||
delete imageInfo;
|
||||
return;
|
||||
}
|
||||
maskHeader->width = imageHeader->width;
|
||||
maskHeader->height = imageHeader->height;
|
||||
|
||||
mask->client_data = maskInfo;
|
||||
maskInfo->hBitmap = NULL;
|
||||
if ((maskInfo->bmpInfo = dispCxt->NewPixmap(mask, TRUE)) == NULL) {// error
|
||||
#ifndef USE_DIB_SECTION
|
||||
if (image->bits) {
|
||||
CDCCX::HugeFree(image->bits);
|
||||
image->bits = NULL;
|
||||
}
|
||||
#endif
|
||||
delete imageInfo;
|
||||
delete maskInfo;
|
||||
mask->client_data = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
maskInfo->width = CASTINT(maskHeader->width);
|
||||
maskInfo->height = CASTINT(maskHeader->height);
|
||||
maskInfo->pContext = dispCxt; // Not used.
|
||||
maskInfo->IsMask = TRUE;
|
||||
}
|
||||
|
||||
imageInfo->pContext = dispCxt; // Not used.
|
||||
imageInfo->IsMask = FALSE;
|
||||
}
|
||||
|
||||
JMC_PUBLIC_API(void)
|
||||
_IMGCB_UpdatePixmap(struct IMGCB* self, jint op, void* a, IL_Pixmap* b, jint c, jint d, jint e, jint f)
|
||||
{
|
||||
}
|
||||
|
||||
JMC_PUBLIC_API(void)
|
||||
_IMGCB_ControlPixmapBits(struct IMGCB* self, jint op, void* displayContext,
|
||||
IL_Pixmap* image, IL_PixmapControl c)
|
||||
{
|
||||
if (c == IL_RELEASE_BITS) {
|
||||
MWContext *pContext = (MWContext *)displayContext;
|
||||
|
||||
XP_ASSERT(pContext);
|
||||
if (!pContext)
|
||||
return;
|
||||
|
||||
ABSTRACTCX(pContext)->ImageComplete(image);
|
||||
}
|
||||
}
|
||||
|
||||
JMC_PUBLIC_API(void)
|
||||
_IMGCB_DestroyPixmap(struct IMGCB* self, jint op, void* displayContext, IL_Pixmap* pixmap)
|
||||
{
|
||||
FEBitmapInfo *imageInfo;
|
||||
|
||||
imageInfo = (FEBitmapInfo*)pixmap->client_data;
|
||||
|
||||
if (imageInfo)
|
||||
delete imageInfo;
|
||||
#ifndef USE_DIB_SECTION
|
||||
if (pixmap->bits) {
|
||||
CDCCX::HugeFree(pixmap->bits);
|
||||
pixmap->bits = NULL;
|
||||
}
|
||||
#endif
|
||||
pixmap->client_data = NULL;
|
||||
}
|
||||
|
||||
JMC_PUBLIC_API(void)
|
||||
_IMGCB_DisplayPixmap(struct IMGCB* self, jint op, void* displayContext, IL_Pixmap* image, IL_Pixmap* mask,
|
||||
jint x, jint y, jint x_offset, jint y_offset, jint width, jint height)
|
||||
{
|
||||
MWContext *pContext = (MWContext *)displayContext;
|
||||
CDCCX *dispCxt = (CDCCX *) pContext->fe.cx;
|
||||
LTRB Rect;
|
||||
dispCxt->DisplayPixmap( image, mask, x, y, x_offset, y_offset, width, height, Rect);
|
||||
}
|
||||
|
||||
JMC_PUBLIC_API(void)
|
||||
_IMGCB_DisplayIcon(struct IMGCB* self, jint op, void* displayContext, jint x, jint y, jint iconNumber)
|
||||
{
|
||||
MWContext *pContext = (MWContext *)displayContext;
|
||||
CDCCX *dispCxt = (CDCCX *) pContext->fe.cx;
|
||||
|
||||
dispCxt->DisplayIcon( x, y, CASTINT(iconNumber));
|
||||
}
|
||||
|
||||
// The width and height are *write-only* we don't care what the original
|
||||
// values are. But, CDCCX::GetIconDimensions() is going to give us
|
||||
// x and y as int32's not int's so jump through a few hoops to get the
|
||||
// sizes right.
|
||||
//
|
||||
extern JMC_PUBLIC_API(void)
|
||||
_IMGCB_GetIconDimensions(struct IMGCB* self, jint op, void* displayContext, int* width, int* height, jint iconNumber)
|
||||
{
|
||||
int32 lWidth = 0;
|
||||
int32 lHeight = 0;
|
||||
|
||||
MWContext *pContext = (MWContext *)displayContext;
|
||||
CDCCX *dispCxt = (CDCCX *)pContext->fe.cx;
|
||||
dispCxt->GetIconDimensions( &lWidth, &lHeight, CASTINT(iconNumber));
|
||||
|
||||
if(width) {
|
||||
*width = CASTINT(lWidth);
|
||||
}
|
||||
if(height) {
|
||||
*height = CASTINT(lHeight);
|
||||
}
|
||||
}
|
||||
|
||||
JMC_PUBLIC_API(void)
|
||||
_IMGCB_init(struct IMGCB* self, struct JMCException* *exceptionThrown)
|
||||
{
|
||||
}
|
||||
|
||||
JMC_PUBLIC_API(void*)
|
||||
_IMGCB_getBackwardCompatibleInterface(struct IMGCB* self, const JMCInterfaceID* iid,
|
||||
struct JMCException* *exceptionThrown)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
ImageGroupObserver(XP_Observable observable,
|
||||
XP_ObservableMsg message,
|
||||
void *message_data,
|
||||
void *closure)
|
||||
{
|
||||
MWContext *pXPCX = (MWContext *)closure;
|
||||
|
||||
switch(message) {
|
||||
case IL_STARTED_LOADING:
|
||||
ABSTRACTCX(pXPCX)->SetImagesLoading(TRUE);
|
||||
break;
|
||||
|
||||
case IL_ABORTED_LOADING:
|
||||
ABSTRACTCX(pXPCX)->SetImagesDelayed(TRUE);
|
||||
break;
|
||||
|
||||
case IL_FINISHED_LOADING:
|
||||
ABSTRACTCX(pXPCX)->SetImagesLoading(FALSE);
|
||||
break;
|
||||
|
||||
case IL_STARTED_LOOPING:
|
||||
ABSTRACTCX(pXPCX)->SetImagesLooping(TRUE);
|
||||
break;
|
||||
|
||||
case IL_FINISHED_LOOPING:
|
||||
ABSTRACTCX(pXPCX)->SetImagesLooping(FALSE);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
FE_UpdateStopState(pXPCX);
|
||||
}
|
||||
|
||||
void
|
||||
FE_MochaImageGroupObserver(XP_Observable observable,
|
||||
XP_ObservableMsg message,
|
||||
void *message_data,
|
||||
void *closure)
|
||||
{
|
||||
IL_GroupMessageData *data = (IL_GroupMessageData *)message_data;
|
||||
MWContext *pXPCX = (MWContext *)data->display_context;
|
||||
|
||||
// If we are passed a NULL display context, the MWContext has been
|
||||
// destroyed.
|
||||
if (!pXPCX)
|
||||
return;
|
||||
|
||||
switch(message) {
|
||||
case IL_STARTED_LOADING:
|
||||
ABSTRACTCX(pXPCX)->SetMochaImagesLoading(TRUE);
|
||||
break;
|
||||
|
||||
case IL_ABORTED_LOADING:
|
||||
ABSTRACTCX(pXPCX)->SetMochaImagesDelayed(TRUE);
|
||||
break;
|
||||
|
||||
case IL_FINISHED_LOADING:
|
||||
ABSTRACTCX(pXPCX)->SetMochaImagesLoading(FALSE);
|
||||
break;
|
||||
|
||||
case IL_STARTED_LOOPING:
|
||||
ABSTRACTCX(pXPCX)->SetMochaImagesLooping(TRUE);
|
||||
break;
|
||||
|
||||
case IL_FINISHED_LOOPING:
|
||||
ABSTRACTCX(pXPCX)->SetMochaImagesLooping(FALSE);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
FE_UpdateStopState(pXPCX);
|
||||
}
|
||||
Reference in New Issue
Block a user