/*************************************************************************** * Copyright (C) 2006 by Sascha Hlusiak * * Spam84@gmx.de * * * * 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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include #include #include #include "buttonimage.h" ButtonImage::ButtonImage(const TQRgb *d_normal,int w,int h) { normal=hovered=pressed=animated=NULL; image_width=w; image_height=h; normal_data=hovered_data=animated_data=pressed_data=NULL; org_normal_data=org_hovered_data=NULL; normal_color=hovered_color=pressed_color=TQColor(255,255,255); reset(); if (d_normal)SetNormal(d_normal,w,h); } ButtonImage::~ButtonImage() { if (normal)delete normal; if (hovered)delete hovered; if (pressed)delete pressed; if (animated)delete animated; if (animated_data)delete[] animated_data; if (pressed_data)delete[] pressed_data; if (hovered_data)delete[] hovered_data; if (normal_data)delete[] normal_data; if (org_normal_data)delete[] org_normal_data; if (org_hovered_data)delete[] org_hovered_data; } TQImage ButtonImage::CreateImage(TQRgb *data,TQColor color) { tint(data,color); TQImage img=TQImage((uchar*)data,image_width,image_height,32,NULL,0,TQImage::LittleEndian),img2; img.setAlphaBuffer(true); return img; } void ButtonImage::reset() { if (normal)delete normal; if (hovered)delete hovered; if (pressed)delete pressed; if (animated)delete animated; normal=hovered=pressed=animated=NULL; if (normal_data)delete[] normal_data; if (hovered_data)delete[] hovered_data; if (pressed_data)delete[] pressed_data; if (animated_data)delete[] animated_data; if (org_hovered_data)delete[] org_hovered_data; if (org_normal_data)delete[] org_normal_data; normal_data=hovered_data=animated_data=pressed_data=NULL; org_normal_data=org_hovered_data=NULL; hSpace=vSpace=2; drawMode=0; } void ButtonImage::SetNormal(const TQRgb *d_normal,int w,int h) { image_width=w; image_height=h; if (normal)delete normal; if (animated)delete animated; animated=NULL; if (animated_data)delete[] animated_data; animated_data=NULL; if (hovered_data)delete[] hovered_data; hovered_data=NULL; if (pressed_data)delete[] pressed_data; pressed_data=NULL; if (normal_data)delete[] normal_data; org_normal_data=new TQRgb[image_width*image_height]; memcpy(org_normal_data,d_normal,sizeof(TQRgb)*image_width*image_height); normal_data=new TQRgb[image_width*image_height]; memcpy(normal_data,d_normal,sizeof(TQRgb)*image_width*image_height); normal=new TQImage(CreateImage(normal_data,normal_color)); } void ButtonImage::SetHovered(const TQRgb *d_hovered) { if (hovered)delete hovered; if (hovered_data)delete[] hovered_data; if (org_hovered_data)delete[] org_hovered_data; if (d_hovered) { org_hovered_data=new TQRgb[image_width*image_height]; hovered_data=new TQRgb[image_width*image_height]; memcpy(hovered_data,d_hovered,sizeof(TQRgb)*image_width*image_height); memcpy(org_hovered_data,d_hovered,sizeof(TQRgb)*image_width*image_height); hovered=new TQImage(CreateImage(hovered_data,hovered_color)); }else{ hovered=NULL; hovered_data=NULL; org_hovered_data=NULL; } } void ButtonImage::SetPressed(const TQRgb *d_pressed) { if (pressed)delete pressed; if (pressed_data)delete[] pressed_data; if (d_pressed) { pressed_data=new TQRgb[image_width*image_height]; memcpy(pressed_data,d_pressed,sizeof(TQRgb)*image_width*image_height); pressed=new TQImage(CreateImage(pressed_data,pressed_color)); }else{ pressed=NULL; pressed_data=NULL; } } bool ButtonImage::initialized() { return ((org_normal_data!=NULL)&&(normal_data!=NULL)&&(normal!=NULL)); } void ButtonImage::finish() { if (!org_normal_data) { /* printf("ERROR: No org_normal_data set!\n"); */ return; } if (!hovered_data){ hovered_data=new TQRgb[image_width*image_height]; float faktor=::factory->hovereffect?0.5:1.0; for (int i=0;ihovereffect?0.5:0.4; pressed_data=new TQRgb[image_width*image_height]; if (!org_hovered_data) { org_hovered_data=hovered_data; printf("ERROR: %s (@%d)\n",__FILE__,__LINE__); } for (int i=0;isetAlphaBuffer(true); } } TQImage* ButtonImage::getAnimated( float anim) { if (!normal_data)return NULL; if (!animated_data)return NULL; for (int i=0;i